Jak źle jest mówić o „metodach” C ++ (w porównaniu z „funkcjami składowymi”)?

19

Ja rozumiem , że według specyfikacji C ++ nie ma czegoś takiego jak „metoda”, a niektóre (wiele? Większość?) Programiści C ++ rozważyć „metoda” być Java-ism. Z drugiej strony, nawet na forum C ++ ludzie wydają się mówić o metodach bez drgań. Szukam znanych konwencji lub powszechnych praktyk dotyczących tej terminologii.

Dokumentuję interfejs API, który ma zarówno wersje C ++, jak i Java. Programiści w rzeczywistości zachowali nazwy klas i metod / funkcji między nimi, prawdopodobnie ze względu na celowość w portowaniu i testowaniu. Z tego powodu część tego, co należy udokumentować na temat tych interfejsów API, znajduje się „ponad” wyborem języka; Muszę być w stanie mówić ogólnie o Foos and Bars, z ich metodami baz () i mumble () ...?

Jeśli mówię o metodach, programiści Java uznają to za naturalne i, jak się wydaje, programiści C ++ prawdopodobnie zrozumieją, ale niektórzy uznają to za niepoprawne. Moje pytanie brzmi: jak haniebne jest to w praktyce ? W jaki sposób konwencjonalnie omawia się funkcje członka C ++ w kontekstach „ogólnych OOP”, a nie specyficzne dla C ++? Czy istnieje lepszy sposób mówienia o funkcjach członkowskich w sposób, który nie jest niepoprawny dla żadnego języka? („Funkcje składowe” to trochę zbyt szczegółowe.)

To nie jest badanie opinii; Próbuję ustalić, czy istnieją faktyczne konwencje lub wspólne praktyki mające na celu rozwiązanie tego problemu.

Mam świadomość tego pytania , ale ogólnie dotyczy OOP i nie pyta o konkretne języki.

Monica Cellio
źródło
Przeczytałem Centrum pomocy i przejrzałem listę tagów, zanim o to zapytałem. Czy zrobiłem coś złego, pytając o to tutaj?
Monica Cellio
Głosowanie, które masz, jest oparte głównie na opiniach, które to może być. Nie jestem pewien, jak dobrze może to działać na jakiejkolwiek stronie SE tylko dlatego, że trudno jest autorytatywnie powiedzieć, czy ludzie będą cię denerwować i do jakiej amplitudy będą bądź .. Jedna osoba może pomyśleć, że jest całkowicie w porządku, a druga pomyśli, że to straszne naruszenie terminologii, tak jak to opisałeś w Q- z tego powodu jest to względnie wyłącznie opinia
Jimmy Hoffa
2
Koncepcja metod OOP najlepiej odwzorowałaby „wirtualną funkcję członka” w C ++, ale to samo. Po stronie Java jest gorsza terminologia, na przykład „metody statyczne”, które nie są metodami, ale funkcjami. Po prostu używaj niezależnego od języka słowa „metoda”, a wszyscy zrozumieją, co masz na myśli. Jeśli ktoś upiera się, że C ++ nie ma metod, jest to po prostu nieprawdziwe i niewiarygodnie irytujące zrzucanie rowerów.
amon
1
@JimmyHoffa jest lepiej?
Monica Cellio
3
Po prostu nazwij je metodami w swoim dokumencie API dla wielu języków. Możesz wprowadzić frazę do tekstu wstępu, takiego jak: „Aby spróbować pozostać niezależnym od języka programowania, w tej dokumentacji interfejsu API zostanie użyty termin metoda odnoszący się do funkcji członkowskich C ++”.
Brandin

Odpowiedzi:

11

Dlaczego nie zamieścisz wyjaśnienia (podobnie jak w pytaniu) we wstępnej części dokumentacji, np. W sekcji Konwencje ? Następnie możesz wyjaśnić, że termin „metoda” użyty w dokumentacji oznacza w ogólnym znaczeniu metody (Java), funkcji składowej (C ++), ponieważ dokumentacja dotyczy wszystkich implementacji.

sceaj
źródło
To właśnie zrobiłem i do tej pory ludzie wydają się być w porządku. Dzieki za sugestie.
Monica Cellio
15

Nie zostaniesz za to stracony.

Skarga w świecie C ++ nie dotyczy pedantycznej poprawności: jest niejasna. Istnieje wiele różnych rodzajów „metod” na pustyni, w zależności od dziedziny, o której mówisz, że wielu z nas woli trzymać się standardowej terminologii, aby uniknąć nieporozumień później. Oznacza to z grubsza „statyczną / [niestatyczną] [czystą] wirtualną / [nie-wirtualną] członka / [darmową] funkcję”.

Jeśli zamiast tego napiszesz w swojej dokumentacji „metodę”, niektórzy programiści C ++ mogą narzekać, że nie jest do końca jasne, o czym mówisz, lub martwić się, że jeśli nie znasz tej konwencji C ++, jakich innych brakuje?

Ale jestem pewien, że istnieją miliony profesjonalnych programistów C ++, którzy sami nie mają pojęcia, że ​​to nawet coś. To wielki stary świat.

Nie zostaniesz za to stracony.

Lekkość Wyścigi z Moniką
źródło
3

Eiffel nazywa ich procedur lub funkcji , C ++ nazywa ich funkcje składowe i (prawie) każdy inny język OO kiedykolwiek stworzono w całej historii informatyki, zarówno przed jak i po C ++ nazywa ich metody , tak że ostatni termin powinien być powszechnie rozumiane nawet przez Programiści C ++ (i Eiffel), chyba że tak naprawdę nigdy nie słyszeli o Simula, Smalltalk, Self, Objective-C, Newspeak, Java, C #, VB.NET, PHP, Python, Ruby, ECMAScript / JavaScript, Scala, CoffeeScript,…

Jörg W Mittag
źródło
Chodzi o to, że często oznaczają one subtelnie różne rzeczy w tych domenach. Właśnie dlatego OP pyta, czy lepiej trzymać się terminologii specyficznej dla domeny i dlaczego poprawną odpowiedzią jest „tak” ...
Lekkość
Właśnie zdałem sobie sprawę, że udowodniłeś mój punkt, powołując się na JavaScript, który nawet nie ma klas (jego OO jest oparty na prototypie). Więc w jaki sposób metody JavaScript mogą być takie same jak metody stosowane gdzie indziej? Wzajemna zrozumiałość, o którą się twierdzisz, w rzeczywistości nie istnieje.
Lekkość ściga się z Monicą
Protokół OOP nie ma znaczenia. OOP opiera się na założeniu, że obiekty komunikują się za pośrednictwem wiadomości (np. Serwery wysyłają do siebie żądania), a metoda odnosi się do sposobu (metody), w jaki konkretny obiekt reaguje na daną wiadomość. Prototypowy OO robi różnicę tylko pod względem sposobu dziedziczenia metod. To, co robi większą różnicę, to OOP oparte na gnieździe (jak Python) vs oparte na komunikatach (jak Ruby) i to, czy masz późne czy wczesne wiązanie.
saolof