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

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

Saved successfully!

Ooh no, something went wrong!