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.
Aufgabe
EinfachErstelle 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 gibtruezurück; wenn es zu kurz ist, ändere das Passwort nicht und gibfalsezurü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), dietruezurückgibt, wenn der Versuch mit dem gespeicherten Passwort übereinstimmt, andernfallsfalse - Einen Getter
getLength(), der die Länge des aktuellen Passworts zurückgibt (oder 0, wenn kein Passwort gesetzt ist)
- Ein privates
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: trueoderSet: false(Ergebnis des Setzens des Passworts)Masked: ******(die maskierte Version des Passworts)Match: trueoderMatch: 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")
}
}
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 Schlüsselwort thisMethodenFelder (Attribute)KonstruktormethodeÜberladen von KonstruktorenRückblick – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbung (extends)Das Schlüsselwort superÜberschreiben von Methoden (@Override)KonstruktorverkettungDie Object-KlasseEinfach- und mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenRückblick – Mitarbeiterhierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-SchnittstelleRückblick – Benutzerdefinierte Sortierung2Zugriffsmodifikatoren & Kapselung
Übersicht der ZugriffsebenenGetter- und Setter-MethodenInformationsverbergungDas Schlüsselwort finalRückblick – Bankkontoverwaltung5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenRückblick – Formrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, verschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Versiegelte Klassen (Java 17+)11Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBuilder-MusterObserver-MusterStrategie-Muster14Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungsdienst3Klassen-Props & statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Wiederholung – Counter & Utility6Schnittstellen & abstrakte Klassen
Einführung in InterfacesInterfaces implementierenMehrere Interfaces implementierenDefault & Static in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesRückblick – ZahlungssystemÜbe selbstständig: Online-Java-Compiler