domingo, 29 de marzo de 2009

Herencias, Interfaces y Polimorfismo:

Herencias:

“Es una relación entre clases en la cual una clase comparte la estructura y comportamiento definido en otra clase “(Grady Booch)

Cada clase que hereda de otra posee:

* Los atributos de la clase base además de los propios

* Soporta todos o algunos de los métodos de la clase base

* Una subclase hereda de una clase base

image

En el ejemplo de arriba, Transporte, es la Clase Base y de ella se derivan las otras dos, que son automóvil y avión,  ambas clases utilizan los métodos y atributos de la clase base, ese decir, que tanto un auto como un avión llevan pasajeros, avanzan y se detienen.

la subclase es un tipo específico de la superclase

* Un Cuadrado es un Rectángulo

* Un perro es un mamífero

* Un automóvil es un vehículo a motor

Interfaces:

Recurso de diseño soportado por los lenguajes orientados a objetos que permite definir comportamiento

Permite que clases que no están estrechamente relacionadas entre sí deban tener el mismo comportamiento

La implementación de una interfaz es un contrato que obliga a la clase a implementar todos los métodos definidos en la interfaz

Se crean las interfaces que definen comportamiento

Hidroavión deberá definir los comportamientos de cada una de las interfaces que implemente

image

Polimorfismo:

Es la propiedad que tienen los objetos de permitir invocar genéricamente un comportamiento (método) cuya implementación será delegada al objeto correspondiente recién en tiempo de ejecución

El polimorfismo tiende a existir en las relaciones de herencia, pero no siempre es así

image

Por un lado tenemos la clase base “Transporte”, que posee los métodos “Avanzar” y “Frenar”. Por otro lado tenemos tres clases distintas derivadas de la clase “Transporte”, cada una de las cuales podrá sobrescribir la implementación de los métodos Avanzar y Frenar para que su comportamiento sea más específico.

Ahora bien, como todas heredan de la misma clase base, las clases derivadas pueden ser tratadas genéricamente. Esto quiere decir que podríamos tener un array que almacene objetos de tipo Transporte, y recorrerlo luego para llamar al método “Avanzar” de cada uno. De esta forma, en tiempo de codificación es imposible saber a qué método “Avanzar” se está llamando en realidad (al del Auto? Al del caballo? Al del transbordador?), sino que esta decisión es tomada en tiempo de ejecución en base al tipo particular de objeto que esté instanciado.

“El polimorfismo es hacer lo mismo, pero de forma distinta”.

No hay comentarios:

Publicar un comentario