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

Nutze die richtigen Methoden zum Java Lernen

Java lernen Methoden

Ich lernte die Java Programmierung auf die klassische Art. Ich kaufte mir das erste Buch und los ging es. „Jetzt wirst du Java lernen“ – sagte ich zu mir. Ich war relativ schnell ziemlich frustriert, denn irgendwie fehlten mir ein paar Zusammenhänge. Kennst du das? Du hast ein Wissensfetzen und noch einen. Aber das Wichtigste. […]

Eine Java Konsoleneingabe machst du über den Scanner

Es wird Zeit für die erste Java Konsoleneingabe. Und diese Eingaben machst du über den Java Scanner. Was ist das? Der Scanner ist eine vorgefertigte Java Klasse, welche Java mit seiner API anbietet. Das heißt du musst nichts selbst erschaffen. Du musst nur wissen, wie du darauf zugreifst. Erst einmal musst du einen Scanner anlegen. […]

Java for Schleifen schachteln – So funktioniert es

Java For Schleifen schachteln

Diese Situation kennst du doch auch…. Du stehst an der Haltestelle und wartest auf den Bus. Dein Blick fällt auf die Uhr.   Oder du wartest an der Ecke auf deinen Freund oder Kollegen. Immer wieder schaust du auf deine Uhr.   Sie ist kaum noch wegzudenken. Die mobile Taschenuhr.   Lange Zeit wurde die […]

So lassen sich Java Strings in char zerlegen

Java Strings zerlegen char

Java Strings sind Zeichenketten. Und diese Zeichenketten lassen sich aufsplitten und in ihre Einzelteile zerlegen. Ich möchte dir in diesem Beitrag Möglichkeiten vorstellen, wie du Strings in Character-Datentypen zerlegen, extrahieren und die Einzelteile in Arrays speichern kannst.

So kannst du in drei einfachen Schritten Java Arrays dynamisch vergrößern

Java Arrays vergrößern

Es ist der 31.März 1727. Es ist ein Montag. Die Welt nimmt Abschied von einem sehr bedeutenden Weltveränderer. Seine Sichtweisen beeinflussen, heute noch, die Forschung und Entwicklung im Bereichen der Physik und Chemie. Ja selbst unser aller Leben – unsere Sicht auf die alltäglichen Dinge – wurden durch seine Denkstöße revolutioniert. Dieser große Vorreiter starb […]