El documento explica el concepto de encapsulamiento en Java. El encapsulamiento permite agrupar los datos y métodos de una clase para ocultar los detalles de implementación y promover la modularidad. En Java, se utilizan modificadores de acceso como private, protected y public para controlar la visibilidad de los campos y métodos de una clase.
1. Encapsulamiento en Java
Presentado por León Arenas Rivera
Ing Sistemas y Telecomunicaciones Universidad Católica de Pereira
Fundación centro de
investigación
Docencia y consultoría
Administrativa
Facultad Ntic’s e ingenierías
2. Encapsulamiento de Clases
Definición previa: un paquete es una colección de clases que se encuentran en el mismo directorio. Las clases permiten implementar tipos de datos abstractos. El problema que
se presenta es que desde cualquier clase se puede accesar los campos de un objeto perteneciente a otra clase. Esto es una violación al principio de abstracción que dice que un
tipo de datos abstracto sólo puede ser manipulado a través de las operaciones que se definen para éste.
Visibilidad de Campos y Métodos
En java al definir una clase se puede controlar la visibilidad que tendrán sus campos y métodos al exterior de la clase. Este control se efectúa de la siguiente forma:
class A
{
private int privx;
protected int protb;
public int pubc;
int paqd;
private void MetPriv() { ... }
protected void MetProt() { ... }
public void MetPub(A a)
{
// Un campo siempre es visible
// en la clase en donde se define
... privx ... a.privx ...
... protb ... a.protb ...
... pubc ... a.pubc ...
// Un método siempre es visible
// en la clase en donde se define
MetPriv(); a.MetPriv();
}
void MetPaq() { ... }
}
3. Las palabras private, protected y public son atributos de un campo o un método y su significado es el siguiente:
private: El campo o método sólo es visible dentro de la clase donde se define.
protected: El campo o método es visible en la clase en donde se define y en cualquiera de sus subclases.
public: El campo o método es visible en cualquier clase.
Ninguna de las anteriores: El campo o método es visible en cualquiera de las clases pertenecientes al paquete en donde se define.
Ejemplo:
class B
{
public void MetB()
{
A a= new A();
a.pubc= 1; // Ok
a.priva= 2; // error, privado
a.protb= 3; // error, B no es
// subclase de A
a.MetPub(); // Ok
a.MetPriv(); // error, privado
}
}
Visibilidad de Clases
Al declarar una clase se puede especificar que es pública usando el atributo public. De este modo la clase podrá ser usada por cualquier otra clase. Si la clase
no es pública entonces la clase sólo puede ser usada dentro del paquete que la contiene.
public class Box extends GraphObj
{ ... }
Podemos hacer un resumen de los atributos que pueden tener campos, métodos o clases:
Campo: {private | public | protected} {final} {static}
Método: {private | public | protected} {final | abstract} {static}
Clase: {public} {final | abstract}
Sólo se puede especificar uno de los atributos puestos en la misma llave.
El nombre de archivo
Un archivo puede contener a lo más una clase pública, en cuyo caso el nombre del archivo debe ser el mismo de la clase pública, más la extensión .java.
El resto de las clases del archivo sólo serán visibles dentro del paquete. Es usual que los archivos contengan una sola clase, pero también a veces se
agregan otras clases al archivo cuando éstas son usadas sólo dentro de ese mismo archivo.
4. Encapsulamiento
Como se puede observar de los diagramas, las variables del objeto se localizan en el centro o núcleo
del objeto. Los métodos rodean y esconden el núcleo del objeto de otros objetos en el programa. Al
empaquetamiento de las variables de un objeto con la protección de sus métodos se le llama
encapsulamiento. Típicamente, el encapsulamiento es utilizado para esconder detalles de la puesta
en práctica no importantes de otros objetos. Entonces, los detalles de la puesta en práctica pueden
cambiar en cualquier tiempo sin afectar otras partes del programa.
El encapsulamiento de variables y métodos en un componente de software ordenado es, todavía,
una simple idea poderosa que provee dos principales beneficios a los desarrolladores de software:
Modularidad: esto es, el código fuente de un objeto puede ser escrito, así como darle
mantenimiento, independientemente del código fuente de otros objetos. Así mismo, un objeto puede
ser transferido alrededor del sistema sin alterar su estado y conducta.
Ocultamiento de la información: es decir, un objeto tiene una "interfaz publica" que
otros objetos pueden utilizar para comunicarse con él. Pero el objeto puede mantener información y
métodos privados que pueden ser cambiados en cualquier tiempo sin afectar a los otros objetos que
dependan de ello. Los objetos proveen el beneficio de la modularidad y el ocultamiento de la
información. Las clases proveen el beneficio de la reutilización. Los programadores de software
utilizan la misma clase, y por lo tanto el mismo código, una y otra vez para crear muchos objetos. En
las implantaciones orientadas a objetos se percibe un objeto como un paquete de datos y
procedimientos que se pueden llevar a cabo con estos datos. Esto encapsula los datos y los
procedimientos. La realidad es diferente: los atributos se relacionan al objeto o instancia y los
métodos a la clase. ¿Por qué se hace así? Los atributos son variables comunes en cada objeto de
una clase y cada uno de ellos puede tener un valor asociado, para cada variable, diferente al que
tienen para esa misma variable los demás objetos. Los métodos, por su parte, pertenecen a la clase
y no se almacenan en cada objeto, puesto que sería un desperdicio almacenar el mismo
procedimiento varias veces y ello va contra el principio de reutilización de código.
5. Encapsulamiento
•El encapsulamiento es la propiedad que permite envolver atributos (datos) y métodos (comportamiento) en un unidad lógica, el
objeto
•Se encapsulan (envuelven) atributos y métodos de una clase
•El radio de un auto encapsula sus datos y el comportamiento que le permiten al conductor seleccionar una estación de radio,
reproducir CD’s, entre otras acciones.
•Los componentes del radio están encapsulados en su caja
•El encapsulamiento permite a los objetos ocultar su implementación de otros objetos, este principio se conoce como ocultamiento
de la información
•Aunque los objetos se pueden comunicar entre si a través de interfaces, no están conscientes de cómo se implementan otros
objetos
•Los detalles de implementación se ocultan dentro de los mismos objetos (buena ingeniería de software!!!)
•Cómo se logra encapsular atributos y métodos en Java?
•Utilizando modificadores de acceso