«метод» против «сообщение» против «функция» против «???» - PullRequest
32 голосов
/ 04 сентября 2008

Я недавно задал вопрос о том, что я назвал "вызовами методов". Ответ называется "сообщения". Как программист-хобби-самоучка, пытающийся сформулировать вопросы, которые не делают меня похожим на идиота, я понимаю, что используемая мной терминология многое говорит о том, как я научился программировать.

Существует ли различие между различными терминами для методов / сообщений / и т. Д. в ОО программировании? Разница заключается в том, что разные языки программирования используют разные термины для описания сходных понятий?

Кажется, я помню, что в языках, предшествующих ОО, иногда проводилось различие между «подпрограммами» и «функциями» в зависимости от того, ожидалось ли возвращаемое значение, но даже тогда было ли это языковым отличием

Ответы [ 11 ]

18 голосов
/ 04 сентября 2008

Я обнаружил, что это язык и парадигма программирования. Одна парадигма - ООП - относится к объектам с методами-членами, которые концептуально представляют собой способ отправки сообщений этим объектам (например, это представление отражено в UML).

Другая парадигма - функциональная - может включать или не включать классы объектов, но функции являются атомарной единицей работы.

В структурированном программировании у вас были подпрограммы (обратите внимание, что префикс «sub» подразумевает структуру).

В императивном программировании (которое во многом пересекается со структурированным, но немного другим взглядом на вещи) у вас более формальное представление о мире, и поэтому «функции» представляют некоторую операцию (часто математическую). 1007 *

Все, что вам нужно сделать, чтобы не звучать как руб, - это использовать терминологию, используемую в справочнике по языку для используемого вами языка.

11 голосов
/ 06 марта 2009

Сообщение! = Метод! = Функция

в ООП разные объекты могут иметь разные методы , связанные с одним и тем же сообщением .

Например: сообщение «Повернуть влево на n градусов» будет реализовано различными объектами, такими как форма, круг, прямоугольник и квадрат.

Сообщения: объекты общаются через сообщения.

-Объекты отправлять и получать сообщения.

- ответ на сообщение выполняет метод.

-используемый метод - определить, будет ли получатель во время выполнения.

В C ++ методы и сообщения называются членами функции.

3 голосов
/ 04 сентября 2008

Я почти уверен (но быстрая Википедия проверка, кажется, подтверждает это), что терминология "передачи сообщений" исходит от сообщества Smalltalk. Я думаю, что это более или менее эквивалентно вызову метода.

3 голосов
/ 04 сентября 2008

Я полагаю, сообщение используется в smalltalk.

Java, C # и т. Д. Обычно используют метод или метод экземпляра .

2 голосов
/ 03 июня 2011

В объектно-ориентированных реализациях, таких как C #, концепция «сообщения» на самом деле не существует как явная языковая конструкция. Вы не можете посмотреть на конкретный фрагмент кода и сказать «есть сообщение».

Вместо этого метод класса объекта предполагает, что другие объекты могут отправлять сообщения определенного типа, которые запускают поведение в этом методе. В итоге вы просто указываете метод напрямую, а не отправляете сообщение.

В других реализациях, таких как Smalltalk, вы можете видеть, как передается сообщение, а принимающий объект может делать с этим сообщением то, что он будет.

Существуют библиотеки, расположенные поверх языков, таких как C #, которые пытаются восстановить в языке явное ощущение передачи сообщений. Я готовил один для собственного удовольствия здесь: http://collaborateframework.codeplex.com/

2 голосов
/ 04 сентября 2008

Термин «Сообщение» может относиться к отправке сообщения объекту, что поддерживается в некоторых языках программирования, а не в других.

Если объект поддерживает сообщение, он выполнит некоторый код. Иначе он просто проигнорирует это. Это более динамичный подход, чем явный вызов функции / метода, когда объект должен поддерживать эту функцию.

Я полагаю, что Objective-c использует этот метод обмена сообщениями.

0 голосов
/ 14 октября 2009

метод : аналогично функции в традиционных языках

сообщение : аналогично передаче параметров в традиционном языке

0 голосов
/ 04 сентября 2008

Я считаю, что на данном этапе это вопрос предпочтения. Упомянутые вами слова в основном являются синонимами в современных языках, и по большей части люди поймут, что вы имеете в виду, если вы скажете «метод» или «функция». Если вы используете «сообщение», которое действительно используется только в ООП, то вы можете запутать то, что вы пытаетесь передать. Например: «Мне нужно создать сообщение, чтобы отправить сообщение электронной почты». Другими терминами, которые могут быть синонимичными, и это не полный список, являются подпрограмма, действие, процедура, операция (хотя обычно математическая по своей природе), подпрограмма, команда ...

0 голосов
/ 04 сентября 2008

Вот несколько упрощенных определений:

методы / Подпрограммы / пустот: выполнить действие

функции: выполнить действие и вернуть значение

события: Вызваны, когда объект действует на

Обработчики: функции / методы, которые обрабатывают события


PS: это прекрасный пример того, почему SO должен поддерживать теги DL / DT / DD.

0 голосов
/ 04 сентября 2008

Обычно, «Метод» кажется подходящим названием для функций. Однако у каждого языка есть свои ключевые слова. Delphi, например, даже делает разницу между методами, которые возвращают что-то («функции»), и методами, которые ничего не возвращают («процедуры»), тогда как в языках типа C нет никакой разницы.

...