Hi Sibylle,
da ich jetzt schon eine Weile bei WWW vor allem mitlese, will ich mal ein wenig Schreiben – und versuchen ein paar Antworten zu geben.
Ich habe auf Deine Frage jetzt schon mehrere Antworten gelesen, die alle irgendwie richtig waren – aber irgendwie schien mir doch das Gesamtbild ein wenig zu fehlen – vor allem, da das Programmieren – vor allem bei der Masse an verschiedenen Programmiersprachen und Paradigmen – doch recht unuebersichtlich geworden ist.
Also gehen wir mal zurueck zum strukturierten Programmieren (also ganz ohne Objekte). Damals gab es zwei Arten, bestimmte Funktionalitaeten so zu kapseln, dass man sie immer wieder verwenden kann: Prozeduren und Funktionen (beides Auspraegungen von „Unterprogrammen“). Wie einer der Poster richtig schrieb, war es (teilweise?) anfaenglich so gedacht, dass Funktionen eben nebeneffektfrei – d.h. man kann Funktionen so oft man will hintereinander aufrufen und sie haben immer das selbe Ergebnis und veraendern auch nichts am Gesamtprogrammzustand (z.B. globale Variablen) – sind. Diese Regel wurde aber recht schnell verwaessert. Die meisten Programmiersprachen die Funktionen haben, erlauben Nebeneffekte. Der kleinste Gemeinsame Nenner im Unterschied zwischen Funktionen und Prozeduren ist, dass Funktionen einen Rueckgabewert haben und Prozeduren keinen.
Anmerkung:
Die urspruengliche (?) Definition von „Funktion“ entspricht der mathematischen Funktion – aber diese Definition ist heute nur noch selten gueltig (in den real existierenden Programmiersprachen).
Aber selbst dieser minimale Unterschied (mit dem Rueckgabewert) wird von manchen Programmierstprachen unterwandert. Die beliebte Programmiersprache C kennt z.B. nur Funktionen. Dafuer koennen Funktionen in C auch keinen Rueckgabewert haben – was sie im Prinzip den Prozeduren gleichstellt. Im Prinzip hat man den Namen „Funktion“ einfach anders verwendet – allgemeiner. Dadurch kommt wohl auch einiges an Verwirrung rein.
Noch mehr Verwirrung gibt es durch das Aufkommen der Objektorientierung. Anfaenglich war die Objektorientierung ein ganz anderes Konzept. Man hatte „Nachrichten“ die man an Objekte gesandt hatte – bei Smalltalk ist das z.B. so. Man spricht in manchen Programmiersprachen auch von „Methoden“ fuer diese „Nachrichten“ (ganz am Anfang war der richtige Begriff aber m.W. schon Nachricht). Die C-Welt hat hier die Begrifflichkeiten wieder total verdorben. Bei der Entstehung von C++ musste man Funktionen, die es in C schon gab, und Methoden (Nachrichten) irgendwie vereinheitlichen. Also hat man Funktionen erschaffen, die den Nachrichten entsprechen – Methoden eben.
In C++ sind deshalb Funktionen und Methoden sehr aehnlich – um nicht zu sagen das selbe. Methoden haben nur die Spezialitaet, dass es sozusagen „objektorientierte Funktionen“ sind. D.h. sie gehoeren zu einer Klasse. Beim Aufruf einer solchen Funktion wird (ausser bei statischen Methoden) der Objektkontext mitgegeben.
Also: In C++ verschwimmt alles. Es gibt nur Funktionen. Manche Funktionen entsprechen Prozeduren (die dem klassischen Funktionssinn widersprechen) und manche Funktionen sind Methoden – also objektorientierte „Nachrichten“.
Deshalb wahrscheinlich auch die Sprachverwirrung, wenn man als Anfaenger mit Programmierern spricht – oder manche Buecher liest. Man kann schon ganzschoen durcheinander kommen …
Du kannst gerne noch nachfragen, wenn noch Fragen offen geblieben sind.
Viele Gruesse,
/juergen