Methode: Unterschied zwischen den Versionen

Aus EINI
Wechseln zu: Navigation, Suche
(Deklaration)
Zeile 1: Zeile 1:
Eine Methode definiert ein (Teil-)Programm.
+
Eine '''Methode''' definiert ein (Teil-)Programm.
  
Üblicherweise wird eine Methode von einer Funktion unterschieden: Eine Methode wird auf einem Objekt ausgeführt, eine Funktion wird nach Belieben aufgerufen. Bei der Deklaration unterscheidet man zwischen Methode und Funktion nur durch den [[Modifikator]] [[static]]. Eine Funktion wird im statischen Kontext der Klasse ausgeführt und hat daher nur Zugriff auf Klassenattribute und lokale Variablen, während eine Methode zusätzlich Zugriff auf Attribute der Objektinstanz hat.
+
=Unterscheidung Methode und Funktion=
 +
 
 +
Üblicherweise wird eine Methode von einer '''Funktion''' unterschieden: Eine Methode wird auf einem [[Objekt]] ausgeführt, eine Funktion wird nach Belieben aufgerufen. Bei der Deklaration unterscheidet man zwischen Methode und Funktion nur durch den [[Modifikator]] [[static]].  
 +
 
 +
Eine Funktion wird im '''statischen Kontext''' der [[Klasse]] ausgeführt und hat daher nur Zugriff auf Klassenattribute und lokale Variablen, während eine Methode zusätzlich Zugriff auf Attribute der '''Objektinstanz''' hat.
  
 
= Syntaxdiagramm =
 
= Syntaxdiagramm =
Zeile 9: Zeile 13:
 
= Deklaration =
 
= Deklaration =
  
Eine (statische) Methode wird innerhalb des Klassenrumpfes mit Angabe der [[Modifikator | Modifikatoren]], des Rückgabetyps und des Namens deklariert. Darauf folgten in runden Klammern die Parametern und der eigentliche Rumpf der Methode innerhalb von geschweiften Klammern in Form eines [[Block | Blockes]]. Wird der Modifikator [[abstract]] verwendet, so wird nur die Signatur der Methode, nicht aber ihr Rumpf angegeben und die Deklaration mit einem ''';''' abgeschlossen.
+
Eine (statische) Methode wird innerhalb des Klassenrumpfes mit Angabe der Modifikatoren, des Rückgabetyps und des Namens deklariert. Darauf folgen in runden Klammern die Parameter. Danach kommt der eigentliche Rumpf der Methode innerhalb von geschweiften Klammern in Form eines [[Block | Blocks]].  
 +
 
 +
Wird der Modifikator [[abstract]] verwendet, so wird nur die [[Signatur]] der Methode, nicht aber ihr Rumpf angegeben. Die Deklaration wird mit einem Semikolon abgeschlossen.
  
 
= Organisation =
 
= Organisation =
  
Man verwendet die Deklaration von Funktionen und Methoden hauptsächlich um seinen Quellcode zu strukturieren. So bietet es sich immer an, häufig wieder verwendete Codefragmente in ihre eigene Funktion auszulagern.
+
Funktionen und Methoden werden hauptsächlich deklariert, um den Quellcode zu strukturieren. Es bietet sich immer an, häufig verwendete Codefragmente in ihre eigene Funktion auszulagern.
Des weiteren soll die Funktionalität eines Objektes durch seine verfügbaren Methoden repräsentiert werden. Diese Funktionalitäten sollten meistens relativ einfach formulierbar sein (frei nach dem Motto "Do one thing, and do it well!"<ref>Unix Philosophy</ref>). Meistens beinhaltet dies insbesondere die Fähigkeit, Attribute des Objektes zu manipulieren oder in Abhängigkeit von Attributen des Objektes spezielle Aufgaben zu erfüllen.
+
 
 +
Die Funktionalität eines Objektes sollte durch seine verfügbaren Methoden repräsentiert werden. Diese Funktionalitäten sollten relativ einfach formulierbar sein (frei nach dem Motto "Do one thing, and do it well!"<ref>Unix Philosophy</ref>). Meistens beinhalten diese insbesondere die Fähigkeit, Attribute des Objektes zu manipulieren oder in Abhängigkeit von diesen spezielle Aufgaben zu erfüllen.
  
 
= Statisch vs. Nicht-Statisch =
 
= Statisch vs. Nicht-Statisch =
  
Ein Java-Programm beginnt immer in der [[main]]-Methode im statischen Kontext. Das heißt, die Ausführung des Programmes findet nicht innerhalb einer Instanz eines Objektes statt.
+
Ein [[Java]]-Programm beginnt immer in der [[main]]-Methode im '''statischen''' Kontext. Das heißt die Ausführung des Programmes findet nicht innerhalb einer Instanz eines Objektes statt.
 +
 
 +
Wird auf einem Objekt eine Methode ausgeführt, wechselt das Programm in einen '''nicht-statischen''' Kontext, in dem die Ausführung des Programmes abhängig vom Zustand des Objektes ist, auf dem die Methode ausgeführt wird.  
  
