Подтвердить что ты не робот

Является ли Erlang объектно-ориентированным?

Передача сообщений является фундаментальной частью Эрланг. Алан Кей утверждал, что передача сообщений является концепцией, более важной, чем объекты в его представлении о объектно-ориентированном программировании (и он "изобрел" термин!).

Можно ли считать Erlang объектно-ориентированным языком программирования (à la Smalltalk)?

4b9b3361

Ответ 1

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

Ответ 2

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

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

Но глядя на свою бесполезную попытку:

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

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

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

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

Ответ 3

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

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

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

Ответ 4

Джо Армстронг опубликовал сообщение в своем блоге об OO и ответил на этот вопрос.

По мере того, как Эрланг стал популярным, нас часто спрашивали "Is Erlang OO" - ну, из Конечно, истинный ответ был "Нет, конечно, нет" - но мы не сказали это вслух - поэтому мы изобрели серьезные изобретательные способы отвечая на вопрос, который был создан, чтобы создать впечатление, что Эрланг был (вроде) OO (если вы махали руками много), но на самом деле (Если вы слушали то, что мы на самом деле говорили, и читаем мелкий шрифт тщательно).

Кстати, статья очень интересна для ОО: http://harmful.cat-v.org/software/OO_programming/why_oo_sucks