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

Der bedeutende Unterschied zwischen Klassenvariablen und Instanzvariablen

Java Klassenvariablen

Bei der Java Programmierung unterscheidet man drei Arten von Variablen. Als erste Gruppe sind die lokalen Variablen zu nennen. Auf diese gehe ich in einem separaten Artikel ein. Mich interessieren die zwei anderen Variablentypen. Zum einen existieren Klassenvariablen. Und dann sind da noch die Instanzvariablen. Wo liegt der Unterschied? Instanzvariablen stehen einem Objekt zur Verfügung. […]

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. […]

Der Java Datentyp boolean im Interview

Java boolean

Nein, ich bin nicht verrückt. Aber… Neulich traf ich zufällig den Java Datentyp boolean. 🙂 Er erklärte sich bereit, mir ein Interview zu geben. In diesem Interview geht es um die Werte, welcher dieser Wertetyp annehmen kann. Und in diesem Zusammenhang geht es auch um Logik. Also lassen wir uns doch die Logik vom direkten […]

Java Übung 26 – Das erste kleine Java Spiel

Java Übung Zahlenraten

In dieser Java Übung geht es darum ein kleines Java-Spiel zu erstellen. Und zwar Zahlen raten. Was kannst du dir darunter vorstellen? Du gibst einen bestimmten Wertebereich an. Zum Beispiel 0 bis 100. Und das Java Programm erstellt eine Zufallszahl in diesem Bereich. Dann fordert dich das Programm auf, die Zahl zu raten. Du gibst […]

Die sechs Bestandteile von Java Methoden

Java Methoden Bestandteile

Java Methoden hauchen deinem Java Programm Leben ein. Ohne eine Methode würde deine Java Klasse ein starres Konstrukt sein. Deine Objekte hätten Eigenschaften. Aber sie könnten nichts machen. Und das wäre eine trostlose Welt. Java Methoden sorgen also dafür, dass Objekte interagieren. Methoden bestehen aus bestimmten Bausteinen. Und diese Bausteine bestimmen, was die Methode darf […]

Die mathematischen Grundlagen des Dezimalsystems für Java Programmierer

Java Dezimalsystem Mathematik Programmierer

Bei der Java Programmierung benötigst du Kenntnisse über das Dezimalsystem. Allein schon für die technische Umsetzung beim Runden einer Zahl. Oder du möchtest den Kehrwert bzw. den Umkehrwert einer Zahl im Programm bestimmen lassen. Aber auch für das Herausfinden des Stellenwertes – also wieviel Stellen hat eine Zahl – benötigst du das Grundwissen des Dezimalsystems. […]

Java Methoden mit variabler Argumentenanzahl – VarArgs

Java Methoden mit variabler Argumentenanzahl VarArgs

Du kennst das noch. Kopfrechnen und zwar auf Zeit. So etwas ist das Standardprogramm in den Schulklassen 1 bis 5. Irgendwann, in Klasse 6 oder 7, kommt der Taschenrechner ins Spiel und Kopfrechnen ist aus dem Schulalltag gestrichen. Schade eigentlich. Dabei kann man diese Disziplin auch wunderbar in kleinen Spielen unterbringen. Ich erinnere mich noch: […]

3 Möglichkeiten – Java Strings verketten und zusammenfügen

Java Strings verketten

Kennst du dieses Relikt längst vergangener Tage? Ein Brief. Ja früher einmal war es üblich, Briefe zu schreiben. Lange bevor es Smartphones oder Email gab. Man stelle sich einmal vor…. Die Leute mussten sich hinsetzen mit einem Blatt und einem Stift – und richtig schreiben. Nein nicht tippen – schreiben. 🙂 Grausame Welt, oder? Aber […]

Das Instanzieren von Java Klassen verhindern

Java Objekte Instanzieren verhindern

Die Instanzierung von Java Klassen verhindern. Was heißt das? Instanzen sind die Objekte einer Java Klasse. Und Instanzieren oder Instanzierung heißt nichts anderes, als Objekterstellung. Aber was soll das? Oder mal anders gefragt: Wieso sollte man verhindern, dass eine Java Klasse – Objekte erstellen kann? Schließlich sind doch Objekte der Sinn und Zweck jeder objektorientierten […]

Java Polymorphie – besserer Code und mehr Möglichkeiten

Java Polymorphie Vorteile

Polymorphie ist das Herzstück jeder objektorientierten Sprache. Nicht nur in Java – auch in Python, Javascript und in anderen Sprachen. Aber was bedeutet Polymorphie eigentlich? Polymorphie oder auch Polymorphismus genannt, kommt aus dem Griechischen. Es bedeutet Vielgestaltigkeit. Etwas freier übersetzt, kannst du es auch als Facettenreichtum bezeichnen. Im Grunde genommen zielt die ganze Java Vererbung […]