Frage

Ich habe kürzlich eine Frage zu dem gestellt, was ich „Methodenaufrufe“ nannte.Die Antwort bezog sich auf „Nachrichten“.Als autodidaktischer Hobbyprogrammierer, der versucht, Fragen zu formulieren, die mich nicht wie einen Idioten aussehen lassen, stelle ich fest, dass die von mir verwendete Terminologie viel darüber verrät, wie ich das Programmieren gelernt habe.

Gibt es einen Unterschied zwischen den verschiedenen Begriffen für Methoden/Nachrichten/etc.in der OO-Programmierung?Ist dies ein Unterschied, der darauf zurückzuführen ist, dass verschiedene Programmiersprachen unterschiedliche Terminologien verwenden, um ähnliche Konzepte zu beschreiben?

Ich glaube mich zu erinnern, dass in Sprachen vor OO manchmal zwischen „Unterprogrammen“ und „Funktionen“ unterschieden wurde, basierend darauf, ob ein Rückgabewert erwartet wurde, aber war das selbst dann eine Unterscheidung zwischen den einzelnen Sprachen?

War es hilfreich?

Lösung

Ich habe herausgefunden, dass dies eine Sache mit der Sprache und dem Programmierparadigma ist.Ein Paradigma – OOP – bezieht sich auf Objekte mit Mitgliedsmethoden, die konzeptionell die Art und Weise darstellen, wie Sie Nachrichten an diese Objekte senden (diese Ansicht spiegelt sich beispielsweise in UML wider).

Ein anderes Paradigma – das funktionale – kann Klassen von Objekten umfassen oder auch nicht, aber Funktionen sind die atomare Arbeitseinheit.

In der strukturierten Programmierung gab es Unterroutinen (beachten Sie, dass das Präfix „sub“ eine Struktur impliziert).

Bei der imperativen Programmierung (die sich häufig mit der strukturierten Programmierung überschneidet, aber eine etwas andere Sichtweise auf die Dinge darstellt) haben Sie eine eher formelhafte Sicht auf die Welt, und „Funktionen“ repräsentieren daher eine Operation (oft mathematisch).

Alles, was Sie tun müssen, um nicht wie ein Idiot zu klingen, ist, die Terminologie zu verwenden, die in der Sprachreferenz für die von Ihnen verwendete Sprache verwendet wird.

Andere Tipps

Nachricht!=Methode!=Funktion

in OOP anders Objekte kann unterschiedlich sein Methoden an dasselbe gebunden Nachricht.

Zum Beispiel:Die Meldung „um n Grad nach links drehen“ würde von verschiedenen Objekten wie Form, Kreis, Rechteck und Quadrat unterschiedlich umgesetzt werden.

Mitteilungen:Objekte kommunizieren durch Nachrichten.

-Objekte senden und empfangen Nachrichten.

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

-Die zu verwendende Methode besteht darin, den Empfänger zur Laufzeit zu bestimmen.

In C++ werden Methoden und Nachrichten aufgerufen Funktionsmitglieder.

Ich glaube Nachricht wird im Smalltalk verwendet.

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

Ich bin mir ziemlich sicher (aber kurz Wikipedia Die Überprüfung scheint dies zu bestätigen), dass die Terminologie „Message Passing“ aus der Smalltalk-Community stammt.Ich denke, es entspricht mehr oder weniger einem Methodenaufruf.

Der Begriff „Nachricht“ kann sich auf das Senden einer Nachricht an ein Objekt beziehen, was in einigen Programmiersprachen unterstützt wird, in anderen jedoch nicht.

Wenn das Objekt die Nachricht unterstützt, führt es Code aus.Andernfalls wird es einfach ignoriert.Dies ist ein dynamischerer Ansatz als ein expliziter Funktions-/Methodenaufruf, bei dem das Objekt diese Funktion unterstützen muss.

Ich glaube, dass Objective-C diesen Messaging-Ansatz verwendet.

In objektorientierten Implementierungen wie C# existiert das Konzept einer „Nachricht“ nicht wirklich als explizites Sprachkonstrukt.Sie können sich nicht ein bestimmtes Stück Code ansehen und sagen: „Da ist die Botschaft.“

Stattdessen impliziert eine Methode einer Objektklasse die Idee, dass andere Objekte einen Nachrichtentyp senden können, der das Verhalten innerhalb dieser Methode auslöst.Am Ende geben Sie also einfach die Methode direkt an, anstatt eine Nachricht zu senden.

Bei anderen Implementierungen wie Smalltalk können Sie sehen, wie die Nachricht weitergeleitet wird, und das empfangende Objekt hat die Möglichkeit, mit dieser Nachricht zu tun, was es will.

Es gibt Bibliotheken, die auf Sprachen wie C# aufbauen und versuchen, das Gefühl der expliziten Nachrichtenübermittlung in der Sprache wiederherzustellen.Ich habe hier zum Spaß selbst eines gekocht: http://collaborateframework.codeplex.com/

Ich bin mir über die Herkunft nicht sicher Nachricht Terminologie.Am häufigsten stoße ich darauf Mitteilungen im UML-Design.Objekte (in der UML-Terminologie „Akteure“) können mithilfe von miteinander kommunizieren Mitteilungen.Im realen Code Nachricht ist normalerweise nur ein Funktionsaufruf.Für mich ist eine Nachricht ein Versuch, mit einem Objekt zu kommunizieren.Es kann sich um eine echte Nachricht (wie Nachrichten im Betriebssystem) oder um Funktionsaufrufe handeln.

Normalerweise scheint „Methode“ der richtige Name für Funktionen zu sein.Allerdings hat jede Sprache ihre eigenen Schlüsselwörter.Delphi macht beispielsweise sogar einen Unterschied zwischen Methoden, die etwas zurückgeben („Funktionen“) und Methoden, die nichts zurückgeben („Prozeduren“), während es in C-Typ-Sprachen keinen Unterschied gibt.

Hier sind einige vereinfachte Definitionen:

Methoden/Unterprogramme/Voids:eine Aktion ausführen

Funktionen:eine Aktion ausführen und einen Wert zurückgeben

Veranstaltungen:werden aufgerufen, wenn auf ein Objekt eingewirkt wird

Bearbeiter:sind die Funktionen/Methoden, die die Ereignisse verarbeiten


PS:Dies ist ein perfektes Beispiel dafür, warum SO DL/DT/DD-Tags unterstützen sollte.

Ich glaube, dass es an dieser Stelle eine Frage der Präferenz ist.Die Wörter, die Sie erwähnen, sind im Grunde Synonyme in den heutigen Sprachen und die meisten Menschen werden verstehen, was Sie meinen, wenn Sie entweder „Methode“ oder „Funktion“ sagen.Wenn Sie „Nachricht“ verwenden, die eigentlich nur in OOP verwendet wird, verwechseln Sie möglicherweise das, was Sie mitteilen möchten. Zum Beispiel:"Ich muss eine Nachricht erstellen, um eine E -Mail -Nachricht zu senden." Andere Begriffe, die synonym sein könnten, und dies ist keine vollständige Liste, sind Unterroutine, Aktion, Prozedur, Operation (obwohl normalerweise mathematisch), Unterprogramm, Befehl ...

Methode :ähnelt der Funktion in traditionellen Sprachen

Nachricht :ähnlich der Parameterübergabe in traditioneller Sprache

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top