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

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

Saved successfully!

Ooh no, something went wrong!