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 11 — #49<br />
✐<br />
1.6. Objetos intercambiables gracias al polimorfismo<br />
la parte de frío del nuevo objeto. La interfaz del nuevo objeto se ha ext<strong>en</strong>dido, y el<br />
sistema exist<strong>en</strong>te no conoce nada excepto la interfaz original.<br />
Tesmostato controla Sistema de frío<br />
temperaturaMínima( ) frío( )<br />
Aire Acondicionado<br />
frío( )<br />
Bomba de calor<br />
frío( )<br />
calor( )<br />
Figura 1.7: Relaciones<br />
Por supuesto, una vez que vea este diseño queda claro que la clase base «sistema<br />
de frío» no es bastante g<strong>en</strong>eral, y se debería r<strong>en</strong>ombrar a «sistema de control de temperatura»,<br />
además también puede incluir calor, <strong>en</strong> este punto se aplica el principio<br />
de sustitución. Sin embargo, el diagrama de arriba es un ejemplo de lo que puede<br />
ocurrir <strong>en</strong> el diseño y <strong>en</strong> el mundo real.<br />
Cuando se ve el principio de sustitución es fácil <strong>en</strong>t<strong>en</strong>der cómo este <strong>en</strong>foque (sustitución<br />
pura) es la única forma de hacer las cosas, y de hecho es bu<strong>en</strong>o para que sus<br />
diseños funcion<strong>en</strong> de esta forma. Pero verá que hay ocasiones <strong>en</strong> que está igualm<strong>en</strong>te<br />
claro que se deb<strong>en</strong> añadir nuevas funciones a la interfaz de la clase derivada. Con<br />
experi<strong>en</strong>cia, ambos casos puede ser razonablem<strong>en</strong>te obvios.<br />
1.6. Objetos intercambiables gracias al polimorfismo<br />
Cuando se manejan jerarquías de tipos, se suele tratar un objeto no como el tipo<br />
específico si no como su tipo base. Esto le permite escribir código que no dep<strong>en</strong>de<br />
de los tipos específicos. En el ejemplo de la figura, las funciones manipulan figuras<br />
g<strong>en</strong>éricas sin preocuparse de si son círculos, cuadrados, triángulos, etc. Todas las<br />
figuras se pued<strong>en</strong> dibujar, borrar y mover, pero estas funciones simplem<strong>en</strong>te <strong>en</strong>vían<br />
un m<strong>en</strong>saje a un objeto figura, sin preocuparse de cómo se las arregla el objeto con<br />
cada m<strong>en</strong>saje.<br />
Semejante código no está afectado por la adición de nuevos tipos, y añadir nuevos<br />
tipos es la forma más común de ext<strong>en</strong>der un programa ori<strong>en</strong>tado a objetos para<br />
tratar nuevas situaciones. Por ejemplo, puede derivar un nuevo subtipo de figura llamado<br />
p<strong>en</strong>tágono sin modificar las funciones que tratan sólo con figuras g<strong>en</strong>éricas.<br />
Esta habilidad para ext<strong>en</strong>der un programa fácilm<strong>en</strong>te derivando nuevos subtipos es<br />
importante porque mejora <strong>en</strong>ormem<strong>en</strong>te los diseños al mismo tiempo que reduce el<br />
coste del mant<strong>en</strong>imi<strong>en</strong>to del software.<br />
11<br />
✐<br />
✐<br />
✐<br />
✐