Methode (Programmierung)

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Die Seiten Unterprogramm, Methode (Programmierung), Routine (Programmierung), Funktion (Programmierung) und Prozedur (Programmierung) überschneiden sich thematisch. Hilf mit, die Artikel besser voneinander abzugrenzen oder zusammenzuführen (→ Anleitung). Beteilige dich dazu an der betreffenden Redundanzdiskussion. Bitte entferne diesen Baustein erst nach vollständiger Abarbeitung der Redundanz und vergiss nicht, den betreffenden Eintrag auf der Redundanzdiskussionsseite mit {{Erledigt|1=~~~~}} zu markieren. Trustable (Diskussion) 15:36, 25. Mär. 2014 (CET)

Methoden (englisch method oder member function) sind in der objektorientierten Programmierung Unterprogramme (Funktionen, Prozeduren), die das Verhalten von Objekten beschreiben und implementieren. Über die Methoden des Objekts können andere Objekte mit diesem Objekt in Verbindung treten.

Einordnung[Bearbeiten]

Das Kernstück jeder objektorientierten Überlegung bildet das Objekt. Allgemein kann man sagen, dass Objekte Attribute und Methoden enthalten. Dabei sind Attribute nur Variablen und Konstanten, die Werte aufnehmen können, und beschreiben damit das statische Wesen des Objektes. Im Gegensatz dazu gibt es die „Methoden“ die das gesamte dynamische Verhalten des Objektes oder einer Klasse charakterisieren; sie enthalten die „algorithmische Essenz“ des Objektes.

Methodenaufruf[Bearbeiten]

In der Methodendefintion werden ein oder mehrere formale Parameter festgelegt, mit denen die Methode aufgerufen werden kann. Der formale Parameter ist der Name einer Variablen und wird auch Übergabewert genannt. In vielen Programmiersprachen ist zusätzlich die Deklaration des Typs dieser Variablen nötig. Die Methode wird ausgeführt, wenn sie über den Methodennamen und einen passenden Parameter (tatsächlicher Parameter) angesprochen wird. Die Anweisungen im Methodenrumpf werden dann mit diesem Übergabewert berechnet. Diese Anweisungen werden von oben nach unten und von links nach rechts ausgeführt.

Funktionen und Prozeduren[Bearbeiten]

In vielen Programmiersprachen werden Funktionen und Prozeduren syntaktisch durch eigene Schlüsselwörter unterschieden. Das ist z.B. in Java nicht üblich, alle Methoden verwenden die gleiche Syntax.

Vergleich am Beispiel[Bearbeiten]

Die Tabelle zeigt die Definition von Methoden am Beispiel der Programmiersprachen Pascal und Java.

Pascal Java Bemerkung
Prozedur
procedure kopieren(eingabe:Integer);
begin
  ...
end;
public void kopieren(int eingabe){
  ...
}
  • Möglichkeit der „Eingabe“
  • kein Ergebnistyp im eigentlichen Sinn
  • fehlende Rückgabe durch Pseudo-Datentyp void (engl. ‚leer‘, ‚unbesetzt‘[1]) gekennzeichnet
Funktion
function rechnen(eingabe:Integer): String;
begin
  ...
  Result := ...;
end;
public String rechnen(int eingabe){
  ...
  return ...;
}
  • Möglichkeit der „Eingabe“
  • die Fixierung des Datentyps
  • Rückgabe oft durch ein return gekennzeichnet

Bei Pascal erkennt man sofort den Unterschied beider Konstrukte durch die unterschiedliche Syntax von procedure und function. Dieser Unterschied ist bei den Beispielen aus Java nicht mehr ohne Weiteres zu sehen. Das Hauptmerkmal bei Java ist der Pseudo-Datentyp void.

Synthese[Bearbeiten]

