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

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

Saved successfully!

Ooh no, something went wrong!