Freie Scripten und Tutorials erstellt von Roland Geyer       Startseite | Gästebuch

Methode

Ein Befehl = Anweisung beschreibt, was in einem Programm geschehen soll.
Beispiel: Es soll etwas am Bildschirm ausgegeben werden: drucke

Eine Methode = Funktion = Unterrotine = Subrotine = Verhalten = Operationen kann aus mehreren Anweisungen bestehen. Mehrere Anweisungen werden innerhalb zweier geschwungenen Klammern zu einer Methode zusammengefasst.

Natürlich kann eine Tätigkeit nicht für sich alleine stehen. Es muss, wie im wirklichen Leben jemand da sein, der die Tätigkeit ausführt. Dieser jemand ist meist ein Objekt und, damit nicht nur wir, sondern auch das Programm weiß, wer da was tun soll, wird das Objekt mit seinem Namen angesprochen. Die Tätikeit wird durch einen Punkt getrennt anschließend angehängt.
Beispiel: Das Objekt heißt anton und soll drucken:

anton.drucke

Eine Anweisung erfolgt meistens mit bestimmten Daten. Damit das Programm im Programmtext die Namen der Variablen von den Namen der Anweisungen unterscheiden kann und die Daten = Parameter der Anweisung mitgegeben = übergeben werden können, werden nach dem Namen der Anweisung zwei runde Klammern gesetzt. Jeder Parameter wird durch einen Beistrich getrennt. Der Gültigkeitsbereich dieser Parameter befindet sich immer nur innerhalb dieser runden Klammern. Daher muss man den Typ der Variablen vor Nennung angeben:
anton.drucke(String myname, int myalter)

oder man übergibt gleich die Werte (= es wird kein neuer Speicher für die Werteberechnung zugeteilt, da keine Zuweisung erfolgt):
anton.drucke("Roland", 41)
anton.drucke(new int[ ] { 1,2,3});
anton.drucke(myObject.getAttribut());

Die Übergabe der Werte der Parameter erfolgt in Java immer als Kopie!!

Damit können die Werte der Übergabeparameter nicht verändert werden! Das würde ja dem Prinzip der Kapselung widersprechen und unbeabsichtigte site-Effekte auslösen.

Der Inhalt der Variablen vom elementaren Typ, erfolgt in Java immer Kopie per Value. Ist der Wert des Parameters eine Referenz, dann wird eine Kopie der Referenz übergeben. Werden die Werte dieser Referenz verändert, dann betrifft das natürlich alle Objekte, die ebenfalls dorthin referenzieren (Z.B.: Array!!). Will man das verhindern, muss vor der Änderung eine entsprechende Kopie erstellt werden!
Achtung: Die Übergabe des Wertes null, der für keine Referenz auf ein Objekt steht, erzeugt immer einen Laufzeitfehler!

Die Methoden muss bei ihrem Aufruf genauso typisiert sein und der Anzahl der Parameter und ihrem Typ des Rückgabewertes entsprechen, wie sie definiert wurde (= Signatur einer Methode)! Werden Methoden gleichen Namens aber unterschiedlicher Parameteranzahl und Typen definiert, wird die entsprechend signierte Methode gleichen Namens gesucht und aufgerufen, wenn sie definiert wurde. Man kann daher Methoden gleichnamig mit unterschiedlicher Parameteranzahl und Typen definieren (Polymorphismus =ein Methodenname wird mehrfach für unterschiedliche, hoffentlich sinnvolle, Implementierungen verwendet => Erspart langwierige if - Abfragen!). Nicht möglich ist die Definition gleichnamiger Methoden mit gleicher Parameterzahl und Typen aber unterschiedlicher Rückgabewerte.

Klassen verschiedenen Typs, können einen gemeinsamen Datentyp (= ein Objekt) über ein gemeinsames Interface vereinbaren. Beispiel: siehe API: java.awt.event

So wie in einer Sprache üblich werden mehrere Sätze, in diesem Fall Anweisungen durch Trennzeichen, in diesem Fall einen Strichpunkt voneinander getrennt. anton.drucke(name);
Die Idee in Schriften Zeichen zu trennen und damit die Wörter und Sätze lesbar zu ordnen, stammt von den Römern!

Mehrere Anweisungen bilden eine Funktion. Sie werden durch geschwungene Klammern zusammengefasst. Da Methoden ihrerseits durch Namen bezeichnet werden, gelten dieselben Regeln wie bei Variablennamen. Die Typenbezeichnung legt bei Methodendeklaraton fest von welchem Typ der Rückgabewert ist. Wird nichts zurückgegeben, dann steht das Wort void vor dem Namen der Funktion. Diese Funktion kann keine Return-Anweisung enthalten!!

Da Methoden auch außerhalb Ihres Namensraumes gültig sein können, wird der Bereich in der sie gültig sein dürfen vor der Angabe des Types bestimmt:

ACHTUNG: Das gilt nicht für Variablen, die innerhalb einer Funktion deklariert werden!! Diese erhalten keinen Bezeichner und gelten immer als lokal! Lokale Variablen müssen immer bei Deklaration sofort initialisiert werden! Sie sind nur während des Funktionsaufrufes gültig! Sie dürfen den Namen außerhalb ihres Blockes nicht verwenden (was einer doppelten Deklaration gleichkäme!!).

Damit kann eine Methode folgendermaßen aufgerufen werden.

Beispiel:
private void ausgeben(String myname,int myalter){

String name = myname; // Initialisierung der Variable und Übergabe des Wertes
int myalter = alter;

anton.drucke(name); // 1. Anweisung
anton.drucke(telefon);
}

Wenn man die Funktion verwenden möchte, ruft man sie, natürlich mit Namen mit:
berta.ausgeben("Roland", 41);
auf.

Die berta schafft daher dem anton an, dass er etwas ausgeben soll.

Beispiel:

private void ausgeben(String myname,int myalter){
    String name = myname;
    int alter = myalter;


    anton.drucke(name);
    anton.drucke(telefon);
}

 

Die Variablen name und alter wurden innerhalb der Methode ausgeben definiert. Solche Variablen nennt man lokale Variablen. Lokale Variablen benötigen immer einen zugewiesenen definierten Anfangswert!

zusätzlich kann bei der Methodendeklaration bestimmt werden, ob:

Die objektorientierte Sichtweise sieht so aus:

a.methode(b) bedeutet:

a sendet eine Nachricht an b. Dazu muß man sich die Klasse von a ansehen:

class A{

public void methode(B b){
b.schleichDi();
// und erst JETZT reagiert b!!
}

}

 

Weitere freie Tutorials: Rhetorik & Kommunikation Typografie & Layout Bildbearbeitung mit Photoshop oder GIMP Vektorgrafik mit Illustrator, FreeHand, Corel Draw oder Inkscape Layout mit Indesign oder Scribus Druckvorstufe GoLive Html JavaScript Flash & ActionScript Director & Lingo Assembler DOS Java objektorientiert Perl Word Excel Access PowerPoint Outlook Betriebssystem