Действительно ли Erlang объектно-ориентирован? [закрытый]

27
задан Mr. X 7 August 2010 в 18:17
поделиться

3 ответа

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

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

Конечно, Erlang на более низком уровне демонстрирует свои функциональные аспекты, но я снова думаю, что на более высоком уровне (где вы передаете и координируете сообщения между процессами) Erlang ведет себя объектно-ориентированным образом. Вы просто не можете увлечься мыслью, что объектная ориентация - это все о классах, наследовании и вызове методов (что отличается от передачи сообщений). Только так парадигма представлена ​​нам в большинстве основных языков.

8
ответ дан 28 November 2019 в 04:30
поделиться

Джо Армстронг официально заявил, что считает Erlang "возможно, единственным объектно-ориентированным языком" (контекст добавляет "ОО в понимании Алана Кея"). Джонсон в том же интервью указывает на те же вещи, что и Шон Копенгавер в своем ответе: в малом Erlang - чисто функциональный язык; в большом, с процессами, он выглядит в точности как объектно-ориентированный язык в стиле Кея.

36
ответ дан 28 November 2019 в 04:30
поделиться

Цитата из Википедии, которая цитирует здесь :

Бенджамин Кюир Пирс и некоторые другие исследователи считают тщетными любые попытки свести ООП к минимальному набору функций.

Но если посмотреть на их собственную тщетную попытку:

  • Динамическая диспетчеризация - если вы относитесь к процессу Erlang как к объекту, то да, он поддерживается.
  • Инкапсуляция - если вы рассматриваете отправку сообщения / ответ как вызов метода, она поддерживается.
  • Полиморфизм подтипа - своего рода - если вы достаточно расширите определение поведения, он поддерживает
  • наследование (или делегирование) объектов - без какой-либо проверки правильности вы можете заменить один объект другим - так что допустим, что это нормально
  • Открытая рекурсия - она ​​поддерживается (отправка в собственный процесс)

Так что да - с дымкой и вспышками вы можете попробовать заявить, что Erlang объектно-ориентированный. Но я мог бы использовать те же приемы, чтобы представить C как объектно-ориентированный язык, потому что вы можете использовать в нем стиль объектно-ориентированного программирования и реализовать vtables вручную.

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

Другим ответом может быть «зачем вообще классифицировать» / «кому нужно знать»?

17
ответ дан 28 November 2019 в 04:30
поделиться