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 9 — #47<br />

✐<br />

1.5. Her<strong>en</strong>cia: reutilización de interfaces<br />

d<strong>en</strong> <strong>en</strong>viar, eso significa que la clase derivada es del mismo tipo que la clase base. En el<br />

ejemplo anterior, «un círculo es una figura». Esta equival<strong>en</strong>cia de tipos vía her<strong>en</strong>cia<br />

es uno de las claves fundam<strong>en</strong>tales para compr<strong>en</strong>der la programación ori<strong>en</strong>tada a<br />

objetos.<br />

Por lo que tanto la clase base como la derivada ti<strong>en</strong><strong>en</strong> la misma interfaz, debe<br />

haber alguna implem<strong>en</strong>tación que corresponda a esa interfaz. Es decir, debe haber<br />

código para ejecutar cuando un objeto recibe un m<strong>en</strong>saje particular. Si simplem<strong>en</strong>te<br />

hereda de una clase y no hace nada más, los métodos de la interfaz de la clase base<br />

están disponibles <strong>en</strong> la clase derivada. Esto significa que los objetos de la clase derivada<br />

no sólo ti<strong>en</strong><strong>en</strong> el mismo tipo, también ti<strong>en</strong><strong>en</strong> el mismo comportami<strong>en</strong>to, lo cual<br />

no es particularm<strong>en</strong>te interesante.<br />

Hay dos caminos para difer<strong>en</strong>ciar la nueva clase derivada de la clase base original.<br />

El primero es bastante s<strong>en</strong>cillo: simplem<strong>en</strong>te hay que añadir nuevas funciones a<br />

la clase derivada. Estas nuevas funciones no son parte de la interfaz de la clase base.<br />

Eso significa que la clase base simplem<strong>en</strong>te no hace todo lo que necesitamos, por lo<br />

que se añad<strong>en</strong> más funciones. Este uso simple y primitivo de la her<strong>en</strong>cia es, a veces,<br />

la solución perfecta a muchos problemas. Sin embargo, quizá debería p<strong>en</strong>sar <strong>en</strong><br />

la posibilidad de que su clase base puede necesitar también funciones adicionales.<br />

Este proceso de descubrimi<strong>en</strong>to e iteración de su diseño ocurre regularm<strong>en</strong>te <strong>en</strong> la<br />

programación ori<strong>en</strong>tada a objetos.<br />

dibujar( )<br />

borrar( )<br />

mover( )<br />

pedirColor( )<br />

fijarColor( )<br />

reflejoVertical( )<br />

reflejoHorizontal( )<br />

Figura 1.5: Especialización de Figura<br />

Aunque la her<strong>en</strong>cia algunas veces supone que se van a añadir nuevas funciones<br />

a la interfaz, no es necesariam<strong>en</strong>te cierto. El segundo y más importante camino para<br />

difer<strong>en</strong>ciar su nueva clase es cambiar el comportami<strong>en</strong>to respecto de una función de<br />

una clase base exist<strong>en</strong>te. A esto se le llama reescribir (override) una función.<br />

9<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!