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

Java Vererbung findet auch zwischen Einkaufstüten und Polizeiautos statt

Java Vererbung

„Manchmal findet Java Vererbung auch zwischen Einkaufstüten und Polizeiautos statt“ Irrer Titel, oder? Aber mal Hand aufs Herz. Was haben eigentlich eine Einkaufstüte und ein Polizeiwagen gemeinsam? Ich verrate dir etwas: Du kannst die Verbindung nicht erkennen, denn ich habe dir nicht alles verraten. Es fehlt noch ein wichtiger Aspekt – eine Verbindung zwischen beiden. […]

3 Möglichkeiten um Vererbung von Java Klassen zu verhindern, zu verbieten oder ausschließen

Java Vererbung verhindern

Die ganze Java Vererbung für bestimmte Klassen ausschließen bzw. verhindern oder verbieten. Was soll das? Für bestimmte Java Klassen soll die Vererbung ausgeschlossen werden. Es soll also verhindert werden, dass Elternklassen – Kindklassen bekommen können. Klingt ein bisschen wie Verhütung, oder? Denn wie auch im echten Leben, können Kinder zu kleinen Tyrannen werden. Sie bedienen […]

Java Objekte leben auf dem Heap

Java-Objekte-Heap

Java hat eine interne Speicherverwaltung. Eigentlich ist es nicht nur eine. Es sind mehrere.   Uns interessieren nur zwei. Methoden und lokale Variablen werden auf dem Stack verwaltet. Und die Speicherverwaltung für Java Objekte und den Instanzvariablen findet auf dem Heap statt.   Ja wieso braucht Java eigentlich zwei Speichersysteme?   Es ist ganz einfach. […]

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.

Ende vom Java Blog?

Falls du hier schon länger dabei bist, wird dir aufgefallen sein – dass kaum noch Beiträge veröffentlicht werden. Das tut mir wirklich leid und dafür möchte ich mich auch entschuldigen. Ich weiß, dass Einige unter Euch den Java-Blog wirklich lieben. Aber es ist verdammt schwierig so ein aufwendiges Thema – stilvoll, unterhaltend und methodisch umzusetzen. […]

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.

So kannst du deine Java Methoden ausführen

Java Methoden ausführen

Du hast die ersten Java Methoden erstellt. Doch wie greifst du jetzt auf diese zu? Wie kannst du diese Methoden in einer anderen Klassen aufrufen? Welcher Unterschied, hinsichtlich des Methodenaufrufes, besteht eigentlich zwischen deinen Java Methoden? Diese Fragen möchte ich gern in diesem Beitrag beantworten. Gehen wir dazu in den Garten und schauen uns Blumen […]

So kannst du Java Konstruktoren anlegen und überladen

Java Konstruktoren

Der Name sagt es schon. Java Konstruktoren konstruieren oder bauen Java Objekte. Und diese Objekte baut der Konstruktor auf Vorlage der entsprechenden Java Klasse. In diesem Beitrag zeige ich dir natürlich verschiedene Ansätze wie du den Konstruktor einsetzt. Ich zeige dir dies Schritt für Schritt. Dabei zeige ich dir auch verschiedene Dinge, welche nicht funktionieren. […]

Lexikalik, Syntax und Semantik in Programmiersprachen

Programmiersprachen Semantik Programmiersprachen Syntax Programmiersprachen Lexikalik Java

Java ist eine Programmiersprache. Und wie jede andere Programmiersprache ist auch Java, lediglich eine künstliche Sprache.   Normalerweise bieten künstliche Projekte immer jede Menge Spielraum für Eigenkreationen. Bei der Programmierung ist dies nicht ganz so. Denn Programmiersprachen sind auch immer sehr exakt.   Jede Programmiersprache und auch jede gesprochene Sprache folgt immer einer Abstraktionsreihenfolge, welche […]