33 Stimmen

'methode' vs. 'nachricht' vs. 'funktion' vs. '???'

Ich habe kürzlich eine Frage zu dem, was ich "Methodenaufrufe" genannt habe, gestellt. Die Antwort bezog sich auf "Nachrichten". Als selbstlernender Hobby-Programmierer, der versucht, Fragen so zu formulieren, dass ich nicht dumm aussehe, realisiere ich, dass die Terminologie, die ich verwende, viel darüber aussagt, wie ich programmieren gelernt habe.

Gibt es einen Unterschied zwischen den verschiedenen Begriffen für Methoden/Nachrichten usw. in der objektorientierten Programmierung? Handelt es sich um einen Unterschied, der daher rührt, dass verschiedene Programmiersprachen unterschiedliche Begriffe verwenden, um ähnliche Konzepte zu beschreiben?

Ich erinnere mich, dass in nicht-objektorientierten Sprachen manchmal ein Unterschied zwischen "Unterroutinen" und "Funktionen" gemacht wurde, je nachdem, ob ein Rückgabewert erwartet wurde, aber selbst dann war dies eine sprachspezifische Unterscheidung?

18voto

Ben Collins Punkte 20125

Ich habe festgestellt, dass es sich hierbei um eine Sprach- und Programmierparadigma-Sache handelt. Ein Paradigma - OOP - bezieht sich auf Objekte mit Elementmethoden, die konzeptionell darstellen, wie Sie Nachrichten an diese Objekte senden (dieser Ansatz spiegelt sich beispielsweise in UML wider).

Ein weiteres Paradigma - funktional - kann oder kann keine Klassen von Objekten beinhalten, aber Funktionen sind die atomare Arbeitseinheit.

Im strukturierten Programmieren gab es Unterroutinen (beachten Sie, dass das Präfix "sub" Struktur impliziert).

Imperatives Programmieren (das sich stark mit strukturiertem Programmieren überschneidet, aber eine etwas andere Sicht auf die Dinge hat) bietet einen formelhafteren Blick auf die Welt, und so stellen 'Funktionen' eine Operation dar (oft mathematisch).

Alles, was Sie tun müssen, um nicht wie ein Naivling zu klingen, ist die Terminologie zu verwenden, die im Sprachreferenzhandbuch für die Sprache verwendet wird, die Sie verwenden.

11voto

Nachricht!=Methode!=Funktion

In OOP können verschiedene Objekte verschiedene Methoden an die gleiche Nachricht binden.

Zum Beispiel: Die Nachricht "n Grad nach links drehen" würde von verschiedenen Objekten wie Form, Kreis, Rechteck und Quadrat unterschiedlich implementiert werden.

Nachrichten: Objekte kommunizieren durch Nachrichten.

-Objekte senden und empfangen Nachrichten.

-Die Antwort auf eine Nachricht ist die Ausführung einer Methode.

-Die zu verwendende Methode wird zur Laufzeit vom Empfänger bestimmt.

In C++ werden Methoden und Nachrichten als Funktionsmitglieder bezeichnet.

4voto

goofballLogic Punkte 33823

In objektorientierten Implementierungen wie C# existiert das Konzept einer "Nachricht" nicht wirklich als explizites Sprachkonstrukt. Man kann sich keinen bestimmten Code ansehen und sagen "das ist die Nachricht".

Stattdessen impliziert eine Methode einer Objektklasse die Idee, dass andere Objekte eine Art von Nachricht senden können, die das Verhalten innerhalb dieser Methode auslöst. So geben Sie einfach die Methode direkt an, anstatt eine Nachricht zu senden.

Bei anderen Implementierungen wie Smalltalk kann man die übermittelte Nachricht sehen, und das empfangende Objekt hat die Möglichkeit, mit dieser Nachricht zu tun, was es will.

Es gibt Bibliotheken, die auf Sprachen wie C# aufsetzen und versuchen, dem Sprachgefühl des expliziten Nachrichtenaustauschs wiederherzustellen. Ich habe hier zum Spaß eine eigene Version entwickelt: http://collaborateframework.codeplex.com/

3voto

Daren Thomas Punkte 64742

Ich glaube, dass Nachricht in Smalltalk verwendet wird.

Java, C# etc. neigen dazu, Methode oder Instanzmethode zu verwenden.

3voto

lindelof Punkte 33162

Ich bin ziemlich sicher (aber eine schnelle Wikipedia Überprüfung scheint dies zu bestätigen), dass die Terminologie "Nachrichtenübermittlung" aus der Smalltalk-Community stammt. Ich denke, es ist mehr oder weniger äquivalent zu einem Methodenaufruf.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X