'метод' против 'сообщения' против 'функции' против '???' - программирование
Подтвердить что ты не робот

'метод' против 'сообщения' против 'функции' против '???'

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

например: сообщение "rotate left n degrees" будет выполняться разным образом разными объектами, такими как форма, круг, прямоугольник и квадрат.

Сообщения: объекты обмениваются сообщениями.

-Objects отправляет и получает сообщения.

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

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

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

Ответ 3

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

Java, С# и т.д. имеют тенденцию использовать метод или метод экземпляра.

Ответ 4

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

Ответ 5

Термин "сообщение" может ссылаться на отправку сообщения объекту, который поддерживается на некоторых языках программирования, а не на других.

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

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

Ответ 6

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

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

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

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

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


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

Ответ 10

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

Ответ 11

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

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