2008-09-04 4 views
31

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

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

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

ответ

18

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

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

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

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

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

+7

Если функции являются атомарными, это делает оператор нейтроном? Идентификатор кварка? И где бозон Хиггса? – 2009-03-06 14:55:24

+3

Исключением являются бозон Хиггса. Неизбежная часть экзистенции, но чертовски трудно найти, когда вы ищете их. – JonC 2011-11-08 22:06:03

0

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

+3

Происхождение это старый дизайн Smalltalk. Алан Кей коротко играл с актерской моделью параллелизма и делал каждый отдельный объект своим собственным актером, работающим в своей собственной нити. В этой системе вызов метода действительно * был * асинхронным отправкой сообщений. Этот дизайн был быстро отменен, терминологии не было. – 2009-01-14 19:57:53

0

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

3

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

Java, C# и т.п. склонный использовать способ или пример способ.

3

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

0

Вот некоторые упрощенные определения:

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

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

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

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


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

2

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

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

Цель, я полагаю, использует этот метод обмена сообщениями.

0

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

10

Message! = Method! = Function

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

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

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

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

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

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

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

0

метод: похоже функционировать на традиционных языках

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

2

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

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

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

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

Смежные вопросы