English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Java Control de flujo

Java Arreglo

Java Programación orientada a objetos (I)

Java Programación orientada a objetos (II)

Java Programación orientada a objetos (III)

Manejo de excepciones en Java

Java Lista (List)

Java Queue (cola)

Java Map colecciones

Java Set colecciones

Java Entrada/Salida (I/O)/O)

Java Reader/Writer

Otras temas de Java

Encapsulamiento en Java

En este tutorial, aprenderá a través de ejemplos la encapsulación y la ocultación de datos en Java.

Encapsulamiento en Java

La encapsulación es una de las funciones importantes del programación orientada a objetos. La encapsulación es la asociación de campos y métodos en una única clase.

Agrupar campos y métodos similares dentro de una clase también ayuda a ocultar datos.

Encapsulación de campos y métodos

Por lo general, la encapsulación es el proceso de empaquetar código similar en un solo lugar.

En Java, podemos agrupar campos y métodos que se operan juntos en una única clase. Por ejemplo:

class Rectangle {
   int length;
   int breadth;
   public void getArea() {}
}

En el programa anterior, el método getArea() calcula el área del rectángulo. Para calcular el área, necesita la longitud (length) y la anchura (breadth). Por lo tanto, los campos de datos length, breadth y el método getArea() se colocan dentro de la clase Rectangle.

Ocultación de datos en Java

La ocultación de datos es un método para limitar el acceso a los miembros de datos mediante la ocultación de detalles de implementación.

La encapsulación también proporciona un método para ocultar datos.

La ocultación de datos se puede lograr mediante modificador de acceso. En Java, hay cuatro modificadores de acceso:

  • public - Los atributos o métodos modificados son públicos y pueden ser accedidos en cualquier lugar, por defecto todos los atributos y métodos son públicos

  • private - Los atributos o métodos modificados son privados y no pueden ser accedidos fuera de la clase en la que se declaran

  • protected - Las propiedades o métodos modificados por protected están protegidos, al igual que private, la diferencia es que también se permite su acceso en las subclases

  • default - Es decir, sin ningún modificador de acceso, generalmente llamado "modo de acceso por defecto". En este modo, solo se permite el acceso dentro del mismo paquete.

Para obtener más información, visiteModificadores de Java

Ejemplo1Uso de ocultación de datos private

class Person {
   private int age;
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
}
class Main {
   public static void main(String[] args) {
      Person p1 = new Person();
      p1.setAge(24);
      System.out.println("Mi edad es " + p1.getAge());
   }
}

Resultados de salida

Mi edad es 24

En el ejemplo anterior, tenemos un campo privado age. Debido a que es privado, no se puede acceder a él desde fuera de la clase. Para acceder a age, utilizamos métodos públicos getAge() y setAge(). Estos métodos se denominan métodos getter y setter.

Si intenta acceder al campo age desde la clase Main, se producirá un mensaje de error.

p1.age = 24;     // error: age tiene acceso privado en Person

Configurar age como privado puede limitar el acceso no autorizado desde fuera de la clase. Esto es ocultación de datos.

Ejemplo2Uso de ocultación de datos protected

class Person {
 protected String profession;
 protected void displayInfo() {
   System.out.println("I am a " + profession);
 }
}
class Teacher extends Person {
   public static void main(String[] args) {
      Teacher t1 = new Teacher();
      t1.profession = "teacher";
      t1.displayInfo();
   }
}

Resultados de salida

I am a teacher

En el programa anterior, creamos una clase Person que contiene el campo protegido profession y el método protegido displayInfo().

Ya hemos accedido a estos miembros desde la clase Teacher (subclase de Person).

¿Por qué encapsular?

  • En Java, la encapsulación puede ayudarnos a mantener juntos los campos y métodos relacionados, haciendo que nuestro código sea más ordenado y fácil de leer.

  • Ayuda a controlar las modificaciones de nuestros campos de datos. Consideremos una situación en la que deseamos que el campo age de la clase sea un número no negativo. Aquí, podemos establecer age como privado y aplicar lógica en el método setAge(). Por ejemplo:

class Person {
   private int age;
   public void setAge(int age) {
     if (age >= 0) {
        this.age = age;
     }
   }
}
  • Los métodos getter y setter proporcionan acceso solo de lectura o solo de escritura a nuestros campos de clase. Por ejemplo:

getName()   // Proporciona acceso solo de lectura
setName()   //Proporciona acceso solo de escritura
  • Ayuda a desacoplar los componentes del sistema. Estos componentes desacoplados pueden desarrollarse, probarse y depurarse de manera independiente y simultáneamente. Y, cualquier cambio en un componente específico no tendrá ningún efecto en otros componentes.

Ocultación de datos y Encapsulamiento

La gente generalmente considera que el encapsulamiento es la ocultación de datos, pero esto no es completamente correcto.

El encapsulamiento es el atar juntos campos y métodos relacionados.Esto nos permite lograr la ocultación de datos.El encapsulamiento en sí no es la ocultación de datos.