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

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

Saved successfully!

Ooh no, something went wrong!