Encapsulamiento by Javier Matías

 ENCAPSULAMIENTO

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.


Ejemplos: 


Imaginemos que se crea una clase, una docena de programadores tienen acceso a dicha clase y la utilizan a discreción, posteriormente dicha clase comienza a comportarse de una manera inesperada debido a que los valores que algunas variables han tomado no fueron anticipados y todo comienza a desmoronarse. Para corregir el problema se crea una versión más nueva de dicha clase y listo.

 Bueno, a esto le llamamos flexibilidad y capacidad de mantenimiento, ambas son características y beneficios de la programación Orientada a Objetos (OO) pero para que una clase pueda cumplir dichas funciones los programadores debemos de hacer algo. Imaginemos que creamos una clase con variables de instancia públicas a las cuales podemos acceder sin problemas desde fuera de la misma clase...




Si se desea flexibilidad, buen mantenimiento y extensibilidad, nuestro diseño en el código debe de incluir encapsulamiento, para ello debemos de hacer lo siguiente:

  • Mantener las variables de instancia protegidas (puede ser con un modificador de acceso, p.ej., private).

  • Hacer métodos de acceso públicos para forzar al acceso a las variables por medio de dichos métodos en lugar de acceder directamente.

  • Utilizar las convenciones de código para los nombres de los métodos, p. ej., set y get.

El ejemplo anterior modificado para un buen encapsulamiento quedaría así:




Si nos fijamos bien, en el método setTipo() no existen validaciones para prevenir que un valor no válido sea asignado a la variable, sin embargo, el proveer de un método de este tipo desde el diseño inicial de la aplicación nos permite posteriormente modificar el comportamiento de la misma sin afectar los métodos utilizados, tal vez en un futuro se desee que dicha variable solamente pueda tener uno entre un rango de valores y se podrán aplicar posteriormente los cambios sin que haya repercusiones negativas.


Ejemplo extra: 




No hay comentarios:

Publicar un comentario