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 public get y set para acceder y actualizar el valor de cada propiedad declarada private.

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 private solo 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 como public.

Un método get devolverá el valor de la variable, y el método set modificará su valor.

La sintaxis  para ambos métodos es la misma: comienzan con get o set seguidos 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 get y otro método set por 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 Modulo que 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: