Метакласс

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Метакласс (англ. Metaclass) — в объектно-ориентированном программировании это класс, экземпляры которого в свою очередь являются классами[1][2].

Поддержка языками программирования[править | править вики-текст]

Не все объектно-ориентированные языки программирования поддерживают метаклассы. Те из них, что поддерживают, реализуют разный подход с своим собственным протоколом, правилами создания и обращения[3].

Среди языков, поддерживающих метаклассы:

Кроме того, существует целый ряд узкоспециализированных, особенно так называемых «академических» языков программирования, поддерживающих и исследующих концепцию метаклассов[4].

Особняком стоит Java, где также есть единственный метакласс — Class (описывает классы), который располагается в библиотеке java.lang. Однако, развитой концепции работы с метаклассами Java не предоставляет.

Поддержка платформами[править | править вики-текст]

Метаклассы могут существовать не только как сущность языка программирования, но и как сущность многоязыковой платформы. Наиболее явно метаклассы выражены в IBM System Object Model. Архитекторы SOM учитывали положительные стороны CLOS и решили один из её недостатков, несовместимость метаклассов, уникальным на то время способом. Несовместимость метаклассов — это ситуация, когда метакласс подкласса не является подклассом метакласса. В CLOS это приводит к аварийному завершению. Ситуация может возникнуть, когда разные части системы разрабатываются разными командами, и структура классов одной части системы изменилась, а в другой части системы эти изменения не синхронизированы. Одной из целей SOM являлось обеспечение максимальной совместимости на бинарном уровне между релизами. Инновационным решением, введённым в SOM 2.0 является создание анонимного подкласса нескольких метаклассов в случае, если ни один из метаклассов класса не является подклассом для остальных. В CLOS и SOM 1.0 указание метакласса является требованием. В SOM 2.0 указание метакласса является пожеланием, а реальный метакласс может быть создан во время исполнения, наследуясь от нескольких родителей: от желаемого метакласса, а также от метаклассов каждого надкласса.

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. Мейер, Бертран «Основы объектно-ориентированного программирования»
  2. Wolfgang Klas, Michael Schrefl Metaclasses and Their Application. Data Model Tailoring and Database Integration. — Berlin; Heidelberg; New York; Barcelona; Budapest; Hong Kong; London; Milan; Paris; Tokyo : Springer, 1995 (Lecture notes in computer science; Vol. 943) ISBN 3-540-60063-9
  3. Ira R. Forman and Scott Danforth Putting Metaclasses to Work — 1999. ISBN 0-201-43305-2.
  4. Noury Bouraqad Efficient Support for Mixin-Based Inheritance Using Metaclasse.

Литература[править | править вики-текст]

  1. И. Ю. Баженова, «Delphi 7 самоучитель программиста», «Москва» 2003

Ссылки[править | править вики-текст]