Menu
Coddy logo textTech

Informationsverbergung

Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy. Lektion 12 von 87.

Information Hiding ist das Prinzip der Beschränkung des direkten Zugriffs auf die internen Daten eines Objekts. Durch die Kombination von private-Feldern mit Gettern und Settern erstellen Sie eine Schutzbarriere um den Zustand Ihres Objekts.

Betrachten Sie, was ohne Information Hiding passiert:

public class Temperature {
    public double celsius;  // Direkt zugänglich
}

// Jeder kann ungültige Werte setzen
Temperature t = new Temperature();
t.celsius = -500;  // Unter dem absoluten Nullpunkt - unmöglich!

Mit Information Hiding steuern Sie, wie auf Daten zugegriffen und wie diese geändert werden:

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

Jetzt werden ungültige Temperaturen automatisch abgelehnt. Die interne Darstellung ist verborgen – Sie könnten später ändern, wie die Temperatur intern gespeichert wird (vielleicht in Kelvin), ohne den Code zu beeinflussen, der die Klasse verwendet.

Dieser Ansatz bietet drei wesentliche Vorteile: Validierung gewährleistet die Datenintegrität, Flexibilität ermöglicht interne Änderungen, ohne externen Code zu beeinträchtigen, und Kontrolle lässt Sie genau entscheiden, welche Operationen auf Ihren Daten zulässig sind.

challenge icon

Aufgabe

Einfach

Erstelle eine Password-Verwaltungsklasse, die Informationsverbergung demonstriert, indem sie sensible Daten schützt und Sicherheitsregeln durch kontrollierten Zugriff durchsetzt.

Du erstellst zwei Dateien, um deinen Code zu organisieren:

  • Password.java: Erstelle eine Password-Klasse, die ihre internen Daten verbirgt und kontrolliert, wie Passwörter gesetzt und abgerufen werden können:
    • Ein privates password-Feld (String), das das tatsächliche Passwort speichert
    • Ein privates minLength-Feld (int), das die akzeptable Mindestlänge des Passworts festlegt
    • Einen Konstruktor, der die erforderliche Mindestlänge entgegennimmt
    • Einen Setter setPassword(String password), der nur Passwörter akzeptiert, die die Mindestlänge erfüllen. Wenn das Passwort gültig ist, speichere es und gib true zurück; wenn es zu kurz ist, ändere das Passwort nicht und gib false zurück
    • Einen Getter getMaskedPassword(), der das Passwort zurückgibt, wobei alle Zeichen durch Sternchen (*) ersetzt werden – gib niemals das tatsächliche Passwort preis!
    • Eine Methode checkPassword(String attempt), die true zurückgibt, wenn der Versuch mit dem gespeicherten Passwort übereinstimmt, andernfalls false
    • Einen Getter getLength(), der die Länge des aktuellen Passworts zurückgibt (oder 0, wenn kein Passwort gesetzt ist)
  • Main.java: Erstelle ein Password-Objekt mit einer Mindestlänge von 6 und lies anschließend zwei Eingaben ein: ein zu setzendes Passwort und einen zu überprüfenden Versuch. Gib drei Zeilen aus:
    • Set: true oder Set: false (Ergebnis des Setzens des Passworts)
    • Masked: ****** (die maskierte Version des Passworts)
    • Match: true oder Match: false (Ergebnis der Überprüfung des Versuchs)

Du erhältst zwei Eingaben: das zu setzende Passwort und den zu überprüfenden Passwortversuch.

Beachte, dass das tatsächliche Passwort von außerhalb der Klasse niemals direkt zugänglich ist – das ist Informationsverbergung in Aktion. Die Klasse kontrolliert genau, welche Informationen offengelegt werden und wie das Passwort geändert werden kann.

Probier es selbst

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Das zu setzende Passwort lesen
        String passwordToSet = scanner.nextLine();
        // Den Passwort-Versuch zum Überprüfen lesen
        String passwordAttempt = scanner.nextLine();
        
        // TODO: Erstellen Sie ein Password-Objekt mit einer Mindestlänge von 6
        
        // TODO: Setzen Sie das Passwort und geben Sie das Ergebnis aus ("Set: true" oder "Set: false")
        
        // TODO: Geben Sie das maskierte Passwort aus ("Masked: ******")
        
        // TODO: Überprüfen Sie den Passwort-Versuch und geben Sie das Ergebnis aus ("Match: true" oder "Match: false")
        
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Java-Compiler