Home > Informatik > Stufe EF > Lernbausteine

get- und set-Methoden

Bei den Methoden einer Klasse unterscheidet man bekanntlich zwischen sondierenden und manipulierenden Methoden.

Sondierende Methoden liefern immer einen Wert zurück. Dieser Wert ist oft ein primitiver Datentyp wie int, double oder boolean, oft aber auch eine komplexere Datenstruktur. So könnte eine Methode zum Sortieren von Zahlen beispielsweise einen kompletten int-Array zurückliefern. Eine solche Methode würde man auch noch als "sondierende Methode" bezeichnen müssen.

get-Methoden

Es gibt nun aber eine Klasse von sondierenden Methoden, die tatsächlich nichts anderes tun, als den Wert eines Attributes zurück zu liefern. Solche Methoden nennt man dann get-Methoden. Hier ein Beispiel:

public int getGewicht()
{
   return gewicht;
}

Im Grunde besteht eine solche Methode nur aus einer einzigen "richtigen" Zeile, nämlich dem return-Befehl, gefolgt von dem Attribut, dessen Wert ermittelt werden soll.

Der Sinn solcher get-Methoden mag sich manchem Menschen nicht erschließen. Man hätte in diesem Beispiel das Attribut gewicht doch einfach als public deklarieren können, dann wäre diese get-Methode überhaupt nicht nötig gewesen. Auf public-Attribute kann jederzeit von außerhalb der Klasse mit Hilfe des Punkt-Operators zugegriffen werden, und zwar sowohl lesend wie auch schreibend.

Angenommen, die Klasse Frucht modelliert Früchte, und banane ist ein Objekt dieser Klasse. Dann könnte eine andere Klasse folgendermaßen das Gewicht einer Banane durch direkten Zugriff auf das Attribut gewicht ermitteln:

double g = banane.gewicht;

Hätte man das Attribut gewicht aber als private deklariert, so wie es das Prinzip der Datenkapselung verlangt, dann könnte man nur mit Hilfe einer get-Methode auf dieses Attribut zugreifen:

double g = banane.getGewicht();

Eine Methode, wie wir sie in Folge 3 kennen gelernt haben, liefert das Idealgewicht eines Menschen zurück:

public getIdealgewicht()
{
   if (geschlecht=='m')
      return (groesse-100)*0.9;
   else
      return (groesse-100)*0.85;
}

Diese Methode beginnt zwar mit dem Präfix "get", ist aber strenggenommen keine get-Methode. Es wird ja nicht der Wert eines bestimmten Attributes zurück geliefert, sondern aus den Attributwerten wird ein völlig neuer Wert berechnet und dann zurück geliefert. Es handelt sich um eine normale sondierende Methode, aber nicht um eine get-Methode.

Allerdings ist da die Wikipedia anderer Meinung:

"Die Eigenschaft kann entweder direkt aus einem Objektattribut entnommen, das dann normalerweise eine geringere Sichtbarkeit hat, oder im Moment des Aufrufs berechnet werden.[1]"

Nun ist die Wikipedia nicht in allen Dingen hundertprozentig zuverlässig, daher sollte man auch mal gelegentlich in ein gedrucktes Fachbuch schauen, obwohl die auch nicht immer fehlerfrei sind.

"Oftmals werden ... alle Attribute einer Klasse als private deklariert. Der Zugriff darauf findet dann nur über sogenannte Getter und Setter statt, also Methoden, die ein Attribut zurückgeben beziehungsweise verändern.[2]"
set-Methoden

Diesen Abschnitt können wir recht kurz gestalten. Set-Methoden sind das Gegenteil von get-Methoden, es sind manipulierende Methoden, die einen bestimmten Attributwert verändern:

public void setGewicht(int gew)
{
   gewicht = gew;

}

Dies ist der einfachste Fall einer set-Methode; die Methode setGewicht() überschreibt lediglich den Attributwert von gewicht und macht sonst nichts.

public void setGeschlecht(char geschl)
{
   if ((geschl=='m') || (geschl=='w') || (geschl=='d'))
      geschlecht = geschl
}

Diese set-Methode überprüft zunächst, ob der als Parameter übergebene Wert ein zulässiges Geschlecht ist. Andernfalls wird das Attribut geschlecht nicht verändert.

public void setWerte(int x, int y, Color c)
{
   xPos = x;
   yPos = y;
   farbe = c;
}

Die Methode setWerte() ist zwar eindeutig eine manipulierende Methode, aber trotz des Präfixes "set" keine set-Methode, zumindest nicht im strengen Sinne. Es werden gleichzeitig drei Attributwerte verändert.

Quellen:

  1. Wikipedia, Artikel "Zugriffsfunktion", aufgerufen am 14.08.2019
  2. Fischbeck, Boockmeyer, Neubert: Fit fürs Studium Informatik, Bonn 2017