Skip to content

4.5 Methoden in eigenen Klassen

Bisher haben wir nur zwei Arten von Methoden selbst programmiert, nämlich, nämlich Konstruktoren und Aufträge ohne Parameter. Es gibt aber noch viele weitere Arten von Methoden, wie die folgende Übersicht zeigt.

Methoden sind dabei immer nach dem gleichen Muster aufgebaut: Zu Beginn steht der Sichtbarkeitsmodifizierer, gefolgt von dem Rückgabetyp. Daran schließt sich der Methodenname an. Abgeschlossen wird eine Methode von runden Klammern, in denen Parameter stehen können.

Einzige Ausnahme ist der Konstruktor: Er hat keinen Rückgabetyp, so dass nach dem Sichtbarkeitsmodifizierer direkt der Methodenname kommt.

sichtbarkeitsmodifizierer rückgabetyp methodenname ( parameter )

Methode ohne Rückgabe: Auftrag

Bei Aufträgen gibt es keine Rückgabe. Daher folgt nach dem Sichtbarkeitsmodifizierer das Schlüsselwort void. Im UML-Diagramm kann die Rückgabe je nach Belieben weggelassen oder dazugeschrieben werden.

ohne Parameter

UML-Diagramm (beides möglich):
+ wuerfleAlleWuerfel()
+ wuerfleAlleWuerfel() : void

Java-Code:

    public void wuerfleAlleWuerfel() {
	for(int i = 0; i < wuerfel.length; i++) {
		wuerfel[i].wuerfle();
	}
}   
        
mit Parameter

UML-Diagramm (beides möglich):
+ wuerfleEinenWuerfel(pNr : int)
+ wuerfleEinenWuerfel(pNr : int) : void

Java-Code:

    public void wuerfleEinenWuerfel(int pNr) {
	wuerfel[pNr].wuerfle();
}   
        

Methode mit Rückgabe: Anfrage

Bei Anfragen wird nach dem Sichtbarkeitsmodifzierer angegeben, welchen Datentypen der Wert hat, der zurückgegeben wird, also z.B. int, boolean, double. In der Methode wird dann das Schlüsselwort return genutzt, um einen Wert zurückzugeben. Häufig wird in der Methode eine Variable genutzt, deren Wert im Verlauf berechnet und dann zurückgegeben wird.

ohne Parameter

UML-Diagramm:
+ gibSumme() : int

Java-Code:

    public int gibSumme() {
	int summe = 0;
	// ...
	return summe;
}   
        
mit Parameter

UML-Diagramm:
+ wurdeGeworfen(pAugenzahl : int) : boolean

Java-Code:

    public boolean wurdeGeworfen(int pAugenzahl) {
	boolean geworfen = false;
	// ...
	return geworfen;
}   
        

Kommunikation zwischen Objekten mit Methoden

Sobald man mehrere Klassen verwendet, benötigt man Methoden auch für die Kommunikation zwischen den Objekten. Das folgende UML-Diagramm zeigt die Beziehungen zwischen der Klasse Wuerfelsimulation und der Klasse Wuerfel. Der Pfeil zeigt, dass die Klasse Wuerfelsimulation ein Array von Objekten der Klasse Wuerfel mit dem Namen wuerfel hat.

wuerfelsimulation_ohne_getter

Wenn nun die Methode wuerfelAlleWuerfel eines Wuerfelsimualtion-Objekts aufgerufen wird, muss das Würfel-Array durchlaufen und für jeden Würfel die Methode wuerfleMich aufgerufen werden. Da die Methode wuerfleMich öffentlich (public) ist, kann sie aus Methoden der Klasse Wuerfelsimulation heraus aufgerufen werden.

Bei den anderen Methoden gibt es allerdings ein Problem. Wenn beispielsweise für die Methode gibSumme die Augenzahl der Würfel benötigt wird, scheitert dies daran, dass das Attribut augenzahl dem Geheimnisprinzip folgend als private deklariert wurde. Aus der Klasse Wuerfelsimulation heraus besteht hierauf kein Zugriff.

wuerfelsimulation_mit_getter

Daher ist eine zusätzliche Methode gibAugenzahl in der Klasse Wuerfel nötig. Mit dieser Methode kann der Wert der Variablen augenzahl abgefragt werden. Diese Methode ist speziell dem Attribut augenzahl zugeordnet und wird auch Getter genannt. Ebenso gibt es Setter, mit denen der Wert eines Attributs von außen gesetzt werden kann.

    public int gibAugenzahl() {
	return augenzahl;
}   
            
                    
        

Da in dem Projekt Würfelsimulation nur ein Getter für das Attribut augenzahl benötigt wird, werden Getter und Setter noch einmal zu einem späteren Zeitpunkt aufgegriffen.

Aufgabe

Öffne das Projekt Würfelsimulation erneut. Implementiere zuerst den Getter zum Attribut augenzahl.

Füge dann in der Klasse Wuerfelsimulation die fehlenden Methoden aus dem obigen UML-Diagramm hinzu, und zwar in der folgenden Reihenfolge:

  • gibSumme
  • gibHoechstesErgebnis
  • wurdeGeworfen
  • gibAnzahlWuerfel

Du kannst dich an den nebenstehenden Struktogrammen orientieren.