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 425 — #463<br />
✐<br />
14.10. Upcasting<br />
ciones miembros (y redefini<strong>en</strong>do las funciones exist<strong>en</strong>tes durante la her<strong>en</strong>cia) puede<br />
dejar el código exist<strong>en</strong>te - por otro que todavía se esta usando - que algui<strong>en</strong> todavía<br />
lo este utilizando. Si ocurre algún error, ahora sabe donde esta el nuevo código, y<br />
<strong>en</strong>tonces podrá leerlo mas rápido y fácilm<strong>en</strong>te que si lo hubiera modificado <strong>en</strong> el<br />
cuerpo del código exist<strong>en</strong>te.<br />
Es sorpr<strong>en</strong>d<strong>en</strong>te como las clases son limpiam<strong>en</strong>te separadas. Incluso no es necesario<br />
añadir el código fu<strong>en</strong>te con funciones miembros para reutilizar el código,<br />
solam<strong>en</strong>te el fichero de cabecera describi<strong>en</strong>do la clase y el fichero objeto o el fichero<br />
de librería con las funciones miembros compiladas. (Esto es válido tanto para la<br />
her<strong>en</strong>cia como para la composición.)<br />
Esto es importante para hacer que el desarrollo sea un proceso increm<strong>en</strong>tal, como<br />
el apr<strong>en</strong>dizaje de una persona. Puede hacer tantos análisis como desee pero todavía<br />
no sabrá todas las respuestas cuando configure un proyecto. T<strong>en</strong>drá más éxito y un<br />
progresión inmediata - si su proyecto empieza a crecer como una criatura orgánica,<br />
evolutiva, parecerá mas bi<strong>en</strong> que esa construy<strong>en</strong>do algo como un rascacielos de<br />
cristal [52]<br />
Sin embargo la her<strong>en</strong>cia es una técnica útil para la experim<strong>en</strong>tación, <strong>en</strong> algún<br />
punto donde las cosas están estabilizadas, necesita echar un nuevo vistazo a la jerarquía<br />
de clases para colapsarla d<strong>en</strong>tro de una estructura s<strong>en</strong>sible [53]. Recuerde que,<br />
por <strong>en</strong>cima de todo, la her<strong>en</strong>cia significa expresar una relación que dice "Esta nueva<br />
clase es un tipo de esta vieja". Su programa no debe preocuparse de cómo mueve<br />
pedazos de bits por alrededor, <strong>en</strong> vez debe crear y manipular objetos de varios tipos<br />
para expresar un modelo <strong>en</strong> los términos dados para su problema.<br />
14.10. Upcasting<br />
Anteriorm<strong>en</strong>te <strong>en</strong> este capitulo, observo como un objeto de una clase que derivaba<br />
de ifstream t<strong>en</strong>ia todas las características y conductas de un objeto ifstream. En<br />
FName2.cpp, cualquier función miembro de ifstream podría ser llamada por cualquier<br />
objeto FName2.<br />
El aspecto más importante de la her<strong>en</strong>cia no es proporcionar nuevas funciones<br />
miembro a la nueva clase. Es la relación expresada <strong>en</strong>tre la nueva clase y la clase<br />
base. Esta relación puede ser resumida dici<strong>en</strong>do "La nueva clase es de un tipo de<br />
una clase exist<strong>en</strong>te".<br />
Esta no es una descripción fantasiosa de explicar la her<strong>en</strong>cia - esta directam<strong>en</strong>te<br />
soportada por el compilador. Un ejemplo, considere una clase base llamada Instrum<strong>en</strong>t<br />
que repres<strong>en</strong>ta instrum<strong>en</strong>tos musicales y una clase derivada llamada Wind.<br />
Dado que la her<strong>en</strong>cia significa que todas las funciones <strong>en</strong> la clase base están también<br />
disponibles <strong>en</strong> la clase derivada, cualquier m<strong>en</strong>saje que <strong>en</strong>vié a la clase base puede<br />
ser también <strong>en</strong>viado desde la derivada. Entonces si la clase Instrum<strong>en</strong>t ti<strong>en</strong>e una<br />
función miembro play(), también existirá <strong>en</strong> los instrum<strong>en</strong>tos de Wind. Esto significa<br />
precisam<strong>en</strong>te que un objeto Wind es un tipo de Instrum<strong>en</strong>t. El sigui<strong>en</strong>te ejemplo<br />
muestra como el compilador soporta esta idea:<br />
//: C14:Instrum<strong>en</strong>t.cpp<br />
// Inheritance & upcasting<br />
<strong>en</strong>um note { middleC, Csharp, Cflat }; // Etc.<br />
class Instrum<strong>en</strong>t {<br />
public:<br />
void play(note) const {}<br />
425<br />
✐<br />
✐<br />
✐<br />
✐