Java Übung & Lösung zur Datenkapselung: Programmzugriff durch Methoden kontrollieren
Ein wesentlicher Bestandteil im Konzept der objektorientierten Programmierung ist die Datenkapselung.
Und um Datenkapselung soll es in dieser Java Übung gehen.
Stell Dir vor, du hast ein Computerprogramm entwickelt.
Dieses Computerprogramm verlangt vom Nutzer gewisse Eingaben.
Der User soll Daten wie Name, Alter, Geburtsjahr usw. eingeben.
Und diese Daten sollen bevor sie im System übernommen werden, geprüft werden.
Und dies machen wir jetzt.
Erstelle eine Klasse namens „NutzerEingaben“.
Lege in dieser Klasse eine Instanzvariable für das Geburtsjahr des Nutzers an.
Lege eine zweite Klasse für den Programmstart an.
Die Programmstart-Klasse darf nicht direkt auf die Instanzvariablen zugreifen.
Stattdessen bietest du den Zugriff auf das Geburtsjahr indirekt über getter und setter Methoden an.
Beim Methodenaufruf wird dieses Geburtsjahr überprüft.
Das Geburtsjahr darf zwischen 1900 und 2016 sein.
Ansonsten kommt es zur Fehlermeldung.
Du fängst somit Falscheingaben ab.
Also los geht’s
Viel Spass bei dieser Java Übung.
Inhalt
Die Lösung zur Java Übung erfolgt in drei Schritten
Beginne mit der Klasse „NutzerEingaben“.
So sieht diese aus.
public class NutzerEingaben {
private int geburtsJahr; //Außerhalb der Klasse nicht verfügbar
}
Die Instanzvariable erhält den Access Modifier private.
Dadurch verwehrst du den Zugriff von außen.
Jetzt noch die Programmstart-Klasse
public class ProgrammStartNutzerEingaben {
public static void main(String[] args) {
NutzerEingaben nutzer = new NutzerEingaben();
nutzer.geburtsJahr; //das funktioniert nicht
}
}
Du siehst, dass du eine Fehlermeldung bekommst, wenn du auf die Instanzvariable zugreifen möchtest.
Deshalb musst du den Zugriff jetzt indirekt über Methoden anbieten.
Schritt 2: Biete einen indirekten Zugriff über getter und setter Methoden an
Mit der sogenannten set-Methode weist du den Wert der Instanzvariable zu.
Und mit der getter Methode bekommst du den Wert zurückgeliefert.
public class NutzerEingaben {
private int geburtsJahr; //Außerhalb der Klasse nicht verfügbar
public int getGeburtsJahr() {
return geburtsJahr; //Rückgabe der Instanzvariablen
}
public void setGeburtsJahr(int geburtsJahr) {
this.geburtsJahr = geburtsJahr; //Zuweisung der Instanzvariablen
}
}
Zu diesem Zeitpunkt hast du vom ganzen Konstrukt noch keinen Nutzen.
Klar, du kannst jetzt nicht mehr ohne weiteres auf das Geburtsjahr zugreifen.
Stattdessen kannst du über den setter einen Wert festlegen.
Na und – was bringt es?
Indem du die Werteingabe überprüfen lässt, kannst du falsche Nutzereingaben abfangen.
Schritt 3 Füge eine bedingte Zuweisung in die Methode ein
public class NutzerEingaben {
private int geburtsJahr; //Außerhalb der Klasse nicht verfügbar
public int getGeburtsJahr() {
return geburtsJahr; //Rückgabe der Instanzvariablen
}
public void setGeburtsJahr(int geburtsJahr) {
if (geburtsJahr>=1900 && geburtsJahr <=2016){
this.geburtsJahr = geburtsJahr; //Zuweisung der Instanzvariablen
}
else {
System.out.println("Bitte überprüfe deine Eingabe!");
}
}
}
Was ist passiert?
Im Setter wurde eine bedingte Zuweisung implementiert.
Wenn die Benutzereingabe unter einem Wert von 1900 und über 2016 ist, erfolgt eine Fehlermeldung.
Wenn aber das Geburtsjahr zwischen 1900 und 2016 ist, dann wird dieser Wert der Instanzvariablen zugewiesen.
So kannst du zukünftige Falscheingaben sofort abfangen.
Cool oder?
Jetzt kannst du den vorübergehenden Code einmal testen.
Erzeuge innerhalb der main Methode ein Objekt.
Und dann führe die setter Methode einmal am Objekt aus.
Durch die System.println-Anweisung kannst du dir den Rückgabewert der getter-Methode anzeigen lassen.
Und dies wäre der Code:
public class ProgrammStartNutzerEingaben {
public static void main(String[] args) {
NutzerEingaben nutzer = new NutzerEingaben(); //neues Objekt wird angelegt
nutzer.setGeburtsJahr(1899); //Zugriff auf Instanzvariable über den setter
System.out.println(nutzer.getGeburtsJahr()); //Rückgabewert des getters wird angezeigt
}
}
Wenn du dieses Beispiel mit der Zahl 1899 nachvollziehst…..
Erhältst du die Fehlermeldung auf der Konsole
Und du erhältst 0 als Rückgabewert der Instanzvariablen.
Warum null?
Null ist der default Wert einer Integervariablen.
Dies bedeutet, dass der Instanzvariablen kein Wert zugewiesen wurde.
Und genau das wollten wir.
Übergib der Methode jetzt einmal eine Zahl zwischen 1900 und 2016.
Und … was passiert?
Der Wert wurde der Instanzvariablen zugewiesen.
Alles in Ordnung.