Menu
Coddy logo textTech

Ocultamiento de información

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy. Lección 12 de 87.

El ocultamiento de información es el principio de restringir el acceso directo a los datos internos de un objeto. Al combinar campos private con getters y setters, creas una barrera protectora alrededor del estado de tu objeto.

Considera lo que sucede sin la ocultación de información:

public class Temperature {
    public double celsius;  // Expuesto directamente
}

// Cualquiera puede establecer valores no válidos
Temperature t = new Temperature();
t.celsius = -500;  // Por debajo del cero absoluto - ¡imposible!

Con la ocultación de información, usted controla cómo se accede a los datos y cómo se modifican:

public class Temperature {
    private double celsius;
    
    public void setCelsius(double celsius) {
        if (celsius >= -273.15) {
            this.celsius = celsius;
        }
    }
    
    public double getCelsius() {
        return celsius;
    }
}

Ahora las temperaturas no válidas se rechazan automáticamente. La representación interna está oculta: podrías cambiar más adelante cómo se almacena internamente la temperatura (quizás a Kelvin) sin afectar al código que utiliza la clase.

Este enfoque ofrece tres beneficios clave: validación garantiza la integridad de los datos, flexibilidad permite realizar cambios internos sin romper el código externo, y control le permite decidir exactamente qué operaciones están permitidas en sus datos.

challenge icon

Desafío

Fácil

Construyamos una clase de gestión de Password que demuestre la ocultación de información protegiendo datos confidenciales y aplicando reglas de seguridad mediante un acceso controlado.

Crearás dos archivos para organizar tu código:

  • Password.java: Crea una clase Password que oculte sus datos internos y controle cómo se pueden establecer y acceder a las contraseñas:
    • Un campo privado password (String) que almacena la contraseña real
    • Un campo privado minLength (int) que define la longitud mínima aceptable de la contraseña
    • Un constructor que recibe el requisito de longitud mínima
    • Un setter setPassword(String password) que solo acepta contraseñas que cumplan el requisito de longitud mínima. Si es válida, almacénala y devuelve true; si es demasiado corta, no cambies la contraseña y devuelve false
    • Un getter getMaskedPassword() que devuelve la contraseña con todos los caracteres reemplazados por asteriscos (*): ¡nunca expongas la contraseña real!
    • Un método checkPassword(String attempt) que devuelve true si el intento coincide con la contraseña almacenada, y false en caso contrario
    • Un getter getLength() que devuelve la longitud de la contraseña actual (o 0 si no se ha establecido ninguna contraseña)
  • Main.java: Crea un objeto Password con una longitud mínima de 6, después lee dos entradas: una contraseña que establecer y un intento que comprobar. Imprime tres líneas:
    • Set: true o Set: false (resultado de establecer la contraseña)
    • Masked: ****** (la versión enmascarada de la contraseña)
    • Match: true o Match: false (resultado de comprobar el intento)

Recibirás dos entradas: la contraseña que establecer y el intento de contraseña que comprobar.

Observa cómo nunca se puede acceder directamente a la contraseña real desde fuera de la clase: esto es la ocultación de información en acción. La clase controla exactamente qué información se revela y cómo se puede modificar la contraseña.

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leer la contraseña a establecer
        String passwordToSet = scanner.nextLine();
        // Leer el intento de contraseña para verificar
        String passwordAttempt = scanner.nextLine();
        
        // TODO: Crear un objeto Password con una longitud mínima de 6
        
        // TODO: Establecer la contraseña e imprimir el resultado ("Set: true" o "Set: false")
        
        // TODO: Imprimir la contraseña enmascarada ("Masked: ******")
        
        // TODO: Verificar el intento de contraseña e imprimir el resultado ("Match: true" o "Match: false")
        
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Java online