Redefinir Comportamiento y Extender Clases

Es muy común que una clase que hereda de otra no se comporte exactamente igual, aun para el comportamiento heredado. Veamos un ejemplo real: entre las herramientas que provee el Framework .Net para crear aplicaciones basadas en ventanas, tenemos clases para crear componentes visuales, como botones y listas. Supongamos que debemos crear botones, pero que sean redondos, y no rectangulares como los botones normales. Si no tuviéramos la herencia, deberíamos crear una clase BotonRedondo y escribir absolutamente todo el código. Sin embargo, podemos hacer que nuestra clase herede de la clase Button de .Net y redefina un método llamado OnPaint (que es el encargado de dibujar el botón en la pantalla) para dibujarlo como necesitamos. Tendremos así un nuevo tipo de botón que se dibuja como queremos, pero que posee todo el comportamiento y las propiedades de cualquier otro botón (por ejemplo, reacciona ante un clic con el ratón).

Una clase puede redefinir un método heredado para personalizarlo según su propio comportamiento.

EXTENDER CLASES

La extensión es un mecanismo para agregar comportamiento y propiedades a una clase, es decir, a todas las características que se heredan de la clase padre, se le agregan otras propias de la clase derivada. Por ejemplo, si tenemos una clase Persona y de ella derivamos una clase Empleado, podemos aplicar extensión agregando las propiedades Jefe y Sueldo. Si miramos este ejemplo pensando en la relación es-un, podemos decir que un Empleado es-una persona que además posee un sueldo y un jefe, es decir, es una extensión.

La extensión es una de las aplicaciones más utilizadas y naturales de la herencia, ya que sienta las bases de un buen diseño que derive en código claro, mantenible y robusto.

La extensión se puede combinar con la redefinición, para reutilizar aun más el código heredado. Esto es, podemos redefinir un método de manera tal que se comporte exactamente igual al método heredado del padre, pero que además haga algo extra. Volviendo al ejemplo del Botón, imaginemos que queremos hacer un botón tal que, cuando el cursor del ratón pase por encima, cambie de color. Deberemos entonces definir una nueva clase, que herede de Button y redefinir el método OnPaint, pero en vez de escribirlo todo desde cero, llamamos al método de la clase padre para dibujar el botón, y luego, si el cursor está sobre el rectángulo que comprende el botón, le cambiamos el color. ¡Nos vemos en la próxima entrega!