Informatik-Lexikon

Methoden

Allgemeines

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

Sondierende Methoden (Observer-Methoden)

Das sind Methoden, die eine Information über den Zustand eines Objektes liefern, indem sie bestimmte Attributwerte zurückgeben.

Beispiel

Die folgende Methode

public int xPos()
{
   return x;
}

liefert die X-Position eines Objektes zurück, zum Beispiel eines Kreises, der sich in einem Java-Applet bewegt. Dies ist ein Beispiel für eine Methode, die ich persönlich gern als "Mantelmethode" bezeichne. Denn es wird ja eigentlich nur der Wert eines bestimmten Attributes zurückgeliefert. Wegen der Datenkapselung ist aber ein direkter Zugriff auf einzelne Attribute nicht erlaubt, und daher muss man für jedes Attribut, das eventuell später mal ausgewertet werden soll, eine solche Methode als "Mantel" schreiben.

Betrachten Sie nun folgende Methode

public boolean ausserhalb()
{
   return ((x < 0) || (x > 500))
}

Die Methode überprüft, ob sich die X-Koordinate des Objektes außerhalb der Grenzen eines 500 Pixel breiten Applets befindet. Wenn ja, so wird der Wert TRUE zurückgeliefert. Diese Methode liefert nicht den Wert eines Attributes zurück, ist aber trotzdem eine sondierende Methode, weil die Attributwerte von der Methode nicht verändert werden und weil die Attributwerte ausgewertet werden.

Verändernde Methoden (Manipulierende Methoden, Mutator-Methoden)

Hierunter versteht man Methoden, die die Attributwerte eines Objektes verändern. Es macht hier wenig Sinn, die verändernden Methoden noch weiter zu unterteilen, z.B. in Methoden, die genau einen Attributwert verändern und Methoden, die mehrere Attributwerte verändern, oder in Methoden, die keine Parameter benötigen und Methoden, die einen oder mehrere Parameter benötigen. Betrachten wir einfach noch ein paar Beispiele:

public void nachRechts()
{
   if (xpos < 450)
      xpos += 50;
}

Diese Methode versetzt ein Objekt um 50 Pixel nach rechts, falls noch Platz dafür ist. Einen Parameter benötigt diese verändernde Methode nicht.

public void nachRechts(int dist)
{
   if (xpos < 500-dist)
      xpos += dist;
}

Diese Methode versetzt ein Objekt um eine bestimmte Zahl von Pixeln nach rechts, die dann als Parameter übergeben werden muss. Diese Methode ist wesentlich flexibler als die vorherige Methode, allerdings muss man beim Aufruf der Methode dann auch die Pixelzahl übergeben.

Gemischte Methoden

Wozu gehört folgende Methode:

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

Verändert wird nichts, und sondiert wird auch nichts. Die Methode zeigt die Werte von zwei Attributen in der Konsole an. Daher würde man diese Methode eher bei den sondierenden Methoden einordnen als bei den verändernden. Ich habe es mir angewöhnt, solche Methoden als "anzeigende Methoden" zu bezeichnen.

Die folgende Methode

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

ist eine verändernde Methode mit sondierender Kontrollfunktion, also eine echte Mischform. Das Attribut xpos wird verändert, und gleichzeitig wird ein TRUE zurückgeliefert, wenn xpos verändert wurde, 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.

Signatur

Typisch für eine Methode ist die sogenannte Signatur oder Schnittstelle. Darunter versteht man die genaue Art und Weise, mit der die Methode aufgerufen wird.

Beispiel

Betrachten wir uns die folgende Methode:

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

Die Signatur der Methode ist die oberste Zeile, früher sagte man auch "der Kopf der Funktion" oder der "Funktionskopf". Viele Informatiker bezeichnen die oberste Zeile auch als "Interface" oder auf Deutsch "Oberfläche" oder "Schnittstelle".

Signatur, Schnittstelle, Interface oder Funktionskopf der Methode idealgewicht:

public double idealgewicht(int)

Diese Signatur liefert uns folgende Informationen:

  1. Diese Methode ist eine öffentliche Methode (zu erkennen am Schlüsselwort "public").
  2. Diese Methode liefert beim Aufruf einen konkreten Wert zurück (zu erkennen am Datentyp "double" vor dem Methodenbezeichner).
  3. Diese Methode hat den Namen "idealgewicht"
  4. Diese Methode erwartet beim Aufruf einen Parameter vom Typ int

Ein Aufruf wie z.B.

ideal = idealgewicht("green");

wäre also falsch, weil hier ein String-Parameter übergeben wird und kein int-Parameter.

Der Aufruf

ideal = idealGewicht(180);

wäre ebenfalls falsch, weil der Methodenbezeichner "idealgewicht" heißt und nicht "idealGewicht".

Und der Aufruf

idealgewicht(180);

wäre ebenfalls fehlerhaft, weil die Methode einen Wert zurückliefert, und dieser Wert muss natürlich auch irgendwie ausgewertet werden.

Der Aufruf

ideal = idealgewicht(180);

ist dagegen korrekt, ebenso der Aufruf

if (gewicht > idealgewicht(180)) System.out.println("Sie sind zu dick!");

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. Er unterliegt der Datenkapselung, es geht also niemandem was an, wie man eine Methode implementiert hat, solange sie wirklich fehlerfrei arbeitet und genau das leistet, was in der Dokumentation versprochen wurde.





IMPRESSUM