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

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

Saved successfully!

Ooh no, something went wrong!