ENCAPSULAMIENTO Y OCULTACIÓN DE LA INFORMACIÓN Por: Alberto Restrepo V. Hernán Dario Toro E. Una clase tiene dos vistas: la exterior, en donde se hace énfasis la abstracción y se oculta la estructura y secretos de comportamiento; y la vista interior o implementación, y es aquí donde es indispensable hacer uso del concepto de encapsulado. Una instancia de una clase, almacena sus datos dentro de él. Se tiene acceso a los datos y se les modifica sólo mediante operaciones permisibles. Esta restricción al acceso se debe al encapsulado. El encapsulado protege los datos del uso arbitrario o no permitido. El acceso o la actualización directa de los datos de un objeto por parte del usuario violaría el encapsulado. Al encapsular u ocultar información se separan los aspectos externos de un objeto (los accesibles para todos) de los detalles de implementación (los accesibles para nadie). Con esto se trata de lograr que al tener algún cambio en la implementación de un objeto no se tengan que modificar los programas que utilizan tal objeto. Volviendo con el ejemplo del automóvil, se sabe que existen diversos mecanismos para su funcionamiento. En particular se tiene el sistema de frenado que todo mundo sabe que sirve para detener el auto al pisar el pedal apropiado, pero sólo un mecánico sabe los detalles de implementación. Por otro lado, si en algún momento se cambia el tipo de frenos, para el conductor es transparente. El encapsulado consiste pues en ocultar los detalles de implementación de un objeto, pero a la vez se provee una interfaz pública por medio de sus operaciones permitidas. Considerando lo anterior también se define el encapsulado como la propiedad de los objetos de permitir el acceso a su estado únicamente a través de su interfaz o de relaciones preestablecidas con otros objetos. El encapsulado evita la corrupción de los datos de un objeto. Si todos los programas pudieran tener acceso a los datos de cualquier forma que quisieran los usuarios, los datos se podrían corromper o utilizar de mala manera. El encapsulado protege los datos del uso arbitrario y no pretendido. En el mundo OO lo que realmente importa es el comportamiento de los objetos, no cómo está implementado ese comportamiento. Así, si la implementación de un objeto cambia, pero su interfaz se mantiene igual, es decir, la forma como ese objeto se relaciona con el mundo exterior, los objetos que interactúan con él, no serán afectados por esos cambios. Además, el encapsulado oculta la complejidad de la implementación. Esta propiedad de los objetos se vive en el mundo real en muchas situaciones con las cajas negras. Tal es el caso de la labor de conducir un automóvil: no es necesario que el conductor sepa de mecánica automotriz, sólo tiene que saber cómo interactuar con el vehículo. Concluyendo, internamente un objeto tiene algunas partes o componentes de las que no necesariamente se conocen su construcción y de las cuales sólo se sabe de su existencia por la reacción o respuesta que produce cuando otro objeto les emite mensaje. Es decir, se conoce el qué pero no el cómo. Considerando el objeto vehículo, se conoce la reacción que este produce cuando se le pisa su acelerador (aumenta su velocidad) mas no se tiene que conocer el porqué de esta reacción. Los tipos de datos abstractos es el modo de realizar el encapsulamiento en programación procedimental. Recuérdese que cuando se trabaja con los tipos de datos abstractos, se trabaja a un nivel muy por encima de un lenguaje de programación, y por tanto, no interesan para la elaboración de algoritmos abstractos los detalles de implementación. Un tipo de datos abstracto encapsula y oculta parte de la implementación del un módulo. La interfaz suministra las operaciones que se deben hacer con los datos ocultos. En un sistema orientado a objetos, los objetos son las unidades de encapsulamiento. El objeto encapsula su estado (datos) y su comportamiento (operaciones). Las operaciones son el medio para manipular el estado. Dentro de la comunidad dedicada al estudio de la tecnología de objetos, no hay todavía un acuerdo con respecto al grado de encapsulamiento. Surge una pregunta bastante interesante: ¿ Únicamente se deberían suministrar operaciones como interfaz o también deberían ser accesibles los atributos desde el exterior de un objeto? Si solamente se pueden utilizar operaciones para leer o escribir el estado de los objetos, se estaría hablando de encapsulamiento fuerte. Si los datos y los métodos pueden ser privados y públicos, se habla de encapsulamiento externo. Fuente: http://dis.eafit.edu.co/cursos/st-051/encapsulamiento.html