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

StackOverflow https://stackoverflow.com/questions/43777

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

Сообщения:Объекты взаимодействуют посредством сообщений.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Мероприятия: вызываются при воздействии на объект

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


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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top