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

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

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

Saved successfully!

Ooh no, something went wrong!