Das Funktionsprinzip versteht sich in der Programmierung analog zur Mathematik. Man übergibt ihr etwas, und sie rechnet etwas aus. Eine Prozedur ist hingegen ein Konstrukt, das es erlaubt, eine bestimmte Aufgabe in wiederverwendbarer Art umzusetzen; das heißt, sie berechnet kein Ergebnis, sondern führt vielmehr eine Aktion aus.

Wir stellen fest, dass bei beiden die Möglichkeit einer „Eingabe“ (bzw. Übergabe) von einem oder mehreren Objekten (=Prozedur) bzw. Argumenten (=Funktion) möglich ist. Den allgemeinen syntaktischen Regeln folgend, muss Anzahl und Typ der Argumente (sog. tatsächliche Parameter) natürlich exakt mit den vordefinierten Werten (sog. formale Parameter) übereinstimmen (siehe: Parameter in der Informatik). Weiterhin liefern beide ein (und nur genau ein) „Ergebnis“, im umgangssprachlichen Sinn, wenn auch unterschiedlicher Art.

Wenn man beide Konstrukte nun einmal genauer vor dem Hintergrund der Objektorientierung vergleicht, kommt man zu dem Schluss, dass die Unterschiede so gering sind, dass man auch einfach sagen könnte, eine Prozedur sei eine „Funktion ohne Rückgabewert“ – oder kürzer, sei eine „void-Funktion“. Analog könnte eine Funktion eine „Prozedur mit konkretem Rückgabewert“ sein.

Und damit man sich bei diesen Charakterisierungen nicht im Kreis dreht, kann man beide Konstrukte unter dem Begriff der Methode zusammenfassen. Somit kann man dann folgende Eigenschaften einer Methode nennen:

  • einen Namen (Identifier), hier kopieren und rechnen
  • eine Liste (formaler) Parameter, hier jeweils ein Integer-Wert
  • ein Ergebnis (klassischer Ereignistyp/Rückgabewert oder void)

Differenzierung[Bearbeiten]

Diese Synthese ist allerdings nur auf der abstrakten Ebene möglich. In der Praxis gibt es noch eine Vielzahl von Besonderheiten, die bei der Arbeit mit Methoden beachtet werden müssen.

  • Es gibt einige spezielle Arten von Methoden mit evtl. unterschiedlicher Syntax
  • Zugriffsmodifikatoren können das Verhalten von Methoden beeinflussen
  • die Übergabe von Objekten an Prozeduren erfolgt über die sogenannte Punktnotation

Konstruktormethoden[Bearbeiten]

Konstruktoren sind spezielle Methoden ohne Ergebnistyp, deren Name mit dem Namen der Klasse übereinstimmt. Man muss also anfangen, Methoden in dem Kontext zu betrachten, in dem sie gebraucht werden bzw. definiert sind (sich befinden). Wie der Name vermuten lässt, dienen Konstruktoren dem „Erschaffen“ (Konstruieren) von Objekten nach einem gewissen Vorbild. Weiterhin kann man zwischen impliziten (vorgegebenen) und expliziten (selbst erstellten) Konstruktoren unterscheiden. Konstruktoren erfüllen die Aufgabe, die Variablen des Objekts zu initialisieren, d. h. ihnen einen Wert zuzuweisen.

Als Gegenstücke zu den Konstruktoren gibt es in einigen Sprachen wie C++ auch Destruktoren. In Java gibt es statt dessen Finalisierungsmethoden.

main-Methode in Java[Bearbeiten]

Methoden können in Java nur dann ausgeführt werden, wenn sie von einem Objekt aufgerufen werden. Diese Objekte müssen aber vorher erzeugt werden. Wenn ein Programm gestartet wird, gibt es zuerst aber nur Klassen und noch keine Objekte. Irgendwo muss der Anfang gesetzt werden und das passiert in Java mit der main-Methode. Klassen, die eine main-Methode, engl. für ‚Hauptmethode‘, enthalten, sind ausführbare Klassen, da die main-Methode direkt von der Java Virtual Machine aufgerufen wird. Beispielsweise sorgt der Aufruf java Beispielklasse dafür, dass die Laufzeitumgebung versucht, in der Klasse Beispielklasse eine Methode mit Namen main, Rückgabetyp void und einem Stringarray als Parameter zu finden und auszuführen.

