Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 185 — #223<br />
✐<br />
5.7. Resum<strong>en</strong><br />
La única cosa a la que el programador cli<strong>en</strong>te puede acceder es a la interfaz publica,<br />
así que mi<strong>en</strong>tras la implem<strong>en</strong>tación sea lo único que cambie, el fichero anterior<br />
no necesita recompilarse. Así, aunque esto no es ocultación de implem<strong>en</strong>tación perfecta,<br />
es una gran mejora.<br />
5.7. Resum<strong>en</strong><br />
El control de acceso <strong>en</strong> <strong>C++</strong> ofrece un gran control al creador de la clase. Los<br />
usuarios de la clase pued<strong>en</strong> ver claram<strong>en</strong>te lo que pued<strong>en</strong> usar y qué puede ignorar.<br />
Más importante aún es la posibilidad de asegurar que ningún programador cli<strong>en</strong>te<br />
dep<strong>en</strong>de de ninguna parte de la implem<strong>en</strong>tación interna de la clase. Si sabe esto<br />
como creador de la clase, puede cambiar la implem<strong>en</strong>tación subyac<strong>en</strong>te con la seguridad<br />
de que ningún programador cli<strong>en</strong>te se verá afectado por los cambios, pues no<br />
pued<strong>en</strong> acceder a esa parte de la clase.<br />
Cuando t<strong>en</strong>ga la posibilidad de cambiar la implem<strong>en</strong>tación subyac<strong>en</strong>te, no solo<br />
podrá mejorar su diseño más tarde, también ti<strong>en</strong>e la libertad de cometer errores.<br />
No importa con qué cuidado planee su diseño, cometerá errores. Sabi<strong>en</strong>do que es<br />
relativam<strong>en</strong>te seguro que cometerá esos errores, experim<strong>en</strong>tará más, apr<strong>en</strong>derá más<br />
rápido, y acabará su proyecto antes.<br />
La interfaz pública de una clase es lo que realm<strong>en</strong>te ve el programador cli<strong>en</strong>te, así<br />
que es la parte de la clase más importante durante el análisis y diseño. Pero incluso<br />
esto le deja algo de libertad para el cambio. Si no consigue la interfaz correcta a la primera,<br />
puede añadir más funciones, mi<strong>en</strong>tras no quite ninguna que el programador<br />
cli<strong>en</strong>te ya haya usado <strong>en</strong> su código.<br />
5.8. Ejercicios<br />
Las soluciones a los ejercicios se pued<strong>en</strong> <strong>en</strong>contrar <strong>en</strong> el docum<strong>en</strong>to electrónico<br />
titulado «The Thinking in <strong>C++</strong> Annotated Solution Guide», disponible por poco<br />
dinero <strong>en</strong> www.BruceEckel.com.<br />
1. Cree una clase con atributos y métodos public, private y protected. Cree<br />
un objeto de esta clase y vea qué m<strong>en</strong>sajes de compilación obti<strong>en</strong>e cuando int<strong>en</strong>ta<br />
acceder a los difer<strong>en</strong>tes miembros de la clase.<br />
2. Escriba una estructura llamada Lib que cont<strong>en</strong>ga tres objetos string a, b<br />
y c. En main() cree un objeto Lib llamado x y asígnelo a x.a, x.b y x.c.<br />
Imprima por pantalla sus valores. Ahora reemplace a, b y c con un array de<br />
cad<strong>en</strong>as s[3]. Dese cu<strong>en</strong>ta de que su función main() deja de funcionar como<br />
resultado del cambio. Ahora cree una clase, llámela Libc con tres cad<strong>en</strong>as<br />
como datos miembro privados a, b y c, y métodos seta(), geta(), setb(-<br />
), getb(), setc() y getc() para establecer y recuperar los distintos valores.<br />
Escriba una función main() como antes. Ahora cambie las cad<strong>en</strong>as privadas<br />
a, b y c por un array de cad<strong>en</strong>as privado s[3]. Vea que ahora main() sigue<br />
funcionando.<br />
3. Cree una clase y una función fri<strong>en</strong>d global que manipule los datos privados<br />
de la clase.<br />
185<br />
✐<br />
✐<br />
✐<br />
✐