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.
Aufgabe
EinfachLassen 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 Sietruezurück; wenn es zu kurz ist, ändern Sie das Passwort nicht und geben Siefalsezurü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), dietruezurückgibt, wenn der Versuch mit dem gespeicherten Passwort übereinstimmt, andernfallsfalse - Ein Getter
getLength(), der die Länge des aktuellen Passworts zurückgibt (oder 0, falls kein Passwort gesetzt ist)
- Ein privates
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: trueoderSet: false(Ergebnis des Setzens des Passworts)Masked: ******(die maskierte Version des Passworts)Match: trueoderMatch: 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 erlaubtMit 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")
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenFelder (Attribute)Konstruktor-MethodeKonstruktor-ÜberladungRückblick – Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (extends)Das super-SchlüsselwortMethoden überschreiben (@Override)Konstruktor-VerkettungDie Object-KlasseEinfache & mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-InterfaceZusammenfassung – Benutzerdefiniertes Sortieren2Zugriffsmodifikatoren & Kapselung
Überblick über ZugriffsebenenGetter- und Setter-MethodenInformation HidingDas final-SchlüsselwortRückblick – Bankkonto-Manager5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenZusammenfassung – Formenrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, geschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Sealed Classes (Java 17+)11Design Patterns Teil 1
Einführung in Design PatternsSingleton-PatternFactory-PatternBuilder-PatternObserver-PatternStrategy-Pattern14Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung3Klasseneigenschaften & Statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Zusammenfassung – Zähler & Utility6Interfaces & Abstrakte Klassen
Einführung in InterfacesInterfaces implementierenImplementierung mehrerer InterfacesDefault- & statische Methoden in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesZusammenfassung - Zahlungssystem