Wie falsch ist es, von C ++ - „Methoden“ zu sprechen (im Vergleich zu „Member-Funktionen“)?


19

Ich verstehe, dass es nach der C ++ - Spezifikation keine "Methode" gibt, und einige (viele? Die meisten?) C ++ - Programmierer betrachten "Methode" als Java-Ismus. Andererseits scheinen die Leute auch in einem C ++ - Forum über Methoden zu sprechen, ohne zu zucken. Ich suche nach bekannten Konventionen oder gängigen Praktiken in Bezug auf diese Terminologie.

Ich dokumentiere eine API, die sowohl C ++ - als auch Java-Versionen hat. Tatsächlich haben die Entwickler die Klassen- und Methoden- / Memberfunktionsnamen zwischen beiden gleich gehalten, vermutlich aus Gründen der Zweckmäßigkeit beim Portieren und Testen. Aus diesem Grund steht einiges, was über diese APIs dokumentiert werden muss, über der Wahl der Sprache. Ich muss in der Lage sein, allgemein über Foos und Bars mit ihren Methoden baz () und mumble () ... zu sprechen .

Wenn ich über Methoden spreche, werden Java-Programmierer dies als natürlich betrachten und C ++ - Programmierer werden es wahrscheinlich verstehen, aber einige werden es als falsch ansehen. Meine Frage ist: Wie abscheulich ist das in der Praxis ? Wie werden C ++ - Memberfunktionen herkömmlicherweise in "allgemeinen OOP" -Kontexten und nicht in C ++ - spezifischen Kontexten behandelt? Gibt es eine bessere Möglichkeit, über Mitgliedsfunktionen auf eine Weise zu sprechen, die für beide Sprachen nicht falsch ist? ("Mitgliedsfunktionen" sind etwas ausführlich.)

Dies ist keine Meinungsumfrage; Ich versuche festzustellen, ob es tatsächliche Konventionen oder übliche Vorgehensweisen gibt , um dieses Problem anzugehen.

Ich bin mir dieser Frage bewusst , aber es geht um OOP im Allgemeinen und fragt nicht nach bestimmten Sprachen.


Ich habe die Hilfe gelesen und die Tags-Liste durchgesehen, bevor ich danach gefragt habe. Habe ich etwas falsch gemacht, indem ich das hier gefragt habe?
Monica Cellio

Die enge Abstimmung, die Sie haben, basiert in erster Linie auf der Meinung, welche dies sein könnte. Wir sind nicht sicher, wie gut dies auf jeder SE-Site funktionieren kann, nur weil es schwierig ist, verbindlich zu sagen, ob die Leute über Sie irritiert sind und wie weit sie irritiert sein werden Eine Person mag denken, dass es völlig in Ordnung ist, und eine andere wird denken, dass es ein schrecklicher Verstoß gegen die Terminologie ist, so wie Sie es im Q beschrieben haben - aus diesem Grund ist es eine relativ meinungsspezifische Sache
Jimmy Hoffa

2
Das OOP-Methodenkonzept lässt sich am saubersten auf die "virtuelle Member-Funktion" in C ++ abbilden, aber es ist dasselbe. Auf der Java-Seite gibt es eine schlechtere Terminologie, z. B. „statische Methoden“, die keine Methoden, sondern Funktionen sind. Verwenden Sie einfach weiterhin das sprachunabhängige Wort „Methode“, und jeder wird verstehen, was Sie meinen. Wenn jemand darauf besteht, dass C ++ keine Methoden hat, ist das nur sachlich falsch und unglaublich ärgerlich.
Am

1
@ JimmyHoffa ist das besser?
Monica Cellio

3
Nennen Sie sie einfach Methoden in Ihrem sprachübergreifenden API-Dokument. Sie könnten eine Phrase in den Intro-Text einfügen, wie "Um zu versuchen, programmiersprachenunabhängig zu bleiben, wird in dieser API-Dokumentation der Begriff Methode verwendet, um auf C ++ - Member-Funktionen zu verweisen."
Brandin