public class Beispielklasse
{
  public static void main(String[] args)
  {
    for (String arg : args)
    {
      System.out.println("Parameter: " + arg);
    }
  }
}

main-Methode in anderen Programmiersprachen[Bearbeiten]

In diesem Artikel oder Abschnitt fehlen wichtige Informationen.

Du kannst Wikipedia helfen, indem du sie recherchierst und einfügst, aber kopiere bitte keine fremden Texte in diesen Artikel.

Überladen von Methoden[Bearbeiten]

Beim Überladen von Methoden bekommen zwei oder mehrere Methoden denselben Namen. Welche dieser Methoden tatsächlich aufgerufen wird, hängt von den Parametern ab: es wird diejenige Methode ausgeführt, deren formale Parameter den tatsächlichen Parametern entsprechen, mit denen die Methode aufgerufen wird.

Zugriffsmethoden[Bearbeiten]

Hauptartikel: Zugriffsfunktion

Die Zugriffsmethoden sind eigentlich normale Methoden, die einzelne Eigenschaften (Attribute) eines Objekts abfragen (get) oder ändern können (set). Es hat sich im Programmierstil der objektorientierten Programmierung eingebürgert entsprechende Methoden mit den Präfixen get bzw. set zu versehen. Insbesondere in Java werden diese Methoden auch getter und setter genannt. Dahingegen lauten bei Microsoft Visual FoxPro die Schlagwörter für dieses Konzept Access- und Assign-Methoden.[2]

Multimethoden[Bearbeiten]

Hauptartikel: Multimethode

In einigen Sprachen gibt es sogenannte Multimethoden, welche gleichzeitig auf mehreren (Parameter-)Objekten operieren und daher in mehreren Parametern polymorph sein können.

Virtuelle Methoden[Bearbeiten]

Hauptartikel: Virtuelle Methode

Eine virtuelle Methode ist eine Methode, bei der erst zur Laufzeit ermittelt wird, welche konkrete Implementierung verwendet wird. Dieses sogenannte dynamische Binden ermöglicht es, Methoden zu überschreiben bzw. zu überladen. Das Konzept der virtuellen Methoden wird von einem Compiler zum Beispiel mittels virtueller Tabellen umgesetzt.

Statische Methoden[Bearbeiten]

Einige objektorientierte Programmiersprachen wie beispielsweise Java unterscheiden Methoden, die von einem Objekt ausgeführt werden (Instanzmethoden) und solche, die ohne Objekt ausgeführt werden (statische Methoden oder Klassenmethoden). Instanzmethoden können auf den Zustand des konkreten Objekts (der Instanz) zugreifen, während statische Methoden nur mit Eigenschaften der Klasse arbeiten. Die oben erwähnte main-Methode ist ein Beispiel für eine statische Methode.[3]

Literatur[Bearbeiten]

  •  Laura Lemay, Charles L. Perkins: Java in 21 Tagen. 2000, ISBN 3-8272-5578-3.
  •  Katharina Morik, Volker Klingspor: Informatik kompakt. Eine grundlegende Einführung mit Java. Springer, 2006, ISBN 3-540-24304-6.

Einzelnachweise[Bearbeiten]

  1. void. In: dict.leo.org. Abgerufen am 21. Oktober 2013.
  2. Access- und Assign-Methoden. In: Visual Studio .NET 2003, Visual FoxPro. Microsoft, abgerufen am 21. Oktober 2013.
  3. James Gosling u. a.: Chapter 8. Classes. In: The Java Language Specification: Java SE 7 Edition. 28. Februar 2013, abgerufen am 20. Januar 2014 (englisch).

Weblinks[Bearbeiten]