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

Vamos a construir una clase de gestión de Password que demuestre la ocultación de información protegiendo datos sensibles y aplicando reglas de seguridad a través del 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 con 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, 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, luego lee dos entradas: una contraseña para establecer y un intento para verificar. 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 verificar el intento)

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

Observa cómo la contraseña real nunca es accesible directamente 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.

Hoja de referencia

El ocultamiento de información restringe el acceso directo a los datos internos de un objeto mediante el uso de campos private combinados con getters y setters.

Sin el ocultamiento de información, los campos quedan expuestos y pueden establecerse con valores no válidos:

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

Temperature t = new Temperature();
t.celsius = -500;  // Se permite un valor no válido

Con el ocultamiento de información, usted controla el acceso y valida los datos:

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

Beneficios clave del ocultamiento de información:

  • Validación: Garantiza la integridad de los datos al rechazar valores no válidos
  • Flexibilidad: Permite realizar cambios internos sin afectar al código externo
  • Control: Le permite decidir qué operaciones están permitidas en sus datos

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