Perfilado de sección

  • Semana actual

    Java Encapsulamiento y reutilización

    En Java el concepto de encapsulamiento es de los primeros que aparece y hace referencia a limitar el acceso a las variables de nuestras clases Java de tal forma que podamos tener un mayor control sobre ellas. Normalmente utilizando métodos set/get.

    El encapsulamiento en Java es un principio de la programación orientada a objetos (POO) que agrupa datos (atributos) y métodos en una sola unidad (clase), restringiendo el acceso directo a los componentes internos. Se logra usando modificadores de acceso (privateprotected) y métodos getter/setter para proteger la integridad de los datos
     
    Aspectos Clave del Encapsulamiento:
    • Ocultamiento de datos: Los atributos de una clase se declaran como private para que no sean accesibles directamente desde fuera de la clase.
    •  
    • Métodos Getter y Setter: Se proporcionan métodos públicos para leer (get) o modificar (set) los valores de los atributos privados, permitiendo validar la información antes de cambiarla
      .
    Seguridad y Control: Evita la modificación accidental o incorrecta de los datos, mejorando la robustez del código
    .Flexibilidad: Permite cambiar la implementación interna de una clase sin afectar a las clases que la utilizan
     
     

    Ejemplo de encapsulación en Java

    A continuación se muestra un ejemplo que demuestra cómo lograr la encapsulación en Java:

    /* File name : EncapTest.java */ public class EncapTest { private String name; private String idNum; private int age; public int getAge() { return age; } public String getName() { return name; } public String getIdNum() { return idNum; } public void setAge( int newAge) { age = newAge; } public void setName(String newName) { name = newName; } public void setIdNum( String newId) { idNum = newId; } }
     

    Los métodos públicos setXXX() y getXXX() son los puntos de acceso a las variables de instancia de la clase EncapTest . Normalmente, estos métodos se denominan getters y setters. Por lo tanto, cualquier clase que desee acceder a las variables debe hacerlo a través de estos getters y setters.

    Se puede acceder a las variables de la clase EncapTest mediante el siguiente programa:

    /* File name : RunEncap.java */ public class RunEncap { public static void main(String args[]) { EncapTest encap = new EncapTest(); encap.setName("James"); encap.setAge(20); encap.setIdNum("12343ms"); System.out.print("Name : " + encap.getName() + " Age : " + encap.getAge()); } } public class EncapTest { private String name; private String idNum; private int age; public int getAge() { return age; } public String getName() { return name; } public String getIdNum() { return idNum; } public void setAge( int newAge) { age = newAge; } public void setName(String newName) { name = newName; } public void setIdNum( String newId) { idNum = newId; } }

     

     

    Beneficios de la encapsulación

    • Los campos de una clase pueden configurarse como de solo lectura o de solo escritura.

    • Una clase puede tener control total sobre lo que se almacena en sus campos.

    Encapsulación de Java: Clase de solo lectura

    Una clase de solo lectura solo puede tener métodos getter para obtener los valores de los atributos; no debe tener ningún método setter.

    Ejemplo: Creación de una clase de solo lectura

    En este ejemplo, definimos una clase Person con dos métodos getter: getName() y getAge() . Estos métodos se pueden usar para obtener los valores de los atributos declarados como privados en la clase.

     
     
    // Class "Person" class Person { private String name = "Robert"; private int age = 21; // Getter methods public String getName() { return this.name; } public int getAge() { return this.age; } } public class Main { public static void main(String args[]) { // Object to Person class Person per = new Person(); // Getting and printing the values System.out.println("Name of the person is: " + per.getName()); System.out.println("Age of the person is: " + per.getAge()); } }
    
    
     

    Encapsulación de Java: Clase de solo escritura

    Una clase de solo escritura solo puede tener métodos setter para establecer los valores de los atributos; no debe tener ningún método getter.

    Ejemplo: Creación de una clase de solo escritura

    En este ejemplo, definimos una clase Person con dos métodos setter: setName() y setAge() . Estos métodos se pueden usar para establecer los valores de los atributos declarados como privados en la clase.

     
     
    // Class "Person" class Person { private String name; private int age; // Setter Methods public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } } public class Main { public static void main(String args[]) { // Object to Person class Person per = new Person(); // Setting the values per.setName("Robert"); per.setAge(21); } }
    
    

    Encapsulación en Java: Más ejemplos

    Ejemplo 1: Clase Persona (totalmente encapsulada)

    Este ejemplo crea una clase completamente encapsulada llamada "Persona". Esta clase tiene atributos de clase privados, métodos setter y getter.

     
     
    // Class "Person" class Person { private String name; private int age; // Setter Methods public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } // Getter methods public String getName() { return this.name; } public int getAge() { return this.age; } } // The Main class to test encapsulated class "Person" public class Main { public static void main(String args[]) { // Objects to Person class Person per1 = new Person(); Person per2 = new Person(); // Setting the values per1.setName("Robert"); per1.setAge(21); per2.setName("Riyan"); per2.setAge(22); // Printing the values System.out.println("Person 1: Name : " + per1.getName() + " Age : " + per1.getAge()); System.out.println("Person 2: Name : " + per2.getName() + " Age : " + per2.getAge()); } }
    
    
     

    Ejemplo 2: Clase Empleado (Totalmente Encapsulada)

    Este ejemplo crea una clase completamente encapsulada llamada "Empleado". Esta clase tiene atributos de clase privados, métodos setter y getter.

     
     
    // Class "Employee" class Employee { private String emp_name; private String emp_id; private double net_salary; // Constructor public Employee(String emp_name, String emp_id, double net_salary) { this.emp_name = emp_name; this.emp_id = emp_id; this.net_salary = net_salary; } // Getter methods public String getEmpName() { return emp_name; } public String getEmpId() { return emp_id; } public double getSalary() { return net_salary; } // Setter methods public void setEmpName(String emp_name) { this.emp_name = emp_name; } public void setEmpId(String emp_id) { this.emp_id = emp_id; } public void setSalary(double net_salary) { this.net_salary = net_salary; } } // The Main class to test encapsulated class "Employee" public class Main { public static void main(String args[]) { // Objects to Employee class // First object - setting values using constructor Employee emp = new Employee("Robert", "EMP001", 75450.00); // Printing data System.out.println("Employee (Intial Values):"); System.out.println(emp.getEmpId() + " , " + emp.getEmpName() + " , " + emp.getSalary()); // Updating values using setter methods emp.setEmpName("Riyan"); emp.setEmpId("EMP002"); emp.setSalary(90500.00); // Printing data System.out.println("Employee (Updated Values):"); System.out.println(emp.getEmpId() + " , " + emp.getEmpName() + " , " + emp.getSalary()); } }
     
     

     

    ACTIVIDAD

    Tome el código que esta propuesto en este documento, e impleméntelo en Netbeans.

    Deberá presentarlo ya desarrollado en nuestro próximo encuentro académico (próxima clase)