Herencia
Concepto
Es una propiedad que permite que los objetos sean creados a partir de
otros ya existentes, obteniendo características (métodos y atributos)
similares a los ya existentes. Es la relación entre una clase general y
otra clase mas especifica.
La herencia es la transmisión del código entre unas clases y otras. Para
soportar un mecanismo de herencia tenemos dos clases: la clase padre y
la/s clase/s hija/s. La clase padre es la que transmite su código a las
clases hijas. En muchos lenguajes de programación se declara la herencia
con la palabra "extends".
Tipos de Herencia
Simples y multiples
- Simples: permite que una clase herede las propiedades y metodos de su superclase en una adena jerárquica. Sólo puede heredar de una clase base y de ninguna otra.
- Multiples: es aquella en que cada clase puede heredar las propiedades y metodos de cualquier numero de clases. Puede heredar las características de varias clases base, es decir, puede tener varios padres
De implementacion y de interfaz
- De implementacion: la implementacion de los objetos es heredada. Puede sobreescribirse en las clases derivadas.
- De interfaz: solo se hereda a interfaz, no hay implementacion a nivel de clase base (interfaces en Java, clases abstractas en C++).
Ventajas y Desventajas
Ventajas
- Ayuda a los programadores a ahorrar código y tiempo, ya que la clase padre ha sido implementada y verificada con anterioridad, restando solo referenciar desde la clase derivada a la clase base (que suele ser extends, inherits, subclass u otras palabras clave similares, dependiendo del lenguaje).
- Los objetos pueden ser construidos a partir de otros similares. Para ello es necesario que exista una clase base (que incluso puede formar parte de una jerarquía de clases más amplia).
- La clase derivada hereda el comportamiento y los atributos de la clase base, y es común que se le añada su propio comportamiento o que modifique lo heredado.
- Toda clase pueden servir como clase base para crear otras
Desventajas
Si la jerarquía de clases es demasiado compleja, el programador puede
tener problemas para comprender el funcionamiento de un programa.
Además puede volverse más complejo detectar y resolver errores de
programación, por ejemplo al modificar una clase padre que afecta el
funcionamiento de las subclases.
Otro problema es que las subclases se deben definir en código, por lo
que los usuarios del programa no puede definir subclases nuevas. Otros
patrones de diseño permiten que los usuarios puedan definir variantes de
una entidad en tiempo de ejecución.
Polimorfismo
Concepto
Es la capacidad que tienen los objetos de una clase de responder al mismo
mensaje o evento en función de los parámetros utilizados durante su
invocación. Un objeto polimórfico es una entidad que puede contener
valores de diferentes tipos durante la ejecución del programa.
Clasificación
Se puede clasificar el polimorfismo en dos grandes clases:
- Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.
- Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explícitos y declarados uno por uno antes de poder ser utilizados.
El polimorfismo dinámico unido a la herencia es lo que en ocasiones se conoce como programación genérica.
También se clasifica en herencia por redefinición de métodos
abstractos y por método sobrecargado. El segundo hace referencia al
mismo método con diferentes parámetros.
Interfaces
Concepto
Es un conjunto de métodos abstractos y de constantes cuya funcionalidad
es la de determinar el funcionamiento de una clase, es decir, funciona
como un molde o como una plantilla. Al ser sus métodos abstractos estos
no tiene funcionalidad alguna, sólo se definen su tipo, argumento y tipo
de retorno.
Características de las Interfaces:
- Las Interfaces solo pueden tener visibilidad de package o public.
- Todos los métodos declarados en una Interfaz son public y abstract, si no se le indica, Java lo pondrá implícitamente.
- Los métodos de una Interfaz no pueden ser estáticos, ya que estos deben ser redefinidos, y al ser estáticos les sería imposible.
- Todos los atributos declarados en una Interfaz son "public static final" y deberán tener asignado un valor constante. Todos los nombres de constantes van en "MAYÚSCULAS"
- Una clase puede implementar una o más interfaces.
- Una Interfaz puede heredar de una o varias interfaces, pero no pueden implementar NADA. Como sabemos, las clases solo pueden heredar de otra clase, pero las Interfaces pueden hacer herencia múltiples.
- Todas las clases que implementen una interfaz deben de redefinir todos los métodos de esa interfaz.
- Las interfaces no tienen constructor, por lo que no es posible crear objetos con el operador "new" de ésta.
- Si se implementa en una clase una Interfaz, y esta Interfaz hereda de otra, la clase deberá implementar todos los métodos de la interfaz que implementa y de los métodos que esta hereda.
- Para la herencia de las interfaces se pone la palabra clave extends y se ponen todas las interfaces que se deseen separadas por comas.
- Una Interfaz puede ocultar constantes y métodos heredados de otras Interfaces si los vuelve a declarar en la clase que hereda.
Ejemplo

No hay comentarios:
Publicar un comentario