13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

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 />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!