Está en la página 1de 2

Encapsulamiento en Java

Anteriormente hemos hablado del encapsulamiento sin ahondar mucho en el tema. En este artculo vamos a profundizar un poco ms. Imaginemos que se crea una clase, una docena de programadores tienen acceso a dicha clase y la utilizan a discrecin, 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 versin ms nueva de dicha clase y listo. Bueno, a esto le llamamos flexibilidad y capacidad de mantenimiento, ambas son caractersticas y beneficios de la programacin 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 pblicas a las cuales podemos acceder sin problemas desde fuera de la misma clase... public class MiClase{ public int tipo; } class AccesoDirecto{ public static void main(String[] args){ MiClase mc = new MiClase(); mc.tipo = -5; //1 } } Analizando el cdigo anterior podemos darnos cuenta de que las variables enteras tipo y clase son pblicas y pueden ser accedidas directamente a travs de una instancia de la clase MiClase, esto compila sin ningn problema, digamos que es 'legal', sin embargo, qu pasa si ingresamos un valor que no se supone debe de tener una variable (en este caso el -5 que le asignamos a tipo)?, simplemente no hay nada que nos detenga para

hacerlo. La nica manera de proteger el cdigo es escribiendo un mtodo que nos permita regular los valores que cada variable puede tener y escondiendo las variables para que no se pueda acceder a ellas de manera directa, esto es el principio bsico de encapsulamiento. Si se desea flexibilidad, buen mantenimiento y extensibilidad, nuestro diseo en el cdigo 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 mtodos de acceso pblicos para forzar al acceso a las variables por medio de dichos mtodos en lugar de acceder directamente. * Utilizar las convenciones de cdigo para los nombres de los mtodos, p. ej., set y get. El ejemplo anterior modificado para un buen encapsulamiento quedara as: public class MiClase{ private int tipo; public void setTipo(int t){ tipo = t; } public int getTipo(){ return tipo; } } class AccesoIndirecto{ public static void main(String[] args){ MiClase mc = new MiClase(); mc.setTipo(5); System.out.println("El tipo es:" + mc.getTipo()); } } Si nos fijamos un poquito, en el mtodo setTipo() no existen validaciones para prevenir que un valor no vlido sea asignado a la variable, sin embargo, el proveer de un mtodo de este tipo desde el diseo inicial de la aplicacin nos permite posteriormente modificar el comportamiento de la misma sin afectar los mtodos utilizados, tal vez en un futuro se desee que dicha variable solamente pueda tener uno entre un rango de valores y se podrn aplicar posteriormente los cambios sin que haya repercusiones negativas. Esto es todo con respecto al encapsulamiento. Alguna duda? deja tu comentario. Ms sobre programacin en Java aqu.