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