Programming
T05-001-06 Encapsulación.
Enunciado
El objetivo de la Encapsulación es asegurarse de que los datos sensibles permanecen ocultos a los usuarios. Para conseguirlo, se debe:
- declarar las propiedades de la clase como
private.- desarrollar métodos
publicget y set para acceder y actualizar el valor de cada propiedad declaradaprivate.Ventajas
- Mejor control de las propiedades y los métodos.
- Flexibilidad a la hora de que se pueda modificar una parte del código sin afectar a otras partes.
- Incrementa la seguridad de los datos.
Get y Set
Aprendimos que las propiedades
privatesolo pueden ser accedidas dentro de la misma clase. Sin embargo, es posible acceder a ellas a través de métodos get y set declarados comopublic.Un método
getdevolverá el valor de la variable, y el métodosetmodificará su valor.La sintaxis para ambos métodos es la misma: comienzan con
getosetseguidos del nombre de la propiedad con la primera letra en mayúsculas.Ejemplo:
public class OOP_ejemplos {
public static void main(String[] args) {
SubClase miObj = new SubClase(4, 3);
System.out.println(miObj.suma());
}
}
class SubClase {
private int x, y;
public SubClase(int _x, int _y) {
setX(_x);
setY(_y);
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public int suma() {
return getX() + getY();
}
}Se puede observar un método
gety otro métodosetpor cada una de las propiedades.La palabra clave this es utilizada para referirse al objeto con el que se invocó el método.
Ejercicio
Partiendo de la clase
Moduloque soluciona el último ejercicio de Modificadores, encapsula las propiedades y genera los métodos get y set correspondientes a dichas propiedades.
Solución
package oop;
import java.util.Scanner;
public class OOP {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String nombre;
int nota;
Modulo miModulo;
for (int i = 0; i < 3; i++) {
System.out.println("Escriba el nombre del modulo: ");
nombre = sc.nextLine();
if (nombre.length() > 0) {
do {
System.out.println("Escriba la nota del modulo: ");
nota = Integer.parseInt(sc.nextLine());
} while (nota > Modulo.CALIFICACION_MAXIMA);
miModulo = new Modulo(nota, nombre);
} else {
miModulo = new Modulo();
}
System.out.println("Nombre del modulo: " + miModulo.getNombre());
System.out.println("Nota: " + miModulo.getNota());
System.out.println("Calificacion textual: " + miModulo.calificacion());
}
}
}
class Modulo {
final static int CALIFICACION_MAXIMA = 10;
private int nota;
private String nombre;
public Modulo() {
nota = 8;
nombre = "Programacion";
}
public Modulo(int _nota, String _nombre) {
this.nota = _nota;
this.nombre = _nombre;
}
public String calificacion() {
String notaTextual;
switch (this.getNota()) {
case 0:
case 1:
notaTextual = "Muy deficiente";
break;
case 2:
case 3:
case 4:
notaTextual = "Insuficiente";
break;
case 5:
notaTextual = "Suficiente";
break;
case 6:
notaTextual = "Bien";
break;
case 7:
case 8:
notaTextual = "Notable";
break;
case 9:
case 10:
notaTextual = "Sobresaliente";
break;
default:
notaTextual = "Fuera de rango";
}
return notaTextual;
}
public int getNota() {
return nota;
}
public void setNota(int nota) {
this.nota = nota;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
Input
Bases de Datos 13 7 Sistemas 12 5
Sistemas 12 5 Bases de Datos 13 7
Output
Escriba el nombre del modulo: Escriba la nota del modulo: Escriba la nota del modulo: Nombre del modulo: Bases de Datos Nota: 7 Calificacion textual: Notable Escriba el nombre del modulo: Nombre del modulo: Programacion Nota: 8 Calificacion textual: Notable Escriba el nombre del modulo: Escriba la nota del modulo: Escriba la nota del modulo: Nombre del modulo: Sistemas Nota: 5 Calificacion textual: Suficiente
Escriba el nombre del modulo: Escriba la nota del modulo: Escriba la nota del modulo: Nombre del modulo: Sistemas Nota: 5 Calificacion textual: Suficiente Escriba el nombre del modulo: Escriba la nota del modulo: Escriba la nota del modulo: Nombre del modulo: Bases de Datos Nota: 7 Calificacion textual: Notable Escriba el nombre del modulo:

