Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 10 — #48<br />
✐<br />
Capítulo 1. Introducción a los Objetos<br />
dibujar( )<br />
borrar( )<br />
mover( )<br />
pedirColor( )<br />
fijarColor( )<br />
dibujar( )<br />
borrar( )<br />
dibujar( )<br />
borrar( )<br />
dibujar( )<br />
borrar( )<br />
Figura 1.6: Reescritura de métodos<br />
Para reescribir una función, simplem<strong>en</strong>te hay que crear una nueva definición para<br />
esa función <strong>en</strong> la clase derivada. Está dici<strong>en</strong>do, «Estoy usando la misma función<br />
de interfaz aquí, pero quiero hacer algo difer<strong>en</strong>te para mi nuevo tipo».<br />
1.5.1. Relaciones es-un vs. es-como-un<br />
Hay cierta controversia que puede ocurrir con la her<strong>en</strong>cia: ¿la her<strong>en</strong>cia debería<br />
limitarse a anular sólo funciones de la clase base (y no añadir nuevos métodos que<br />
no estén <strong>en</strong> la clase base) Esto puede significar que el tipo derivado es exactam<strong>en</strong>te<br />
el mismo tipo que la clase base dado que ti<strong>en</strong>e exactam<strong>en</strong>te la misma interfaz. Como<br />
resultado, se puede sustituir un objeto de una clase derivada por un objeto de la<br />
clase base. Se puede p<strong>en</strong>sar como una sustitución pura, y se suele llamar principio de<br />
sustitución. En cierto modo, esta es la forma ideal de tratar la her<strong>en</strong>cia. A m<strong>en</strong>udo<br />
nos referimos a las relaciones <strong>en</strong>tre la clase base y clases derivadas <strong>en</strong> este caso como<br />
una relación es-un, porque se dice «un círculo es una figura». Un modo de probar la<br />
her<strong>en</strong>cia es determinar si se puede considerar la relación es-un sobre las clases y si<br />
ti<strong>en</strong>e s<strong>en</strong>tido.<br />
Hay ocasiones <strong>en</strong> las que se deb<strong>en</strong> añadir nuevos elem<strong>en</strong>tos a la interfaz de un<br />
tipo derivado, de esta manera se amplía la interfaz y se crea un tipo nuevo. El nuevo<br />
tipo todavía puede ser sustituido por el tipo base, pero la sustitución no es perfecta<br />
porque sus nuevas funciones no son accesibles desde el tipo base. Esta relación se<br />
conoce como es-como-un; el nuevo tipo ti<strong>en</strong>e la interfaz del viejo tipo, pero también<br />
conti<strong>en</strong>e otras funciones, por lo que se puede decir que es exactam<strong>en</strong>te el mismo.<br />
Por ejemplo, considere un aire acondicionado. Suponga que su casa está conectada<br />
con todos los controles para refrigerar; es decir, ti<strong>en</strong>e una interfaz que le permite<br />
controlar la temperatura. Imagine que el aire acondicionado se avería y lo reemplaza<br />
por una bomba de calor, la cual puede dar calor y frío. La bomba de calor es-como-un<br />
aire acondicionado, pero puede hacer más cosas. Como el sistema de control de su<br />
casa está diseñado sólo para controlar el frío, está r<strong>en</strong>tringida a comunicarse sólo con<br />
10<br />
✐<br />
✐<br />
✐<br />
✐