23 de marzo - 29 de marzo
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 (private,protected) y métodosgetter/setterpara proteger la integridad de los datosAspectos Clave del Encapsulamiento:- Ocultamiento de datos: Los atributos de una clase se declaran como
privatepara 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 utilizanEjemplo 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)
- Ocultamiento de datos: Los atributos de una clase se declaran como