El lenguaje java permite redefinir miembros de la clase base
en las clases derivadas, pero el compilador emite una advertencia cuando
detecta una redefinición. Una advertencia (warning) es un mensaje del
compilador acerca de un posible problema. Sin embargo, en este caso sí se
genera código ejecutable (a diferencia del mensaje de error). Redefinición de
campos. El siguiente ejemplo muestra cómo reutilizar los identificadores de los
campos de la clase base en una clase derivada.
lunes, 11 de abril de 2016
3.5 Constructores y destructores en clases derivadas.
Constructores en clases derivadas
Al
instanciar objetos de clases derivadas se inicia una cadena de
invocaciones a constructores en las cuales el constructor de la clase
derivada, antes de realizar sus propias tareas, invoca (ya sea implícita
o explícitamente) al constructor de su clase base. Similarmente, si la
clase base fue derivada de otra clase, el constructor de la clase base
debe invocar al constructor de la clase ubicada en el siguiente nivel
superior de la jerarquía, y así sucesivamente. El último constructor
invocado en la cadena es el constructor de la clase Object, cuyo cuerpo
se ejecuta primero. El cuerpo del constructor de la clase derivada se
ejecuta al final. El constructor de cada clase base inicializa las
variables de instancia que el objeto de la clase derivada hereda.
Destructores en clases derivadas
Cuando
remueve de la memoria un objeto de una clase derivada, el recolector de
basura invoca al destructor del objeto. Esto inicia una cadena de
invocaciones a destructores, en donde el destructor de la clase derivada
y los destructores de las clases bases directas e indirectas se
ejecutan en orden inverso al que se ejecutaron los constructores, esto
es, primero se ejecuta el destructor de la clase derivada y al final se
ejecuta el destructor de la clase base ubicada en el nivel superior de
la jerarquía. La ejecución de los destructores debe liberar todos los
recursos que el objeto adquirió, antes de que el recolector de basura
reclame la memoria de ese objeto. Cuando el recolector de basura invoca
al destructor de un objeto de una clase derivada, ese destructor realiza
su tarea y después invoca al destructor de la clase base. El proceso se
repite hasta que se invoca al destructor de la clase Object.
3.4 Referencia al objeto de la clase base
La jerarquía de clases que describen las figuras planas
Consideremos
las figuras planas cerradas como el rectángulo, y el círculo. Tales
figuras comparten características comunes como es la posición de la
figura, de su centro, y el área de la figura, aunque el procedimiento
para calcular dicha área sea completamente distinto. Podemos por tanto,
diseñar una jerarquía de clases, tal que la clase base denominada
Figura, tenga las características comunes y cada clase derivada las
específicas. La relación jerárquica se muestra en la figura
La clase Figura es la que contiene las características comunes a dichas
figuras concretas por tanto, no tiene forma ni tiene área. Esto lo
expresamos declarando Figura como una clase abstracta, declarando la
función miembro area abstract.
Las clases abstractas solamente se pueden usar como clases base para
otras clases. No se pueden crear objetos pertenecientes a una clase
abstracta. Sin embargo, se pueden declarar variables de dichas clases.
En el juego del ajedrez podemos definir una clase base denominada Pieza,
con las características comunes a todas las piezas, como es su posición
en el tablero, y derivar de ella las características específicas de
cada pieza particular. Así pues, la clase Pieza será una clase abstracta
con una función abstract denominada mover, y cada tipo de pieza
definirá dicha función de acuerdo a las reglas de su movimiento sobre el
tablero.
3.3 Reutilización de miembros heredados.
La
reutilización de código se refiere al comportamiento y a las técnicas
que garantizan que una parte o la totalidad de un programa informático
existente se pueda emplear en la construcción de otro programa. De esta
forma se aprovecha el trabajo anterior, se economiza tiempo, y se reduce
la redundancia.
La manera
más fácil de reutilizar código es copiarlo total o parcialmente desde el
programa antiguo al programa en desarrollo. Pero es trabajoso mantener
múltiples copias del mismo código, por lo que en general se elimina la
redundancia dejando el código reusable en un único lugar, y llamándolo
desde los diferentes programas. Este proceso se conoce como abstracción.
La abstracción puede verse claramente en las bibliotecas de software,
en las que se agrupan varias operaciones comunes a cierto dominio para
facilitar el desarrollo de programas nuevos. Hay bibliotecas para
convertir información entre diferentes formatos conocidos, acceder a
dispositivos de almacenamiento externos, proporcionar una interfaz con
otros programas, manipular información de manera conocida (como números,
fechas, o cadenas de texto).
Para que el
código existente se pueda reutilizar, debe definir alguna forma de
comunicación o interfaz. Esto se puede dar por llamadas a una subrutina,
a un objeto, o a una clase.
1. Se puede declarar un nuevo atributo con el mismo identificador que uno heredado, quedando este atributo oculto. Esta técnica no es recomendable.
2. Se puede declarar un nuevo método de instancia con la misma cabecera que el de la clase ascendiente, lo que supone su sobreescritura. Por lo tanto, la sobreescritura o redefinición consiste en que métodos adicionales declarados en la clase descendiente con el mismo nombre, tipo de dato devuelto y número y tipo de parámetros sustituyen a los heredados.
3. Se puede declarar un nuevo método de clase con la misma cabecera que el de la clase ascendiente, lo que hace que éste quede oculto. Por lo tanto, los métodos de clase o estáticos (declarados como static) no pueden ser redefinidos.
4. Un método declarado con el modificador final tampoco puede ser redefinido por una clase derivada.
5. Se puede declarar un constructor de la subclase que llame al de la superclase de forma implícita o de mediante la palabra reservada super.
6. En general puede accederse a los métodos de la clase ascendiente que han sido redefinidos empleando la palabra reservada super delante del identificador del método. Este mecanismo sólo permite acceder al metodo perteneciente a la clase en el nivel inmediatamente superior de la jerarquía de clases.
3.2 Clasificación. herencia simple, herencia múltiple.
Herencia
La herencia es un mecanismo que permite la definición de una clase a
partir de la definición de otra ya existente. La herencia permite
compartir automáticamente métodos y datos entre clases, subclases y
objetos.
La herencia está fuertemente ligada a la re-utilización del código en la
OOP. Esto es, el código de cualquiera de las clases puede ser utilizado
sin más que crear una clase derivada de ella, o bien una subclase.
Hay dos tipos de herencia: Herencia Simple y Herencia Múltiple. La
primera indica que se pueden definir nuevas clases solamente a partir de
una clase inicial mientras que la segunda indica que se pueden definir
nuevas clases a partir de dos o más clases iniciales. Java sólo permite
herencia simple.
Herencia Múltiple en Java
Todos sabemos que la herencia es un mecanismo propio de la programación
orientada a objetos POO. Nos permite crear clases a partir de otra, las
cuales las unen vínculos sumamente estrechos, casi de familia. Es por
ello que se llama herencia.
La herencia múltiple en java no es soportada nativa-mente. Sin embargo
muchos autores y desarolladores la simulan utilizando la palabra
reservada implements e interfaces, que sirve para implementar o cubrir
una clase con respecto a otra.
3.1 Definición: Clase base, Clase derivada.
Clase Base
Una clase base es aquella que no dependen ninguno de sus atributos u objetos de la clase de alguna otra clase, se podría decir que en términos de herencia, seria la clase padre, la clase que se mantiene fija, en el aspecto de herencia.
Es también por así llamarlo la clase principal de un programa, seria la clase primaria sin incluir la clase main en donde se corre todo el programa en si.
Clase Derivada
son clases que dependen de las clases bases, ya que algunos de sus métodos son también heredados, y muchas veces, el compilador arrojara malos resultados, ya que al ser dependientes estas clases, a veces podrán generar errores lógicos.
Una clase base es aquella que no dependen ninguno de sus atributos u objetos de la clase de alguna otra clase, se podría decir que en términos de herencia, seria la clase padre, la clase que se mantiene fija, en el aspecto de herencia.
Es también por así llamarlo la clase principal de un programa, seria la clase primaria sin incluir la clase main en donde se corre todo el programa en si.
Clase Derivada
son clases que dependen de las clases bases, ya que algunos de sus métodos son también heredados, y muchas veces, el compilador arrojara malos resultados, ya que al ser dependientes estas clases, a veces podrán generar errores lógicos.
3. Herencia
La herencia es específica de la programación orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene las atributos y métodos de la clase primaria. La principal ventaja de la herencia es la capacidad para definir atributos y métodos nuevos para la subclase, que luego se aplican a los atributos y métodos heredados.
Suscribirse a:
Entradas (Atom)


