Menu
Coddy logo textTech

Information Hiding

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

Lassen Sie uns eine Password-Verwaltungsklasse erstellen, die Information Hiding demonstriert, indem sie sensible Daten schützt und Sicherheitsregeln durch kontrollierten Zugriff erzwingt.

Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:

  • Password.java: Erstellen Sie eine Password-Klasse, die ihre internen Daten verbirgt und kontrolliert, wie Passwörter gesetzt und aufgerufen 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 definiert
    • Ein Konstruktor, der die Anforderung an die Mindestlänge entgegennimmt
    • Ein Setter setPassword(String password), der nur Passwörter akzeptiert, die die Mindestlängenanforderung erfüllen. Wenn gültig, speichern Sie es und geben Sie true zurück; wenn es zu kurz ist, ändern Sie das Passwort nicht und geben Sie false zurück
    • Ein Getter getMaskedPassword(), der das Passwort zurückgibt, wobei alle Zeichen durch Sternchen (*) ersetzt wurden - geben Sie 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
    • Ein Getter getLength(), der die Länge des aktuellen Passworts zurückgibt (oder 0, falls kein Passwort gesetzt ist)
  • Main.java: Erstellen Sie ein Password-Objekt mit einer Mindestlänge von 6 und lesen Sie dann zwei Eingaben ein: ein zu setzendes Passwort und einen zu prüfenden Versuch. Geben Sie 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)

Sie erhalten zwei Eingaben: das zu setzende Passwort und den Passwortversuch zur Überprüfung.

Beachten Sie, dass das tatsächliche Passwort von außerhalb der Klasse niemals direkt zugänglich ist - das ist Information Hiding in Aktion. Die Klasse kontrolliert genau, welche Informationen preisgegeben werden und wie das Passwort geändert werden kann.

Spickzettel

Information Hiding (Informationskapselung) schränkt den direkten Zugriff auf die internen Daten eines Objekts ein, indem private Felder in Kombination mit Gettern und Settern verwendet werden.

Ohne Information Hiding sind Felder offen zugänglich und können auf ungültige Werte gesetzt werden:

public class Temperature {
    public double celsius;  // Direkt exponiert
}

Temperature t = new Temperature();
t.celsius = -500;  // Ungültiger Wert erlaubt

Mit Information Hiding kontrollieren Sie den Zugriff und validieren die Daten:

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

Hauptvorteile von Information Hiding:

  • Validierung: Gewährleistet die Datenintegrität durch Ablehnung ungültiger Werte
  • Flexibilität: Ermöglicht interne Änderungen, ohne den externen Code zu beeinflussen
  • Kontrolle: Lässt Sie entscheiden, welche Operationen auf Ihren Daten zulässig sind

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