Helmichs Informatik-Lexikon

Methoden

Allgemeines

Objekte können Eigenschaften (Daten) und Verhaltensweisen (Operationen, Dienste) besitzen. Die Eigenschaften werden auch als Attribute bezeichnet, die Verhaltensweisen als Methoden. Mit Hilfe der Methoden kann man bestimmte Attribute der Objekte verändern, z.B. die Farbe eines Circle-Objektes. Solche Methoden werden als "verändernde" Methoden oder "manipulierende" Methoden bezeichnet. Andere Methoden dienen ausschließlich zum "Nachschauen", welchen Wert ein bestimmtes Attribut hat. Diese Methoden bezeichnet man dann als "sondierende" Methoden. Sie verhalten sich nämlich wie kleine Sonden, die man in ein Objekt hin einsticht.

Kohäsion = Konzentration auf die eigentliche Aufgabe

Allgemein gilt für das Entwerfen einer Methode, dass sie nur die ihr zugeordnete Aufgabe erledigen und keine "Nebendinge" betreiben soll. Dieses Prinzip wird auch als Kohäsion von Methoden bezeichnet. Eine Methode wie setColor() sollte nur die Farbe eines Objektes verändern und nicht gleichzeitig den Durchmesser oder eine andere Eigenschaft, und die Methode setDiameter() sollte nur den Durchmesser des Objektes aktualisieren, nicht aber die Farbe oder die Position.

Sondierende und manipulierende Methoden
Sondierende bzw. Observer-Methoden

Das sind Methoden, die eine Information über den Zustand oder Status eines Objektes liefern, indem sie bestimmte Attributwerte zurückgeben. Man unterscheidet zischen get-Methoden und anderen sondierenden Methoden. Einzelheiten dazu siehe Lernbaustein "sondierende Methoden".

Manipulierende bzw. Mutator-Methoden

Hierunter versteht man Methoden, die die Attributwerte eines Objektes verändern.

Auch hier unterteilt man in zwei grundlegende Typen von manipulierenden Methoden, die set-Methoden und die "anderen" manipulierenden Methoden. Einzelheiten hierzu siehe Lernbaustein "manipulierende Methoden".

Gemischte Methoden

Wozu gehört folgende Methode ?

public void anzeigen()
{
   System.out.println("Position = "+x+" / "+y);
}

Verändert wird nichts, also um eine manipulierende Methode handelt es sich offensichtlich nicht.

Es wird zwar sondiert, nämlich der Wert von zwei Attributen, aber es wird kein Ergebnis nach außen zurück geliefert. Daher ist diese Methode auch keine sondierende Methode.

Die Methode zeigt die Werte von zwei Attributen in der Konsole an. Man könnte solche Methoden als "anzeigende Methoden" oder "show-Methoden" bezeichnen.

Die folgende Methode

public boolean nachRechts(int dist)
{
   if (xpos < 500-dist)
   {
      xpos += dist;
      return true;
   }
   else
      return false;
}

ist eine manipulierende Methode mit sondierender Kontrollfunktion, also eine echte Mischform. Das Attribut xpos wird verändert, und gleichzeitig wird ein true zurückgeliefert, wenn die Veränderung von xpos erfolgreich war, andernfalls ein false. Solche Mischformen sind in der Programmierung bisher durchaus üblich gewesen, vor allem in der C++ - Programmierung, wo viele Funktionen, die Werte verändern, zur Kontrolle ein true oder false zurückliefern. In Java sollte man solche Mischformen jedoch vermeiden.

Signatur

Typisch für eine Methode ist die sogenannte Signatur oder Schnittstelle. Darunter versteht man die erste Zeile der Methoden-Definition, die "Kopfzeile".

public double idealgewicht(int kg)
{
   return (kg - 100)*0.9;
}

Viele Informatiker bezeichnen die oberste Zeile auch als Interface oder Schnittstelle.

Dokumentation von Methoden

Bei der Dokumentation einer Methode reicht es völlig aus, die Signatur der Methode anzugeben und ggf. zu erläutern. Die Implementation der Methode (also der Teil zwischen den beiden geschweiften Klammern) wird bei der Dokumentation nicht berücksichtigt. Sie unterliegt der Datenkapselung, es geht also niemandem was an, wie man eine Methode implementiert hat, solange sie fehlerfrei arbeitet und genau das leistet, was in der Dokumentation versprochen wurde.

Statische und abstrakte Methoden

Statische Methoden

Durch das Schlüsselwort static kann man eine normale Methode zu einer statischen Methode machen. Statische Methoden einer Klasse X können von anderen Klassen aufgerufen werden, ohne dass zuvor Objekte x von X angelegt werden müssen. Ein bekanntes Beispiel für eine Klasse mit statischen Methoden ist die Klasse Math. Methoden der Klasse Math können einfach durch Nennung des Klassennamens, gefolgt vom Methodennamen, aufgerufen werden:

int i = Math.round(x/y);

Einzelheiten zum Thema statische Methoden siehe den entsprechenden Eintrag im Lexikon.

Abstrakte Methoden

Klassen sind normalerweise Baupläne für Objekte. Es gibt aber auch Klassen, die Baupläne von Tochterklassen sind (Vererbung). Von diesen abstrakten Klassen kann man keine Objekte erzeugen, aber man kann mittels Vererbung Tochterklassen von den abstrakten Klassen erzeugen, und von diesen Tochterklassen kann man wiederum Objekte bilden.

Abstrakte Klassen stellen abstrakte Methoden zur Verfügung. Diese abstrakten Methoden werden aber nicht implementiert, sondern nur "genannt". Die Tochterklassen sind dann gezwungen, die abstrakten Methoden zu überschreiben, also selbst zu implementieren. Weitere Einzelheiten siehe "abstrakte Methoden" im Lexikon.

Interfaces

Unter diesem Begriff versteht man spezielle Java-Klassen, die ausschließlich abstrakte Methoden zur Verfügung stellen. In einem Interface müssen diese Methoden jedoch nicht als "abstract" gekennzeichnet werden, weil grundsätzlich jede Methode des Interfaces abstrakt ist. Ein bekanntes Beispiel ist das Interface ActionListener, das die abstrakte Methode actionPerformed() vorschreibt.