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 418 — #456<br />
✐<br />
Capítulo 14. Her<strong>en</strong>cia y Composición<br />
implem<strong>en</strong>tar características <strong>en</strong> su clase, pero el usuario de su clase ve el interfaz que<br />
se ha definido, <strong>en</strong> vez del interfaz de la clase original. Para hacer esto, se sigue el<br />
típico patrón de alojar objetos privados de clases exist<strong>en</strong>tes <strong>en</strong> su nueva clase.<br />
En ocasiones, sin embargo, ti<strong>en</strong>e s<strong>en</strong>tido permitir que el usuario de la clase acceda<br />
a la composición de su clase, esto es, hacer públicos los miembros objeto. Los<br />
miembros objeto usan su control de accesos, <strong>en</strong>tonces es seguro y cuando el usuario<br />
conoce que esta formando un conjunto de piezas, hace que la interfaz sea más fácil<br />
de <strong>en</strong>t<strong>en</strong>der. Un bu<strong>en</strong> ejemplo es la clase Car:<br />
//: C14:Car.cpp<br />
// Public composition<br />
class Engine {<br />
public:<br />
void start() const {}<br />
void rev() const {}<br />
void stop() const {}<br />
};<br />
class Wheel {<br />
public:<br />
void inflate(int psi) const {}<br />
};<br />
class Window {<br />
public:<br />
void rollup() const {}<br />
void rolldown() const {}<br />
};<br />
class Door {<br />
public:<br />
Window window;<br />
void op<strong>en</strong>() const {}<br />
void close() const {}<br />
};<br />
class Car {<br />
public:<br />
Engine <strong>en</strong>gine;<br />
Wheel wheel[4];<br />
Door left, right; // 2-door<br />
};<br />
int main() {<br />
Car car;<br />
car.left.window.rollup();<br />
car.wheel[0].inflate(72);<br />
} ///:~<br />
Como la composición de Car es parte del análisis del problema (y no una simple<br />
capa del diseño), hace públicos los miembros y ayudan al programador a <strong>en</strong>t<strong>en</strong>der<br />
como se utiliza la clase y requiere m<strong>en</strong>os complejidad de código para el creador de<br />
la clase.<br />
Si pi<strong>en</strong>sa un poco, observará que no ti<strong>en</strong>e s<strong>en</strong>tido componer un Car usando un<br />
418<br />
✐<br />
✐<br />
✐<br />
✐