Насколько неправильно говорить о «методах» C ++ (в отличие от «функций-членов»)?

19

Я понимаю, что в соответствии со спецификацией C ++ не существует такой вещи, как «метод», и некоторые (многие? Большинство?) Программисты C ++ считают «метод» Java-измом. С другой стороны, даже на форуме C ++ люди, кажется, говорят о методах без подергивания. Я ищу известные соглашения или общие практики в отношении этой терминологии.

Я документирую API, который имеет версии C ++ и Java. Разработчики фактически сохранили одинаковые имена классов и методов / функций-членов между ними, вероятно, для удобства переноса и тестирования. Из-за этого часть того, что должно быть задокументировано об этих API, находится «над» выбором языка; Мне нужно уметь вообще говорить о Foos и Bars, с их методами baz () и mumble () ...?

Если я расскажу о методах, которые Java-программисты сочтут естественными, и, похоже, программисты на C ++, вероятно, поймут, но некоторые сочтут это неправильным. Мой вопрос: насколько это отвратительно на практике ? Как обычно обсуждаются функции-члены C ++ в контексте «общего ООП», а не в специфических для C ++? Есть ли лучший способ говорить о функциях-членах так, чтобы это не было неверно ни для одного языка? («Функции-члены» немного многословны.)

Это не опрос общественного мнения; Я пытаюсь определить, существуют ли реальные соглашения или общие практики для решения этой проблемы.

Мне известен этот вопрос , но он касается ООП в целом и не спрашивает о конкретных языках.

Моника Челлио
источник
Я прочитал справочный центр и просмотрел список тегов, прежде чем спрашивать об этом. Я сделал что-то не так, спросив это здесь?
Моника Челлио
Тщательное голосование, которое вы имеете, в первую очередь основано на мнении, и это вполне может быть. Не уверен, насколько хорошо это может работать на любом сайте SE, просто потому, что трудно авторитетно сказать, будут ли люди раздражаться на вас и в какой степени они будут быть .. Один человек может подумать, что это совершенно нормально, а другой подумает, что это ужасное нарушение терминологии, как вы описали в Q-, из-за этого это вещь,
относящаяся
2
Концепция методов ООП наиболее четко отображалась бы в «виртуальной функции-члене» в C ++, но это то же самое. На стороне Java существует худшая терминология, такая как «статические методы», которые не являются методами, а являются функциями. Просто продолжайте использовать независимое от языка слово «метод», и все поймут, что вы имеете в виду. Если кто-то настаивает на том, что в C ++ нет методов, это просто на самом деле неправильно и невероятно раздражает избавление от велосипедов.
Am
1
@ JimmyHoffa это лучше?
Моника Челлио
3
Просто назовите их методы в вашем документе API для нескольких языков. Вы можете включить фразу во вступительный текст, например: «Чтобы попытаться не зависеть от языка программирования, в этой документации API будет использоваться термин« метод »для ссылки на функции-члены C ++».
Брандин

Ответы:

11

Почему бы вам не включить объяснение (очень похожее на то, что вы сделали в своем вопросе) во вводную часть документации, например, в раздел « Соглашения »? Затем вы могли бы объяснить, что термин «метод», используемый в вашей документации, подразумевается в общем смысле метода (Java), функции-члена (C ++), ... поскольку документация применима ко всем реализациям.

sceaj
источник
Это то, что я сделал, и до сих пор люди, кажется, согласны с этим. Спасибо за предложение.
Моника Челлио
15

Ну, ты не будешь казнен за это.

Жалоба в мире C ++ - это не педантичность, а двусмысленность. В пустыне так много разных «методов», в зависимости от того, о чем вы говорите, и многие из нас предпочитают придерживаться стандартной терминологии, чтобы избежать недопонимания позже. Это примерно означает «статическая / [нестатическая] [чистая] виртуальная / [не виртуальная] член / [бесплатная] функция».

Если вы вместо этого напишите «method» в своей документации, некоторые программисты на C ++ могут жаловаться на то, что не совсем понятно, о чем вы говорите, или беспокоиться о том, что, если вы не знакомы с этим соглашением C ++, чего еще вам не хватает?

Но я уверен, что есть миллионы профессиональных программистов на C ++, которые сами не подозревают, что это даже вещь. Это большой старый мир.

Вы не будете казнены за это.

Гонки легкости с Моникой
источник
3

Eiffel называет их рутинами или функциями , C ++ называет их функциями-членами и (почти) каждый отдельный язык ОО, когда-либо созданный за всю историю вычислений, как до, так и после C ++, называет их методами , так что последний термин обычно следует понимать даже Программисты на C ++ (и Eiffel), если они действительно никогда не слышали о Simula, Smalltalk, Self, Objective-C, Newspeak, Java, C #, VB.NET, PHP, Python, Ruby, ECMAScript / JavaScript, Scala, CoffeeScript,…

Йорг Миттаг
источник
За исключением того, что они часто означают слегка разные вещи в этих областях. Вот почему ОП спрашивает, лучше ли придерживаться предметно-ориентированной терминологии и почему правильный ответ - «да» ...
Легкость гонок с Моникой
Просто понял, что вы доказали мою точку зрения, сославшись на JavaScript, который даже не имеет классов (его ООП основан на прототипах). Так как же тогда методы JavaScript могут быть такими же, как методы в других местах? Взаимопонимание, на которое вы претендуете, на самом деле не существует.
Легкость гонок с Моникой
ООП на основе прототипа не имеет значения. ООП основано на том, что объекты обмениваются сообщениями (например, серверы отправляют запросы друг другу), а метод относится к способу (методу), в котором какой-либо конкретный объект отвечает на данное сообщение. Прототип ОО имеет значение только в отношении того, как методы могут наследоваться. Что будет иметь большее значение, так это ООП на основе слотов (например, Python) и ООП на основе сообщений (например, Ruby), а также наличие поздней или ранней привязки.
saolof