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 182 — #220<br />

✐<br />

Capítulo 5. Ocultar la implem<strong>en</strong>tación<br />

}* head;<br />

public:<br />

void initialize();<br />

void push(void* dat);<br />

void* peek();<br />

void* pop();<br />

void cleanup();<br />

};<br />

#<strong>en</strong>dif // STACK2_H ///:~<br />

Como antes, la implem<strong>en</strong>tación no cambia por lo que no la repetimos aquí. El<br />

programa de prueba es también idéntico. La única cosa que ha cambiado es la robustez<br />

del interfaz de la clase. El valor real del control de acceso es prev<strong>en</strong>irle de<br />

traspasar las fronteras durante el desarrollo. De hecho, el compilador es el único que<br />

conoce los niveles de protección de los miembros de la clase. No hay información<br />

sobre el control de acceso añadida <strong>en</strong> el nombre del miembro que llega al <strong>en</strong>lazador.<br />

Todas las comprobaciones sobre protección son hechas por el compilador; han<br />

desaparecido al llegar a la ejecución.<br />

Dese cu<strong>en</strong>ta de que la interfaz pres<strong>en</strong>tada al programador cli<strong>en</strong>te es ahora realm<strong>en</strong>te<br />

la de una pila. Sucede que esta implem<strong>en</strong>tada como una lista <strong>en</strong>lazada, pero<br />

usted puede cambiar esto sin afectar a la forma <strong>en</strong> que los programas cli<strong>en</strong>te interactúan<br />

con ella, o (más importante aun) sin afectar a una sola linea de su código.<br />

5.6. Manejo de clases<br />

El control de acceso <strong>en</strong> <strong>C++</strong> le permite separar la interfaz de la implem<strong>en</strong>tación,<br />

pero la ocultación de la implem<strong>en</strong>tación es solo parcial. El compilador debe ver aún<br />

la declaración de todas las partes del objeto para poder crearlo y manipularlo correctam<strong>en</strong>te.<br />

Podría imaginar un l<strong>en</strong>guaje de programación que requiriese solo la interfaz<br />

publica del objeto y permitiese que la implem<strong>en</strong>tación privada permaneciese<br />

oculta, pero <strong>C++</strong> realiza comparación de tipos estáticam<strong>en</strong>te (<strong>en</strong> tiempo de compilación)<br />

tanto como es posible. Esto significa que se dará cu<strong>en</strong>ta lo antes posible de si<br />

hay un error. También significa que su programa será más efici<strong>en</strong>te. De todas formas,<br />

la inclusión de la implem<strong>en</strong>tación privada ti<strong>en</strong>e dos efectos: la implem<strong>en</strong>tación es visible<br />

aunque no se pueda acceder a ella fácilm<strong>en</strong>te, y puede causar recompilaciones<br />

innecesarias.<br />

5.6.1. Ocultar la implem<strong>en</strong>tación<br />

Algunos proyectos no pued<strong>en</strong> permitirse t<strong>en</strong>er visible su implem<strong>en</strong>tación al publico.<br />

Puede dejar a la vista información estratégica <strong>en</strong> un fichero de cabecera de una<br />

librería que la compañía no quiere dejar disponible a los competidores. Puede estar<br />

trabajando <strong>en</strong> un sistema donde la seguridad sea clave - un algoritmo de <strong>en</strong>criptación,<br />

por ejemplo - y no quiere dejar ninguna pista <strong>en</strong> un archivo de cabecera que<br />

pueda ayudar a la g<strong>en</strong>te a romper el código. O puede que su librería se <strong>en</strong>cu<strong>en</strong>tre <strong>en</strong><br />

un ambi<strong>en</strong>te «hostil», donde el programador accederá a los compon<strong>en</strong>tes privados<br />

de todas formas, usando punteros y conversiones. En todas estas situaciones, es de<br />

gran valor t<strong>en</strong>er la estructura real compilada d<strong>en</strong>tro de un fichero de implem<strong>en</strong>tación<br />

mejor que a la vista <strong>en</strong> un archivo de cabecera.<br />

182<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!