domingo, 15 de abril de 2012

POO: Principio de encapsulamiento

En la programación orientada a objetos se denomina encapsulamiento al ocultamiento de los "datos" (en realidad, su estado) de un objeto, de tal manera que sólo se puedan cambiar dichos estados mediante las operaciones (métodos) definidas en dicho objeto.

Contenido
  1. Introducción
  2. Encapsulamiento en Java
  3. Encapsulamiento de objetos en Netbeans
Introducción

El encapsulamiento es una simple idea poderosa que provee dos principales beneficios a los desarrolladores de software: la modularidad y el ocultamiento de la información. La modularidad hace que el código fuente (y también el mantenimiento) de un objeto pueda ser escrito independientemente del código fuente de otros objetos. De esta manera, un objeto puede ser transferido alrededor del sistema sin alterar su estado y conducta.

Por otro lado, el ocultamiento de la información hace que un objeto tenga una "interfaz pública" que otros objetos pueden utilizar para comunicarse con él. Esta "interfaz pública" en realidad son los métodos que se programan para cambiar los estados de los "datos" (llamados atributos) de un objeto. Estos métodos también son conocidos como accesores, y dependiendo de su función (establecer u obtener el valor de un atributo de un objeto) se le conocen también como "getters" y "setters" o como "get" y "set".

Encapsulamiento en java

Para ilustrar la programación del principio de encapsulamiento en Java, programaremos una clase Persona con sus atributos: nombre, apellido paterno y apellido paterno.

package Principal;
public class Persona{
    String nombre;
    String apellidoPaterno;
    String apellidoMaterno;
}

Hasta este punto, la clase Persona se encuentra programada, si queremos usar la clase podemos declarar e inicializar un objeto Persona y asignarle valores a sus atributos.

package Principal;

public class Main {

    public static void main(String[] args) {
        Persona persona = new Persona();
        persona.nombre = "Juan";
        persona.apellidoPaterno = "Perez";
        persona.apellidoMaterno = "Perez";
        System.out.println("Hola soy un empleado y mi nombre es " + persona.nombre + " " + persona.apellidoPaterno + " " + persona.apellidoMaterno);
    }
}

Sin embargo, no estamos aplicando el concepto de encapsulamiento. Con el encapsulamiento no se debería tener el acceso directo a los atributos de la clase persona. Nótese que estamos accediendo directamente a los atributos de nuesto objeto persona: persona.nombre, persona.apellidoPaterno y persona.apellidoMaterno.

Ahora, mejoraremos nuestra pequeña clase persona aplicando el encapsulamiento en todos sus atributos implementando métodos para establecer el valor de un atributo, a los cuales nombraremos con el prefijo set; e implementando métodos para devolver el valor de un atributo, a los cuales nombraremos con el prefijo get.

package Principal;
public class Persona{
    private String nombre;
    private String apellidoPaterno;
    private String apellidoMaterno;

    public String getNombre(){
        return this.nombre;
    }

    public String getApellidoPaterno(){
        return this.apellidoPaterno;
    }

    public String getApellidoMaterno(){
        return this.apellidoMaterno;
    }

    public void setNombre(String nombre){
        this.nombre = nombre;
    }

    public void setApellidoPaterno(String apellidoPaterno){
        this.apellidoPaterno = apellidoPaterno;
    }

    public void setApellidoMaterno(String apellidoMaterno){
        this.apellidoMaterno = apellidoMaterno;
    }
}

Aplicando el encapsulamiento, los atributos de la clase Persona se han convertido en inaccesibles para otros objetos (ya que los hemos marcado como privados usando la palabra reservada private). Ahora para poder acceder a dichos atributos deberemos de usar los métodos get y set que programamos anteriormente.

package Principal;

public class Main {

    public static void main(String[] args) {
        Persona persona = new Persona();
        persona.setNombre("Juan");
        persona.setApellidoPaterno("Perez");
        persona.setapellidoMaterno("Perez");
        System.out.println("Hola soy un empleado y mi nombre es " + persona.getNombre() + " " + persona.getApellidoPaterno() + " " + persona.getApellidoMaterno());
    }
}

Encapsulamiento de objetos en Netbeans

El IDE (Entorno integrado de desarrollo) Netbeans ofrece una funcionalidad para realizar el encapsulamiento de objetos de manera automática. Para encapsular los atributos de una clase, abrimos el archivo de la clase a encapsular y damos clic en el menú Refactor/Reestructurar.


En el menú elegimos la opción Encapsulate Fields/Encapsular campos. A continuación nos muestra un cuadro de diálogo con los atributos de la clase, elegimos que atributos deseamos encapsular, especificamos si queremos métodos get o métodos set o ambos, entre otras opciones. Para finalizar damos clic en el botón Refactor/Reestucturar.


Fuente: Conceptos de la Programación Orientada a Objetos (OOP)
Encapsulamiento (informática)

1 comentario: