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 171 — #209<br />
✐<br />
5: Ocultar la implem<strong>en</strong>tación<br />
Una librería C típica conti<strong>en</strong>e una estructura y una serie de funciones<br />
que actúan sobre esa estructura. Hasta ahora hemos visto cómo<br />
<strong>C++</strong> toma funciones conceptualm<strong>en</strong>te asociadas y las asocia literalm<strong>en</strong>te<br />
poni<strong>en</strong>do la declaración de la función d<strong>en</strong>tro del dominio de la estructura,<br />
cambiando la forma <strong>en</strong> que se invoca a las funciones desde las estructuras,<br />
eliminando el paso de la dirección de la estructura como primer parámetro, y añadi<strong>en</strong>do<br />
un nuevo tipo al programa (de ese modo no es necesario crear un typedef<br />
para la estructura).<br />
Todo esto son mejoras, le ayuda a organizar su código haciéndolo más fácil de<br />
escribir y leer. Sin embargo, hay otros aspectos importantes a la hora de hacer que<br />
las librerías sean más s<strong>en</strong>cillas <strong>en</strong> <strong>C++</strong>, especialm<strong>en</strong>te los aspectos de seguridad y<br />
control. Este capítulo se c<strong>en</strong>tra <strong>en</strong> el tema de la frontera de las estructuras.<br />
5.1. Establecer los límites<br />
En toda relación es importante t<strong>en</strong>er fronteras que todas las partes respet<strong>en</strong>.<br />
Cuando crea una librería, establece una relación con el programador cli<strong>en</strong>te que la usa<br />
para crear un programa u otra librería.<br />
En una estructura de C, como casi todo <strong>en</strong> C, no hay reglas. Los programadores<br />
cli<strong>en</strong>te pued<strong>en</strong> hacer lo que quieran con esa estructura, y no hay forma de forzar<br />
un comportami<strong>en</strong>to particular. Por ejemplo, aunque vio <strong>en</strong> el capítulo anterior la<br />
importancia de las funciones llamadas initialize() y cleanup(), el programador<br />
cli<strong>en</strong>te ti<strong>en</strong>e la opción de no llamarlas. (Veremos una forma mejor de hacerlo <strong>en</strong><br />
el capítulo sigui<strong>en</strong>te.) Incluso si realm<strong>en</strong>te prefiere que el programador cli<strong>en</strong>te no<br />
manipule directam<strong>en</strong>te algunos miembros de su estructura, <strong>en</strong> C no hay forma de<br />
evitarlo. Todo está expuesto al todo el mundo.<br />
Hay dos razones para controlar el acceso a los miembros. La primera es no dejar<br />
que el programador cli<strong>en</strong>te ponga las manos sobre herrami<strong>en</strong>tas que no debería<br />
tocar, herrami<strong>en</strong>tas que son necesarias para los <strong>en</strong>tresijos del tipo definido, pero no<br />
parte del interfaz que el programador cli<strong>en</strong>te necesita para resolver sus problemas<br />
particulares. Esto es realm<strong>en</strong>te una v<strong>en</strong>taja para los programadores cli<strong>en</strong>te porque<br />
así pued<strong>en</strong> ver lo que es realm<strong>en</strong>te importante para ellos e ignorar el resto.<br />
La segunda razón para el control de acceso es permitir al diseñador de la librería<br />
cambiar su funcionami<strong>en</strong>to interno sin preocuparse de como afectara al programador<br />
cli<strong>en</strong>te. En el ejemplo Stack del capítulo anterior, podría querer solicitar espacio<br />
de almac<strong>en</strong>ami<strong>en</strong>to <strong>en</strong> grandes trozos, para conseguir mayor velocidad, <strong>en</strong> vez de<br />
crear un nuevo espacio cada vez que un elem<strong>en</strong>to es añadido. Si la interfaz y la implem<strong>en</strong>tación<br />
están claram<strong>en</strong>te separadas y protegidas, puede hacerlo y forzar al<br />
171<br />
✐<br />
✐<br />
✐<br />
✐