Herencia
En orientación a objetos la herencia es el mecanismo fundamental para implementar la reutilización y extensibilidad del software. A través de ella los diseñadores pueden construir nuevas clases partiendo de una jerarquía de clases ya existente las cuales deben estar previamente comprobadas y verificadas evitando con ello el rediseño esta nao lleva qué. La herencia facilita la creación de objetos a partir de otros ya existentes, obteniendo características similares al mismo.
Es la relación entre una clase general y otra clase más específica. Por ejemplo: Si declaramos una clase párrafo derivada de una clase texto, todos los métodos y variables asociadas con la clase texto, son automáticamente heredados por la subclase párrafo.
La herencia es uno de los mecanismos de la programación orientada a objetos, por medio del cual una clase se deriva de otra, llamada entonces clase base o clase padre, de manera que extiende su funcionalidad. Una de sus funciones más importantes es la de proveer Polimorfismo
Herencia.
Herencia es la propiedad de que los ejemplares de una clase hija extiendan el comportamiento y los datos asociados a las clases paternas. La herencia es siempre transitiva, es decir que una sub-clase hereda características de superclases alejadas muchos niveles.
Beneficios de la herencia.
Reusabilidad del software
Cuando el comportamiento se hereda de otra clase, no es necesario reescribir el código que lo define.
Cuando el comportamiento se hereda de otra clase, no es necesario reescribir el código que lo define.
Para analizar los tipos de herencia en java hay que tener en cuenta que existen 5 distintos tipos de clases:
Clase base, clases derivadas del mismo paquete, clases derivadas en distinto paquete, clases del mismo paquete, clases en distinto paquet
Tipos de herencia
Un objeto puede extender las características de otro objeto y de ningún otro, es decir, que sólo puede heredar o tomar atributos de un solo padre o de una sola clase
Un objeto puede extender las características de uno o más objetos, es decir, puede tener varios padres. En este aspecto hay discrepancias entre los diseñadores de lenguajes. Algunos de ellos han preferido no admitir la herencia múltiple por las posibles coincidencias en nombres de métodos o datos miembros. Por ejemplo C++, Python, PHP permiten herencia múltiple, mientras que Java, Ada y C# sólo permiten herencia simple
Como podemos ver existen los tipos de herencia ya mencionados pero también tenemos estos los cuales también son muy utilizados en la programación
A) Especialización
Es la forma de herencia mas comun y cumple en forma directa la regla es-un
B) Especificación
Se trata de un caso especial de sub-clasificaion por especializacion, excepto que las sub-clases no son refinamientos de un tipo existente, sino mas bien realizaciones de una especificacion incompleta. Es decir, que la superclase describe un comportamiento que sera implantado solo por las sub-clases.
C) Construcción
Se da cuando la sub-clase ha heredado casi completamente su comportamiento de la superclase y solo tiene que modificar algunos metodos o los argumentos de cierta manera.
D) Generalización
Esta es la opuesta a la creacion de sub-clases por especializacion. Se debe evitar; solo deben aplicarse cuando no se pueden modificar las clases existentes o se deben anular metodos de las mismas.
E) Extensión
Agrega una capacidad totalmente nueva a un objeto existente. Se distingue de la generalizacion, ya que esta debe anular al menos un metodo de la clase base, mientras que la extension solo agrega metodos nuevos.
F) Limitación
Es una variante de la especificacion en donde el comportamiento de la sub-clase es mas reducido o esta mas restringido que que el comportamiento de la superclase. Tambien se da en situaciones en las que las clases existentes no pueden modificarse.
G) Variación
Se da cuando do o más clases tienen implantaciones similares, pero no parece haber ninguna relación jerárquica entre los conceptos representados por las clases. Ej: código del mouse y de la placa de video.
H) Combinación
Se da cuando una sub-clase resulta de la combinación de características de dos o más clases.
Características y Funciones de los miembro
Solo se pueden heredar clases, no funciones ordinarias ni variables.
Una sub-clase deriva de una clase base. La clase derivada puede a su vez ser utilizada como clase base para derivar más clases, conformándose así la jerarquía de clases.
Características de las clases derivadas
Una clase derivada o sub-clase:
Puede a su vez ser una clase base, dando lugar a la jerarquía de clase.
Los miembros heredados por una clase derivada, pueden a su vez ser heredados por más clases derivadas a ella.
Hereda todos los miembros de la clase base, pero solo podrá acceder a aquellos que los especificadores de acceso de la clase base lo permitan. Las clases derivadas solo pueden acceder a los miembros public, protected y private-protected (en java) de la clase base, como si fueran miembros propios.
No tienen acceso a los miembros private de la clase base.
Pueden añadir sus propios datos y funciones miembros.
Tomando en cuenta esta características cabe mencionar que Los siguientes elementos de la clase base no se heredan; Constructores y destructores, Funciones y datos estáticos de la clase, Funciones amigas y operadores sobrecargados (solo c++)
Cabe destacar que los miembros se denominan. Publico, protegido y privado
Los miembros public pasan a ser public en la clase derivada. Los miembros protected pasan a ser protected. Y los privados permanecen privados en la clase base.
Los miembros Private Todos los miembros public y private son miembros private en la clase derivada.
Miembros prívate Todos los miembros public y protected de la clase base son miembros protected en la derivada.
Se hace necesario mencionar los accesos, S: acceso posible, N: acceso denegado. R: reservado a las subclases. Acceso posible si el miembro se refiere a un objeto de la subclase y no a uno de la clase base.
Ejemplo
class Pedido {
public Lineapedido articuloLinea (Producto unProducto)¡
public void agregaArticuloLinea (Numero cantidad,
Producto paraProducto);
Class Pedido {
private Dictionary _articulosLinea;
class Persona {
// obtiene el patrón actual
Compañía patrón();
// patrón en una fecha dada
Compañía patrón(Date);
void cambiaPatron(Compañía nuevopatron, Date cambiaFecha);
void dejaPatron (Date cambiaFecha):
class Conjunto <T> {
void insert (T nuevoElemento) ; void remove (T unElemento);
Conjunto <Empleado> conjuntoEmpleados;
AUTORES LUIS NOGUERA Y HILDA VERONICA TORRES
|