ООП: на основе классов и прототипов, есть ли другие альтернативы? - PullRequest
5 голосов
/ 30 апреля 2010

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

Ответы [ 4 ]

2 голосов
/ 30 апреля 2010

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

См. Ruby Mixin Tutorial для ознакомления.

1 голос
/ 30 апреля 2010

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

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

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

EDIT

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

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

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

1 голос
/ 30 апреля 2010

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

0 голосов
/ 30 апреля 2010

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

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

...