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 483 — #521<br />
✐<br />
16.2. Un vistazo a las plantillas<br />
Figura 16.1: Cont<strong>en</strong>edores<br />
Debido a que <strong>C++</strong> suporta múltiples jerarquías indep<strong>en</strong>di<strong>en</strong>tes, la jerarquía basada<br />
<strong>en</strong> objetos de Smalltalk no funciona tan bi<strong>en</strong>.<br />
La solución parace obvia. Si se pued<strong>en</strong> t<strong>en</strong>er múltiples jerarquías de her<strong>en</strong>cia,<br />
<strong>en</strong>tonces hay que ser capaces de heredar de más de una clase: La her<strong>en</strong>cia múltiple<br />
resuelve el problema. Por lo que se puede hacer lo sigui<strong>en</strong>te (un ejemplo similar se<br />
dió al final del Capítulo 15).<br />
Figura 16.2: Her<strong>en</strong>cia múltiple<br />
Ahora OShape ti<strong>en</strong>e las características y el comportami<strong>en</strong>to de Shape, pero como<br />
también está derivado de Object puede ser insertado <strong>en</strong> el cont<strong>en</strong>edor. La her<strong>en</strong>cia<br />
extra dada a OCircle, OSquare, etc. es necesaria para que esas clases puedan hacer<br />
upcast hacia OShape y puedan mant<strong>en</strong>er el comportami<strong>en</strong>to correcto. Se puede ver<br />
como las cosas se están volvi<strong>en</strong>do confusas rápidam<strong>en</strong>te.<br />
Los v<strong>en</strong>dedores de compiladores inv<strong>en</strong>taron e incluyeron sus propias jerarquías y<br />
clases cont<strong>en</strong>edoras, muchas de las cuales han sido reemplazadas desde <strong>en</strong>tonces por<br />
versiones de templates. Se puede argum<strong>en</strong>tar que la her<strong>en</strong>cia múltiple es necesaria<br />
para resolver problemas de programación g<strong>en</strong>eral, pero como se verá <strong>en</strong> el Volum<strong>en</strong><br />
2 de este libro es mejor evitar esta complejidad excepto <strong>en</strong> casos especiales.<br />
16.2.1. La solución de la plantilla<br />
Aunque una jerarquía basada <strong>en</strong> objetos con her<strong>en</strong>cia múltiple es conceptualm<strong>en</strong>te<br />
correcta, se vuelve difícil de usar. En su libro 3 , Stroustrup demostró lo que el<br />
consideraba una alternativa preferible a la jerarquía basada <strong>en</strong> objetos. Clases cont<strong>en</strong>edoras<br />
que fueran creadas como grandes macros del preprocesador con argum<strong>en</strong>tos<br />
que pudieran ser sustituidos con el tipo deseado. Cuando se quiera crear un<br />
3 The <strong>C++</strong> Programming Language by Bjarne Stroustrup (1ª edición, Addison-Wesley, 1986)<br />
483<br />
✐<br />
✐<br />
✐<br />
✐