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 5 — #43<br />
✐<br />
1.3. La implem<strong>en</strong>tación oculta<br />
función. Este proceso normalm<strong>en</strong>te se resume dici<strong>en</strong>do que ha «<strong>en</strong>viado un m<strong>en</strong>saje»<br />
(ha hecho una petición) a un objeto, y el objeto sabe qué hacer con este m<strong>en</strong>saje<br />
(ejecuta código).<br />
Aquí, el nombre del tipo/clase es Luz, el nombre de este objeto particular de L-<br />
uz es luz1, y las peticiones que se le pued<strong>en</strong> hacer a un objeto Luz son <strong>en</strong>c<strong>en</strong>der,<br />
apagar, int<strong>en</strong>sificar o at<strong>en</strong>uar. Puede crear un objeto Luz declarando un nombre (luz1)<br />
para ese objeto. Para <strong>en</strong>viar un m<strong>en</strong>saje al objeto, escriba el nombre del objeto<br />
y conéctelo al m<strong>en</strong>saje de petición con un punto. Desde el punto de vista del usuario<br />
de una clase predefinida, eso es prácticam<strong>en</strong>te todo lo que necesita para programar<br />
con objetos.<br />
El diagrama mostrado arriba sigue el formato del L<strong>en</strong>guaje Unificado de Modelado<br />
(UML). Cada clase se repres<strong>en</strong>ta con una caja, con el nombre del tipo <strong>en</strong> la parte<br />
de arriba, los atributos que necesite describir <strong>en</strong> la parte c<strong>en</strong>tral de la caja, y los métodos<br />
(las funciones que pert<strong>en</strong>ec<strong>en</strong> a este objeto, que recib<strong>en</strong> cualquier m<strong>en</strong>saje que se<br />
<strong>en</strong>víe al objeto) <strong>en</strong> la parte inferior de la caja. A m<strong>en</strong>udo, <strong>en</strong> los diagramas de diseño<br />
UML sólo se muestra el nombre de la clase y el nombre de los métodos públicos,<br />
y por eso la parte c<strong>en</strong>tral no se muestra. Si sólo está interesado <strong>en</strong> el nombre de la<br />
clase, tampoco es necesario mostrar la parte inferior.<br />
1.3. La implem<strong>en</strong>tación oculta<br />
Es útil distinguir <strong>en</strong>tre los creadores de clases (aquellos que crean nuevos tipos de<br />
datos) y los programadores cli<strong>en</strong>tes 4 (los consumidores de clases que usan los tipos de<br />
datos <strong>en</strong> sus aplicaciones). El objetivo del programador cli<strong>en</strong>te es acumular una caja<br />
de herrami<strong>en</strong>tas ll<strong>en</strong>a de clases que poder usar para un desarrollo rápido de aplicaciones.<br />
El objetivo del creador de clases es construir una clase que exponga sólo lo<br />
necesario para el programador cli<strong>en</strong>te y mant<strong>en</strong>ga todo lo demás oculto. ¿Por qué<br />
Porque si está oculto, el programador cli<strong>en</strong>te no puede usarlo, lo cual significa que<br />
el creador de clases puede cambiar la parte oculta sin preocuparse de las consecu<strong>en</strong>cias<br />
sobre lo demás. La parte oculta suele repres<strong>en</strong>tar las interioridades delicadas de<br />
un objeto que podría fácilm<strong>en</strong>te corromperse por un programador cli<strong>en</strong>te descuidado<br />
o desinformado, así que ocultando la implem<strong>en</strong>tación se reduc<strong>en</strong> los errores de<br />
programación. No se debe abusar del concepto de implem<strong>en</strong>tación oculta.<br />
En cualquier relación es importante poner límites que sean respetados por todas<br />
las partes involucradas. Cuando se crea una librería, se establece una relación con el<br />
programador cli<strong>en</strong>te, qui<strong>en</strong> también es programador, porque puede estar utilizando<br />
la librería para crear a su vez una librería mayor.<br />
Si todos los miembros de una clase están disponibles para cualquiera, <strong>en</strong>tonces<br />
el programador cli<strong>en</strong>te puede hacer cualquier cosa con la clase y no hay forma de<br />
imponer las reglas. Incluso si quisiera que el programador cli<strong>en</strong>te no manipulase directam<strong>en</strong>te<br />
algunos de los miembros de su clase, sin control de acceso no hay forma<br />
de impedirlo. Nadie está a salvo.<br />
Por eso la principal razón del control de acceso es impedir que el cli<strong>en</strong>te toque<br />
las partes que no debería (partes que son necesarias para los mecanismos internos<br />
de los tipos de datos), pero no la parte de la interfaz que los usuarios necesitan para<br />
resolver sus problemas particulares. En realidad, ésto es un servicio para los usuarios<br />
porque pued<strong>en</strong> ver fácilm<strong>en</strong>te lo qué es importante para ellos y qué pued<strong>en</strong> ignorar.<br />
La segunda razón para el control de acceso es permitir al diseñador de la libre-<br />
4 Agradezco este término a mi amigo Scott Meyers.<br />
5<br />
✐<br />
✐<br />
✐<br />
✐