ООП: базирующийся класс и базирующийся прототип, является там другими альтернативами?

Я знаю об основанных на классах и основанных на протипе объектно-ориентированных языках программирования, есть ли какие-либо другие альтернативы? Каковы они?

5
задан Gabriel Ščerbák 30 April 2010 в 16:08
поделиться

4 ответа

Это действительно два основных подхода, лежащих в основе объектно-ориентированных языков, и я не знаю еще одного совершенно другого базового принципа.

Но существует множество вариантов обоих подходов, а также множество других конструкций языка программирования , которые решают проблему повторного использования / расширения либо на основе классов, либо на основе прототипов. язык. Примеры: черты, примеси, методы расширения, частичный класс, дженерики, слоты первого класса, разделенные объекты и т. Д. Многие такие конструкции впервые предлагаются в исследовательских статьях (конференции ECOOP, OOPSLA, POPL), а некоторые из них становятся мейнстрим на популярных языках. Но я бы назвал их вариациями , а не новаторским основополагающим принципом.

Обратите внимание, что вы можете имитировать объектно-ориентированное программирование на языках, которые не являются объектно-ориентированными сами по себе . Например, в Clojure multi-method . Объектно-ориентированное и функциональное программирование также постепенно объединяется, например, в Scala.

РЕДАКТИРОВАТЬ

На самом деле сложно составить список классических / основополагающих статей, и я не претендую на то, чтобы иметь для этого достаточно знаний. Если он где-то есть, мне было бы очень интересно его посмотреть :) Тем не менее, вот несколько, которые могут вас заинтересовать.

Наследование, делегирование, подтипирование:

Модуль, композиция, адаптация

1
ответ дан 15 December 2019 в 00:54
поделиться

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

http://en.wikipedia.org/wiki/Programming_paradigm

0
ответ дан 15 December 2019 в 00:54
поделиться

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

См. Введение в Ruby Mixin Tutorial .

2
ответ дан 15 December 2019 в 00:54
поделиться

В Go есть концепция, похожая на классы, но без наследования и с очень гибкими интерфейсами. Подробнее об этом можно прочитать в Эффективный Go.

1
ответ дан 15 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: