Ir al contenido principal

Encapsulamiento en Java


Anteriormente hemos hablado del encapsulamiento sin ahondar mucho en el tema. En este artículo vamos a profundizar un poco más.

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í.

Comentarios

  1. muy bien por la informacion es muy entendible
    tanto por la definicion como el ejemplo

    muy bien

    ResponderBorrar
  2. GRACIAS POR LA EXPLICACION BIEN

    ResponderBorrar
  3. Gracias, sus comentarios me hacen pensar que estoy cumpliendo mi propósito.

    Saludox

    ResponderBorrar
  4. muy bien por ti.. por que si es entendible todo..
    pero como aplica java el encapsulamiento

    ResponderBorrar
  5. esta muy bien eso por que
    es facil de entender
    yo no no entendia muy bien lo
    del encapsulamiento y esto me ayudo
    gracias.

    ResponderBorrar
  6. Ese programa no me corre.
    No me marca errores, pero no hace nada

    ResponderBorrar
  7. Qué tal!

    necesitaría ver el código para poder indicarte algo, si deseas mándamelo al correo para echarle un vistazo. monillo007@gmail.com

    ResponderBorrar
  8. Muy 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.

    Ciao, Lothar

    ResponderBorrar
  9. Hola:
    Comentas 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?

    ResponderBorrar
  10. Que tal Francko,

    Te 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.

    ResponderBorrar
  11. no me gusta los que dicen algo sin saber bien de lo que están ablando

    ResponderBorrar
  12. Muy buena y clara la explicación, muchas gracias por compartirla.

    ResponderBorrar
  13. Me 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.

    ResponderBorrar
  14. He 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

    ResponderBorrar
  15. Excelente, por fin entendí esta cuestión...

    ResponderBorrar
  16. Muchas gracias amigo
    te entendi mas que mi maestra.\hah un 10

    ResponderBorrar
  17. est biuen el codigo gracias ojala no me quede en esa materia?????
    :(
    :'(

    ResponderBorrar
  18. Gracias me ha ayudado es mu claro

    ResponderBorrar
  19. Me ggusta como explica, muy sencillo para tener la idea basica del tema de encapsulamiento.... gracias

    ResponderBorrar
  20. No 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.

    ResponderBorrar
  21. La 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.

    Por 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.

    ResponderBorrar
  22. vien por la explicacion me sera de mucha ayuda

    ResponderBorrar
  23. Despues de 3 años estudiando ciencias de la computacion. Gracias a este articulo entendi por fin el Encapsulamiento en JAVA. =D, muchas gracias

    ResponderBorrar
  24. Excelente explicación, clara y concisa

    ResponderBorrar
  25. ¿Que se usa para encapsular? ¿un metodo o un costructor?
    Gracias

    ResponderBorrar
  26. Para encapsular utilizas 2 cosas:
    - Variables privadas.
    - Métodos públicos.

    Saludox.

    ResponderBorrar
  27. graxias
    me sirvio bastante

    ResponderBorrar
  28. Gracias por el aporte. Lastima que lo vengo a leer tres años despues de que fue publicado.

    ResponderBorrar
  29. bveno si as o menos se entendio ps ..
    pero
    me gvstaria
    q pongan ,mas ..
    ejemplos y ais poder comprender mejor grasias..

    ResponderBorrar
  30. que bueno gracias paraguay

    ResponderBorrar

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

Entradas más populares de este blog

3 sencillos pasos para tramitar la ayuda por desempleo de la AFORE

¿Tienes dinero ahorrado en tu AFORE y en este momento no estás trabajando o estás trabajando pero no tienes seguro social? Si respondiste sí a la pregunta anterior entonces hay una buena noticia para ti: puedes retirar una parte del dinero que tienes ahorrado. Y lo mejor, es muy sencillo. En este artículo te diré paso a paso qué hacer para obtener ese dinero, sin tecnicismos legales ni nada por el estilo, simple y sencillamente lo que necesitas saber. Paso Número 1: Obtener los últimos 2 estados de cuenta de tu Afore Esto en la mayoría de los casos es sumamente sencillo ya que dichos estados de cuenta llegan directamente al domicilio del ahorrador, si este es tu caso puedes saltar lo restante en este punto y continuar con el paso número 2, en caso contrario sigue leyendo… Si no tienes tus estados de cuenta debes ponerte en contacto con la empresa encargada de administrar tu ahorro para que te los proporcione, normalmente te van a pedir una identificación oficial, comprobante de

Conectar una base de datos en MySQL con NetBeans

NetBeans es una plataforma para el desarrollo de aplicaciones de escritorio usando Java y a un Entorno integrado de desarrollo (IDE) desarrollado usando la Plataforma NetBeans. Si eres un programador y desarrollas tus aplicaciones en Java seguramente necesitarás conectar una base de datos tipo MySQL a este entorno algún día, bueno, si lo necesitas ahora, he aquí una explicación paso a paso de cómo conectar ambas herramientas.

4 extraordinarias aplicaciones espía para Android

Le andas haciendo al James Bond y necesitas grabar video, voz o tomar fotos desde tu dispositivo Android sin ser notado? Aquí 4 excelentes aplicaciones que facilitarán tus hazañas de 007 en menos de lo que canta un gallo.

c606 c6nf5g4r6 e3 tec3ad6 [Como configurar el teclado]

¿Problemas al escribir con el teclado? ¿Tratas de escribir la letra ‘o’ y sale el número ‘6’ o algo por el estilo? La solución puede ser más simple de lo que parece. La solución a tu problema tras el salto...

Conexión, consulta y ejecución de sentencias en MySQL con Java

Anteriormente escribí este mismo artículo pero para bases de datos en Oracle . En este artículo prácticamente me copio y pego para explicar paso a paso cómo realizar la conexión a MySQL en Java, así como la forma de realizar consultas a los registros existentes y ejecutar sentencias de inserción, borrado y actualización de datos. Al final del artículo tendremos una clase que encapsulará todos los procedimientos necesarios para trabajar con la base de datos.