Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 />
✐