Wird auf einem Objekt eine Methode ausgeführt, wechselt das Programm in einen nicht-statischen Kontext, in dem die Ausführung des Programmes abhängig vom Zustand des Objektes ist, auf dem die Methode ausgeführt wird. Innerhalb einer Klasse selbst können aus einem statischen Kontext keine nicht-statischen Methoden aufgerufen werden oder nicht-statische Attribute manipuliert werden (welches Objekt soll dies auch ausführen?). Möchte man dies tun, muss man aus dem statischen Kontext heraus eine Objektinstanz erstellen und auf dem erstellen Objekt die gewünschte Methode aufrufen. Ob dies für den Ablauf des Programmes Sinn ergibt oder nicht, sei hier nicht näher behandelt (in den meisten Fällen tut es dies jedoch nicht ...)
+
Innerhalb einer Klasse selbst können aus einem statischen Kontext keine nicht-statischen Methoden aufgerufen oder ebensolche Attribute manipuliert werden --- es ist kein Objekt vorhanden, dass dies ausführen könnte. Möchte man es trotzdem tun, so muss man aus dem statischen Kontext heraus eine Objektinstanz erstellen und auf dem erstellen Objekt die gewünschte Methode aufrufen. in den meisten Fällen ergibt das jedoch für den Ablauf des Programmes keinen Sinn.
  
In der Praxis möchte man in der objektorientierten Programmierung so schnell wie möglich den Ablauf eines Programmes in einen an ein Objekt gebundenen, nicht-statischen Kontext überführen und, außer in Spezialfällen<ref>Verwendung von hilfreichen Funktionen, die keinen Objektzustand benötigen und keinen neuen erzeugen, wie z.B. mathematische Funktionen wie <code>cos</code>. Diese berechnen meist eine einfache Funktion und geben einen Wert zurück ohne den Zustand des Programmes in irgend einer Weise zu beeinflussen.</ref>, in einem solchen verbleiben.
+
In der '''Praxis''' möchte man in der [[Objektorientierte Programmierung|'''objektorientierten Programmierung''']] den Ablauf eines Programmes so schnell wie möglich in einen an ein Objekt gebundenen, nicht-statischen Kontext überführen und, außer in Spezialfällen<ref>Verwendung von hilfreichen Funktionen, die keinen Objektzustand benötigen und keinen neuen erzeugen, wie z.B. mathematische Funktionen wie <code>cos</code>. Diese berechnen meist eine einfache Funktion und geben einen Wert zurück, ohne den Zustand des Programmes in irgendeiner Weise zu beeinflussen.</ref>, in diesem verbleiben.
  
 
= Rückgabewert =
 
= Rückgabewert =

Version vom 13. März 2016, 21:26 Uhr

Eine Methode definiert ein (Teil-)Programm.

Unterscheidung Methode und Funktion

Üblicherweise wird eine Methode von einer Funktion unterschieden: Eine Methode wird auf einem Objekt ausgeführt, eine Funktion wird nach Belieben aufgerufen. Bei der Deklaration unterscheidet man zwischen Methode und Funktion nur durch den Modifikator static.

Eine Funktion wird im statischen Kontext der Klasse ausgeführt und hat daher nur Zugriff auf Klassenattribute und lokale Variablen, während eine Methode zusätzlich Zugriff auf Attribute der Objektinstanz hat.

Syntaxdiagramm

Method declaration.png

Deklaration

Eine (statische) Methode wird innerhalb des Klassenrumpfes mit Angabe der Modifikatoren, des Rückgabetyps und des Namens deklariert. Darauf folgen in runden Klammern die Parameter. Danach kommt der eigentliche Rumpf der Methode innerhalb von geschweiften Klammern in Form eines Blocks.

Wird der Modifikator abstract verwendet, so wird nur die Signatur der Methode, nicht aber ihr Rumpf angegeben. Die Deklaration wird mit einem Semikolon abgeschlossen.

Organisation

Funktionen und Methoden werden hauptsächlich deklariert, um den Quellcode zu strukturieren. Es bietet sich immer an, häufig verwendete Codefragmente in ihre eigene Funktion auszulagern.

Die Funktionalität eines Objektes sollte durch seine verfügbaren Methoden repräsentiert werden. Diese Funktionalitäten sollten relativ einfach formulierbar sein (frei nach dem Motto "Do one thing, and do it well!"[1]). Meistens beinhalten diese insbesondere die Fähigkeit, Attribute des Objektes zu manipulieren oder in Abhängigkeit von diesen spezielle Aufgaben zu erfüllen.

Statisch vs. Nicht-Statisch

Ein Java-Programm beginnt immer in der main-Methode im statischen Kontext. Das heißt die Ausführung des Programmes findet nicht innerhalb einer Instanz eines Objektes statt.

Wird auf einem Objekt eine Methode ausgeführt, wechselt das Programm in einen nicht-statischen Kontext, in dem die Ausführung des Programmes abhängig vom Zustand des Objektes ist, auf dem die Methode ausgeführt wird.

Innerhalb einer Klasse selbst können aus einem statischen Kontext keine nicht-statischen Methoden aufgerufen oder ebensolche Attribute manipuliert werden --- es ist kein Objekt vorhanden, dass dies ausführen könnte. Möchte man es trotzdem tun, so muss man aus dem statischen Kontext heraus eine Objektinstanz erstellen und auf dem erstellen Objekt die gewünschte Methode aufrufen. in den meisten Fällen ergibt das jedoch für den Ablauf des Programmes keinen Sinn.

In der Praxis möchte man in der objektorientierten Programmierung den Ablauf eines Programmes so schnell wie möglich in einen an ein Objekt gebundenen, nicht-statischen Kontext überführen und, außer in Spezialfällen[2], in diesem verbleiben.

Rückgabewert

Fußnoten

  1. Unix Philosophy
  2. Verwendung von hilfreichen Funktionen, die keinen Objektzustand benötigen und keinen neuen erzeugen, wie z.B. mathematische Funktionen wie cos. Diese berechnen meist eine einfache Funktion und geben einen Wert zurück, ohne den Zustand des Programmes in irgendeiner Weise zu beeinflussen.