Quanto è sbagliato parlare di "metodi" C ++ (rispetto a "funzioni membro")?


19

Ho capito che secondo il C ++ specifica non esiste una cosa come un "metodo", e alcuni (molti? La maggior parte?) C ++ i programmatori considerano "metodo" per essere un Java-ismo. D'altra parte, anche su un forum C ++ le persone sembrano parlare di metodi senza contrazioni. Sto cercando convenzioni note o pratiche comuni riguardo a questa terminologia.

Sto documentando un'API che ha entrambe le versioni C ++ e Java. Gli sviluppatori hanno mantenuto i nomi di classe e metodo / membro-funzione uguali tra i due, presumibilmente per la convenienza nel porting e nel testing. Per questo motivo, parte di ciò che deve essere documentato su queste API è "al di sopra" della scelta della lingua; Devo poter parlare in generale di Foos and Bars, con i loro metodi baz () e mumble () ...?

Se parlo di metodi che i programmatori Java lo considereranno naturale e, a quanto pare, i programmatori C ++ probabilmente capiranno, ma alcuni lo considereranno errato. La mia domanda è: quanto è atroce in pratica ? Come si parla convenzionalmente delle funzioni dei membri del C ++ in contesti di "OOP generale", rispetto a quelli specifici del C ++? Esiste un modo migliore per parlare delle funzioni dei membri in un modo che non è errato per entrambe le lingue? ("Funzioni membro" è un po 'prolisso).

Questo non è un sondaggio d'opinione; Sto cercando di determinare se ci sono convenzioni effettive o pratiche comuni per affrontare questo problema.

Sono a conoscenza di questa domanda , ma riguarda OOP in generale e non chiedono lingue specifiche.


Ho letto il centro assistenza ed esaminato l'elenco dei tag prima di chiederlo. Ho fatto qualcosa di sbagliato chiedendolo qui?
Monica Cellio,

Il voto ravvicinato che hai è principalmente basato sull'opinione che potrebbe benissimo essere. Non sono sicuro di quanto possa funzionare bene su qualsiasi sito SE solo perché è difficile dire in modo autorevole se le persone saranno irritate o meno con te e con quale ampiezza be .. Una persona potrebbe pensare che vada benissimo e un'altra penserà che sia una terribile violazione della terminologia, proprio come hai descritto nel Q- per questo è relativamente un tipo di opinione solo di opinione
Jimmy Hoffa,

2
Il concetto di metodi OOP sarebbe mappato in modo più pulito alla "funzione di membro virtuale" in C ++, ma è la stessa cosa. C'è una terminologia peggiore sul lato Java, come i "metodi statici" che non sono metodi ma funzioni. Continua a usare la parola "metodo" indipendente dalla lingua e tutti capiranno cosa intendi. Se qualcuno insiste sul fatto che il C ++ non ha metodi, questo è semplicemente errato e incredibilmente fastidioso spargimento di bici.
amon,

1
@JimmyHoffa è meglio?
Monica Cellio,

3
Basta chiamarli metodi nel tuo documento API multilingue. È possibile includere una frase nel testo introduttivo come "Per cercare di rimanere agnostici nel linguaggio di programmazione, questa documentazione dell'API utilizzerà il termine metodo per fare riferimento alle funzioni membro C ++".
Brandin,

Risposte:


11

Perché non includere una spiegazione (proprio come nella domanda) nella parte introduttiva della documentazione, ad esempio una sezione Convenzioni ? Quindi potresti spiegare che il termine "metodo", come usato nella tua documentazione, è inteso nel senso generico del metodo (Java), funzione membro (C ++), ... poiché la documentazione si applica a tutte le implementazioni.


Questo è quello che ho fatto, e finora le persone sembrano essere d'accordo. Grazie per il suggerimento
Monica Cellio,

15

Bene, non verrai giustiziato per questo.

La lamentela nel mondo C ++ non è di correttezza pedante: è di ambiguità. Ci sono così tanti diversi tipi di "metodi" là fuori nel deserto a seconda del dominio di cui stai parlando, che un gruppo di noi preferisce attenersi alla terminologia standard per evitare incomprensioni in seguito. Ciò significa, approssimativamente, "funzione statica / [non statica] [pura] virtuale / [non virtuale] / [libera]".

Se invece scrivi "metodo" nella tua documentazione, alcuni programmatori C ++ potrebbero lamentarsi del fatto che non è davvero chiaro di cosa stai parlando, o preoccuparti che se non hai familiarità con questa convenzione C ++, quali altri ti perdi?

Ma sono sicuro che ci sono milioni di programmatori professionisti C ++ che a loro volta non hanno idea che questa sia una cosa. È un grande vecchio mondo.

Non verrai giustiziato per questo.


3

Eiffel li chiama Routine o Funzionalità , il C ++ li chiama Funzioni membro e (quasi) ogni altro linguaggio OO mai creato nell'intera storia dell'informatica, sia prima che dopo il C ++ li chiama Metodi , in modo che quest'ultimo termine sia generalmente compreso anche da Programmatori C ++ (ed Eiffel), a meno che non abbiano mai sentito parlare di Simula, Smalltalk, Self, Objective-C, Newspeak, Java, C #, VB.NET, PHP, Python, Ruby, ECMAScript / JavaScript, Scala, CoffeeScript, ...


Tranne il punto è che spesso significano cose leggermente diverse in quei domini. Ecco perché l'OP sta chiedendo se è meglio attenersi alla terminologia specifica del dominio e perché la risposta corretta è "sì" ...
Lightness Races with Monica

Ho appena realizzato che hai dimostrato il mio punto citando JavaScript, che non ha nemmeno classi (il suo OO è basato su prototipo). Quindi come possono i metodi JavaScript essere uguali ai metodi altrove? L'intelligibilità reciproca che stai sostenendo in realtà non esiste.
Lightness Races con Monica

OOP basato sul prototipo non fa alcuna differenza. OOP si basa sul concetto che gli oggetti comunicano tramite messaggi (come i server che inviano richieste l'uno all'altro) e un metodo si riferisce al modo (metodo) in cui un determinato oggetto risponde a un determinato messaggio. Prototype OO fa la differenza solo riguardo al modo in cui i metodi possono essere ereditati. Ciò che fa una differenza più grande sarebbe OOP basato su slot (come Python) vs basato su messaggi (come Ruby), e se hai un'associazione tardiva o anticipata.
saolof
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.