El encapsulamiento y la visibilidad en Java

En software hay dos aspectos muy importantes: el interface y la implementación.

En el interface, se nos indica cómo se va a acceder nuestro software y cómo será utilizado. En Java, el interface está compuesto por los elemento de una clase que van a ser visibles desde fuera de ésta.

Por otro lado tenemos la implementación, que se compone del código exacto que se ha utilizado en desarrollar los diferentes algoritmos. En Java se compone de atributos y de métodos.

El término encapsulamiento en Java, consiste en ocultar atributos de un objeto de manera que solo se pueda cambiar mediante operaciones definidas en ese objeto. Está estrechamente relacionado con la visibilidad. 

Para definir la visibilidad en Java, se dispone de palabras reservadas:

  • public: nos indica que es accesible desde cualquier clase [interface].
  • private: solo es accesible desde a clase actual.
  • protected: accesible desde la clase actual, sus descendientes o el paquete del que forma parte.
  • sin ninguna palabra: accesible desde cualquier clase del paquete.

Los atributos en Java, deben tener visibilidad private. Entonces, ¿cómo accedemos a los atributos? La respuesta está en los métodos Getters y Setters. Veamos un ejemplo de código de estos métodos.

class Punto {

private double puntox, puntoy;

public double getPuntox() {

return puntox;

}

public void setPuntox (double puntox) {

this.puntox = puntox;

}

...

 

Creación de clases

¿Cómo definimos una clase en Java?

Para definir una clase en Java debemos crear un fichero que se llamará igual que la clase y con extensión .jav

Debemos tener en cuenta que una clase implica un fichero y que debe estar formado por :

  • atributos ( nos define el estado del objeto)
  • constructor ( nos permite iniciar el objeto)
  • métodos ( nos permite modificar el comportamiento del objeto)

La estructura es la siguiente:

class <Clase> {

// declaración de atributos

[visibilidad][modificadores] <tipo><atributo> [=valor];

// declaración del constructor

public <Clase> (<argumentos>){

<instrucciones>;

}

// declaración de métodos

[visibilidad][modificadores] <tipo><método>(<argumentos>){

<instrucciones>;

}

….

}