Skip to main content

Java Übung Kontrolliere den Zugriff durch Methoden

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.


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. 🙂


Ähnliche Beiträge

So kannst du Werte aus zwei oder mehreren Java Arrays verrechnen.

Java Arrays verrechnen

Wie kann man Werte aus zwei oder mehreren Java Arrays miteinander verrechnen? Zum Beispiel: Du möchtest alle Werte des ersten Arrays mit allen Werten des zweiten Arrays addieren Oder du möchtest die Summe aus beiden Arrays wissen und erst dann diese miteinander addieren. Was erwartet dich in diesem Beitrag? Zuerst werde ich dir zeigen, wie […]

Java Vererbung – Die Hierarchien richtig planen

Java Vererbung Hierarchien

Java Vererbung hat nichts mit Biologie zu tun. Die Genetik besagt, dass bestimmte Merkmalsausprägungen von den Eltern auf die Kinder übergehen. Solche Merkmalsausprägungen sind: die Hautfarbe die Haarfarbe die spezifische Größe und weitere körperliche Merkmale. Und in Java – was ist da Vererbung? Lass es uns herausfinden. Was erwartet dich in diesem Beitrag? Zuerst schauen […]

So legst du Utility Klassen in Java an

Java Utility Klassen

Utility Java Klassen – was ist das? Man nennt diese auch Hilfsklassen von Java. Diese Utility Klassen sind Java Klassen, welche lediglich Methoden und Konstanten anbieten. Am Beispiel: Die Klasse Math ist so eine klassische Utility Klasse. Wozu braucht man solche Klassen? Diese Klassen sind so etwas wie ein Werkzeugkoffer für jedes Java Programm. Hier […]

So richtest du einen Schreibschutz für deine Java Variablen ein

Stell dir vor: Du hast erfolgreich dein erstes Programm für die Personalabteilung aufgesetzt. Du hast deine ersten 1000 Datensätze schön sauber angelegt. Und nun kommt dein Kollege und überschreibt die Vornamen der ersten 100 Mitarbeitern. Na schöne Sch…. 🙂 Wie kann das passieren? Wie kann man das verhindern? Du brauchst eigentlich nur deine Java Variablen […]

Java Konsolenausgaben mit formatierten Zahlen

Java Konsolenausgaben Zahlen

Java Konsolenausgaben erzeugst du mit der System.out.println()-Anweisung. Dies ist relativ einfach. Aber es ist mitunter nicht ganz praktisch. Und zwar immer dann, wenn Zahlen im Spiel sind. Die Zahlen welche dann auf deiner Java Konsole erscheinen, sind unformatiert. Sie haben zu viele Kommastellen. Oder für eine bessere Darstellung benötigst du den Tausenderpunkt. Vielleicht möchtest du […]

So lassen sich aus Java Klassen Instanzen erstellen

Java Klassen Instanzen erstellen

Lass uns jetzt aus den Java Klassen heraus Objekte anlegen. Im Einführungsbeispiel hast du bereits gelernt, wie du: Instanzvariablen bzw. Attribute anlegst Wie du aus einer normalen Java Klasse eine Programmstart Klasse machst In diesem Artikel erfährst du: Was Objekte bzw. Instanzen sind. Wie sich Objekte zusammensetzen. Wo und wie du Instanzen aus Java Klassen […]

Nutze das Java Switch Case Statement für komplexe Verzweigungen

Java Switch case

Java switch case statement – was ist das? Wozu brauchst du das? Lass mich anders beginnen… 🙂 In einen meiner früheren Beiträge habe ich schon einmal über bedingte Anweisungen oder Zuweisungen geschrieben. Diese if und else Konstrukte funktionieren eigentlich ganz gut. Aber was ist, wenn du mehrere Parameter abfangen möchtest. Okay ein Beispiel…

So kannst du Instanzen in Java Klassen zählen

Wie kannst du die Instanzen der Java Klassen zählen? Ganz einfach. Am besten ist es, wir bleiben beim Einführungsbeispiel zu den Java Klassen. Und ich wähle die Klasse „Monster“. Um es einfach zu halten, soll auch der Programmstart durch die Klasse erfolgen. Die Klasse bietet somit eine main-Methode an.