Antworten:


11

Warum fügen Sie dem einleitenden Teil der Dokumentation keine Erklärung hinzu (ähnlich wie in Ihrer Frage), z. B. einen Abschnitt über Konventionen ? Dann könnten Sie erklären, dass der Begriff "Methode", wie er in Ihrer Dokumentation verwendet wird, im allgemeinen Sinne von Methode (Java), Member-Funktion (C ++), ... gemeint ist, da die Dokumentation für alle Implementierungen gilt.


Dies ist, was ich getan habe, und bisher scheinen die Leute damit einverstanden zu sein. Danke für den Vorschlag.
Monica Cellio

15

Du wirst dafür nicht hingerichtet werden.

Die Beschwerde in der C ++ - Welt betrifft nicht die pedantische Korrektheit, sondern die Mehrdeutigkeit. Es gibt so viele verschiedene Arten von "Methoden" in der Wildnis, je nachdem, von welcher Domäne Sie sprechen, dass einige von uns es vorziehen, sich an die Standardterminologie zu halten, um später Missverständnisse zu vermeiden. Das bedeutet ungefähr "statisch / [nicht statisch] [rein] virtuell / [nicht virtuell] Mitglied / [frei] Funktion".

Wenn Sie stattdessen "Methode" in Ihre Dokumentation schreiben, beklagen sich einige C ++ - Programmierer möglicherweise, dass nicht wirklich klar ist, wovon Sie sprechen, oder Sie befürchten, dass Sie, wenn Sie nicht mit dieser C ++ - Konvention vertraut sind, welche anderen fehlen?

Aber ich bin mir sicher, dass es Millionen von professionellen C ++ - Programmierern gibt, die selbst keine Ahnung haben, dass dies überhaupt eine Sache ist. Es ist eine große alte Welt.

Du wirst dafür nicht hingerichtet werden.


3

Eiffel nennt sie Routinen oder Funktionen , C ++ nennt sie Teilnehmer - Funktionen , und (fast) in der gesamten Geschichte der Berechnung, sowohl vor als auch nach C erstellt jede andere OO - Sprache immer ++ nennt sie Methoden , so dass letztere Begriff allgemein auch verstanden werden sollte C ++ (und Eiffel) -Programmierer, es sei denn, sie haben wirklich noch nie von Simula, Smalltalk, Self, Objective-C, Newspeak, Java, C #, VB.NET, PHP, Python, Ruby, ECMAScript / JavaScript, Scala, CoffeeScript usw. gehört.


Der einzige Unterschied besteht darin, dass sie in diesen Domänen häufig subtil unterschiedliche Bedeutungen haben. Aus diesem Grund fragt das OP, ob es besser ist, sich an die domänenspezifische Terminologie zu halten, und warum die richtige Antwort "Ja" lautet ...
Lightness Races with Monica

Ich habe gerade festgestellt, dass Sie meinen Standpunkt unter Berufung auf JavaScript bewiesen haben, das nicht einmal Klassen hat (sein OO basiert auf Prototypen). Wie können JavaScript-Methoden also mit anderen Methoden identisch sein? Die gegenseitige Verständlichkeit, die Sie behaupten, existiert nicht wirklich.
Leichtigkeit Rennen mit Monica

Prototypbasiertes OOP macht keinen Unterschied. OOP basiert auf der Vorstellung, dass Objekte über Nachrichten kommunizieren (wie Server, die Anforderungen aneinander senden), und eine Methode bezieht sich auf die Art und Weise (Methode), in der ein bestimmtes Objekt auf eine bestimmte Nachricht reagiert. Der Prototyp OO macht nur einen Unterschied, wie Methoden vererbt werden können. Was einen größeren Unterschied macht, ist ein slotbasiertes (wie Python) oder ein nachrichtenbasiertes (wie Ruby) OOP und ob Sie eine späte oder eine frühe Bindung haben.
Saolof
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.