Lo
primero que se les viene a la cabeza a los estudiantes cuando se les menciona la reutilización del código es el
famoso copiar y pegar al que se han acostumbrado en la programación
estructurada, y de hecho muchos lo hacen en poo, lo cual es una de las
practicas que más encarece el desarrollo de software. Como todo en Java,
el problema se resuelve con las clases. Para reutilizar el código
creamos nuevas clases pero, en lugar de partir de cero, partimos de
clases, relacionadas con nuestra clase, que han sido ya creadas y
depuradas. El truco está en usar las clases sin ensuciar el código
existente.
Una forma de hacer esto es crear objetos de nuestras clases existentes dentro de la nueva clase. Esto se conoce como composición porque la nueva clase está compuesta de objetos de clases existentes. Estamos reutilizando la funcionalidad del código, y no la forma.
Otra forma es crear una nueva clase como un tipo de una clase ya existente. Tomamos la forma de la clase existente y añadimos código a la nueva, sin modificar la clase existente. Esta forma de crear nuevos objetos se llamada herencia, y lo que hacemos es extender la clase en la que nos basamos para crear la nueva.
Una forma de hacer esto es crear objetos de nuestras clases existentes dentro de la nueva clase. Esto se conoce como composición porque la nueva clase está compuesta de objetos de clases existentes. Estamos reutilizando la funcionalidad del código, y no la forma.
Otra forma es crear una nueva clase como un tipo de una clase ya existente. Tomamos la forma de la clase existente y añadimos código a la nueva, sin modificar la clase existente. Esta forma de crear nuevos objetos se llamada herencia, y lo que hacemos es extender la clase en la que nos basamos para crear la nueva.
Composición
Hasta ahora hemos usado la composición de cierta manera, ej. cuando hacemos una interfaz gráfica de usuario, nuestra clase de interfaz gráfica esta compuesta por un frame, unos panel, botones, etc. todos estos objetos componen el objeto de interfaz gráfica. Es decir que la composición consiste en poner manejadores de objetos dentro de nuestra clase, estos manejadores de objetos no serán otra cosa que instancias de las clases en las que nos estamos basando para crear la nueva clase.
Recordemos
que la forma para determinar cuándo usar composición es cuando podemos
decir que nuestra nueva clase “tiene un” elemento de otro tipo de
objetos, por ejemplo un cronómetro tiene: horas, minutos y segundos, es
decir que una clase Cronometro está compuesta por otras clases llamadas:
Horas, Minutos y Segundos.
Herencia
En java aunque no establezcamos de manera explícita la herencia siempre está presente, ya que todas las clases que creemos heredan de la clase Object, por eso es válido decir que en java todo es un objeto. La sintaxis para la composición es obvia pero, para realizar la herencia, hay una forma claramente distinta. Cuando heredamos, estamos diciendo "Esta nueva clase es como esa clase antigua", por ejemplo es decir que la clase Horas “es una” UnidadDeTiempo. Afirmamos esto en el código dando el nombre de la clase como siempre pero, antes de la apertura del límite cuerpo de clase, pondremos la palabra clave "extends" seguida por el nombre de la clase base. Cuando hagamos esto, obtendremos automáticamente todos los datos miembros y métodos de la clase base.
La composición y la herencia
Tanto
la composición como la herencia permiten poner sub-objetos dentro de tu
nueva clase. Podríamos preguntarnos cuál es la diferencia entre los
dos, y cuándo elegir uno en lugar del otro. La composición es
generalmente usada cuando deseamos las características de una clase
existente dentro de una nueva clase, pero no su interfaz. Es decir,
ponemos un para poder usarlo para implementar características de nuestra
nueva clase, pero el usuario de esa nueva clase verá el interfaz que
hemos definido en lugar del interfaz del objeto insertado.
Los objetos miembros usan la implementación ocultándose a sí mismos, por lo que esto es una cosa segura a hacer y, cuando el usuario sabe que estamos uniendo un conjunto de partes, hace que el interfaz sea más fácil de entender.
Los objetos miembros usan la implementación ocultándose a sí mismos, por lo que esto es una cosa segura a hacer y, cuando el usuario sabe que estamos uniendo un conjunto de partes, hace que el interfaz sea más fácil de entender.
Cuando
heredamos, estamos cogiendo una clase existente y creando una versión
especial de esa clase. En general, esto significa que estamos tomando
una clase de propósito general, especializándola para un caso o
necesidad particular. Pensando un poco, podrá entender que no tendría
sentido construir un coche usando un objeto vehículo (un coche no
contiene un vehículo, ¡es un vehículo!). La relación es- un viene
expresada por la herencia, y la relación tiene un viene expresada por la
composición.
No hay comentarios:
Publicar un comentario