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...
public class MiClase{
public int tipo;
}
class AccesoDirecto{
public static void main(String[] args){
MiClase mc = new MiClase();
mc.tipo = -5; //1 }
}Analizando el código anterior podemos darnos cuenta de que las variables enteras tipo y clase son públicas y pueden ser accedidas directamente a través de una instancia de la clase MiClase, esto compila sin ningún 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 código es escribiendo un método 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 básico de encapsulamiento.
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í:
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 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.
Esto es todo con respecto al encapsulamiento. ¿Alguna duda? deja tu comentario.
Más sobre programación en Java
aquí.
muy bien por la informacion es muy entendible
ResponderBorrartanto por la definicion como el ejemplo
muy bien
Thnx =)
ResponderBorrarGRACIAS POR LA EXPLICACION BIEN
ResponderBorrarGracias, sus comentarios me hacen pensar que estoy cumpliendo mi propósito.
ResponderBorrarSaludox
muy bien por ti.. por que si es entendible todo..
ResponderBorrarpero como aplica java el encapsulamiento
esta muy bien eso por que
ResponderBorrares facil de entender
yo no no entendia muy bien lo
del encapsulamiento y esto me ayudo
gracias.
Gracias por sus comentarios. Saludox.
ResponderBorrarEse programa no me corre.
ResponderBorrarNo me marca errores, pero no hace nada
Qué tal!
ResponderBorrarnecesitaría ver el código para poder indicarte algo, si deseas mándamelo al correo para echarle un vistazo. monillo007@gmail.com
Excelente explicación!
ResponderBorrarMuy buena la explicacion me ha ayudado a la hora de entender lo que es la encapsulacion en Java y gracias al ejemplo creo que voy a poder prograrlo en mi codigo.
ResponderBorrarCiao, Lothar
Hola:
ResponderBorrarComentas que no hay validación en el metodo setTipo() para prevenir un valor no valido, pero al declarar la variable:
private int tipo;
El definir el tipo de dato int, ¿el metodo sabe que solo recibira numeros?
Que tal Francko,
ResponderBorrarTe comento que el método automáticamente detecta que el parámetro que recibirá es un entero, de lo contrario el compilador manda un error.
A lo que me refiero con que no se valida para prevenir un valor no válido es que, por ejemplo, para el correcto funcionamiento de tu aplicación la variable tipo debe de tener un valor entre 5 y 10, y, en este ejemplo, cualquier valor entero pasado a setTipo() se toma como válido.
Espero haberme explicado. Saludox.
no me gusta los que dicen algo sin saber bien de lo que están ablando
ResponderBorrarMuy buena y clara la explicación, muchas gracias por compartirla.
ResponderBorrarMe parece bueno que pongas este tipo de explicaciones para quienes empiezan en Java, pero creo que deberias ser un poco mas honesto ya que esa explicación la sacaste del libro SCJP Sun Certified Programmer for Java 6 Study Guide. Viene en el capitulo dos. Es bueno que ayudes pero dale credito a quien lo merece.
ResponderBorrarHe repasado lo que habia dicho el profe sobre esto y ceros. Con tu explicacion ya he quedado. Lo que no me agrada en cuanto a la encapsulacion es usar las convenciones de codigo para los metodos, usar el get o set, hablo español, y aunque el lengvua tenga todas sus palabras reservadas en ingles, me es mas facil poner las variables y metodos lo mas descriptivo posible ne español. Saludos
ResponderBorrarmuy bien gracias
ResponderBorrarEsta bien claro todo, gracias
ResponderBorrarmuchas gracias
ResponderBorrarExcelente, por fin entendí esta cuestión...
ResponderBorrarMuchas gracias amigo
ResponderBorrarte entendi mas que mi maestra.\hah un 10
est biuen el codigo gracias ojala no me quede en esa materia?????
ResponderBorrar:(
:'(
ok esta bueno
ResponderBorrarGracias me ha ayudado es mu claro
ResponderBorrarMe ggusta como explica, muy sencillo para tener la idea basica del tema de encapsulamiento.... gracias
ResponderBorrarNo entiendo porque inventaron el encapsulamiento, si las dos formas se puede alterar el valor de la variable, con la diferencia que en el encapsulamiento ocupa mas codigo. Cual es la razon de utilizarla.
ResponderBorrarLa razón de ser del encapsulamiento es principalmente limitar o denegar el acceso directo a la variable u objeto, si utilizas un método para acceder a ella podrás dentro del método realizar ciertas validaciones o establecer un comportamiento en particular cuando se modifica o se intenta modificar su valor.
ResponderBorrarPor ejemplo, digamos que tienes una variable que te almacenará la edad de una persona, si no utilizas el encapsulamiento cualquiera que tenga acceso a esa variable podrá establecer cualquier valor, incluyendo números negativos aún cuando la edad no puede ser representada de esa manera, en caso de que utilices un método público para modificar el valor de esa variable privada (encapsulamiento) podrás limitar el rango de valores que puede tener y por lo tanto, garantizarás que siempre tendrá un valor real.
Espero haberme explicado un poco más. Saludox.
vien por la explicacion me sera de mucha ayuda
ResponderBorrarDespues de 3 años estudiando ciencias de la computacion. Gracias a este articulo entendi por fin el Encapsulamiento en JAVA. =D, muchas gracias
ResponderBorrarExcelente explicación, clara y concisa
ResponderBorrar¿Que se usa para encapsular? ¿un metodo o un costructor?
ResponderBorrarGracias
Para encapsular utilizas 2 cosas:
ResponderBorrar- Variables privadas.
- Métodos públicos.
Saludox.
graxias
ResponderBorrarme sirvio bastante
Gracias por el aporte. Lastima que lo vengo a leer tres años despues de que fue publicado.
ResponderBorrarbveno si as o menos se entendio ps ..
ResponderBorrarpero
me gvstaria
q pongan ,mas ..
ejemplos y ais poder comprender mejor grasias..
xvr x el dato!
ResponderBorrarque bueno gracias paraguay
ResponderBorrarbuen aporte se agradece
ResponderBorrarGracias. Una explicación clara y concisa.
ResponderBorrar