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 lassen sich Java Arrays kopieren

Java Arrays kopieren

Java Arrays kopieren oder klonen…. Was heißt das eigentlich? Eine Kopie ist eine Reproduktion bzw. die Nachbildung eines Originals. Somit ist jede Fotographie – die Abbildung einer bestimmten optischen Wirklichkeit, zu einem festen Zeitpunkt. Die Kopie einer Buchseite ist das optische Abbild dieser spezifischen Buchseite – auch zu einem festen Zeitpunkt. Wichtig in diesem Zusammenhang […]

Java Übung 19 – Zähle die Kommastellen

Java Übung Kommastellen Zählen

In dieser Java Übung möchte ich, dass du eine Methode zum Zählen von Kommastellen schreibst. Lege dazu eine Klasse „KommaZahl“ an. Diese Klasse enthält die statische Methode „zaehleKommaStellen“, welche eine Kommazahl als übergebenen Parameter erwartet.

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

Du musst in Java nicht jede Exception fangen

Java Exception fangen

Kennst du die Metapher mit dem Jongleur und den Bällen? Ein Jongleur hält drei Bälle in der Luft, dann vier und irgendwann fünf. Aber irgendwann ist es genau ein Ball zu viel. Und Alles bricht zusammen. Ja ein Ball zu viel, kann alles versauen. 🙂 Und so ist es doch immer im Leben. Du kannst […]

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 verwendest du in Java try und catch Blöcke

Java try und catch

Ich bereue lieber die Dinge, die ich getan habe – als die Dinge, welche ich gar nicht erst versucht habe. Ja ich würde mich als den typischen „try-and-error-Menschen“ bezeichnen. Was ich will, probiere ich einfach aus und schaue dann erst was passiert. So etwas wie Pläne kenne ich eigentlich nicht. Und wenn ich mal einen […]

So organisierst und verwaltest du ganz bequem deine Java Projekte

Du kennst das auch. Denn du bist ja fleißig. Und weil du so fleißig bist, hast du mitunter auch mehrere Java Projekte gleichzeitig laufen. Und dann kommt es vor, dass du enorm viele Java Projekte am Laufen hast. Und dein Package-Explorer wird extrem unübersichtlich. In diesem Beitrag möchte ich dir zwei Varianten vorstellen, wie du […]

So einfach lassen sich Java Strings umkehren

Java Strings umkehren

Kennst du noch das Lied „ANNA“ von Freundeskreis? Da hieß es: Du bist von hinten, wie von vorne A-N-N-A. Solche Namen oder Wörter, welche von hinten nach vorne gelesen – die gleiche Bedeutung haben, nennt man Palindrome. Anna, Ehe oder Ebbe sind recht kurze Palindrome. Aber auch längere zusammengesetzte Palindrome kennt die deutsche Sprache: Regallager […]