Из Википедии, бесплатной энциклопедии
  (Перенаправлено из протокола метаобъектов )
Перейти к навигации Перейти к поиску

В информатике , метаобъект является объектом , который манипулирует, создает, описывает, или реализуют объекты ( в том числе и себя). Объект, к которому относится метаобъект, называется базовым объектом. Некоторая информация, которую может определять метаобъект, включает тип базового объекта , интерфейс , класс , методы , атрибуты , дерево синтаксического анализа и т. Д. Метаобъекты являются примерами концепции отражения в информатике., где система имеет доступ (обычно во время выполнения) к своей внутренней структуре. Отражение позволяет системе существенно переписывать себя на лету, изменять свою собственную реализацию во время выполнения. [1]

Протокол метаобъектов [ править ]

Протокол метаобъекта (СС) , обеспечивает словарный запас ( протокол ) для доступа и управления структурой и поведением систем объектов. Типичные функции протокола метаобъектов включают: [2]

  • Создать или удалить новый курс
  • Создать новое свойство или метод
  • Заставить класс унаследовать от другого класса («изменить структуру класса»)
  • Сгенерировать или изменить код, определяющий методы класса

Протокол метаобъектов противоречит принципу открытости / закрытости Бертрана Мейера, согласно которому программные объектные системы должны быть открытыми для расширения, но закрытыми для модификации . Этот принцип эффективно проводит различие между расширением объекта путем добавления к нему и изменением объекта путем его переопределения, предполагая, что первое является желаемым качеством (« объекты должны быть расширяемыми для удовлетворения требований будущих вариантов использования »), в то время как последнее нежелательно (" объекты должны обеспечивать стабильный интерфейс, не подлежащий суммарной ревизииПротокол метаобъектов, напротив, прозрачно раскрывает внутренний состав объектов и всю объектную систему в терминах самой системы. На практике это означает, что программисты могут использовать объекты для переопределения себя, возможно, довольно сложными способами.

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

Реализация объектных систем таким образом открывает возможность радикального дискреционного изменения дизайна, обеспечивая глубокую гибкость, но привнося, возможно, сложные или трудные для понимания проблемы метастабильности (например, объектная система не должна деструктивно обновлять свой собственный протокол метаобъектов - свое внутреннее самопроизвольное обновление. представление - но потенциальную деструктивность некоторых обновлений нетривиально предсказать, и о ней может быть трудно рассуждать), в зависимости от рекурсивной глубины, на которую распространяются желаемые модификации. [3] По этой причине протокол метаобъектов, когда он присутствует в языке, обычно используется экономно и для специализированных целей, таких как программное обеспечение, которое преобразует другое программное обеспечение или самого себя сложными способами, например, при обратном проектировании. [4]

Время выполнения и время компиляции [ править ]

Когда компиляция недоступна во время выполнения, возникают дополнительные сложности для реализации протокола метаобъектов. Например, с помощью такого протокола можно изменить иерархию типов, но это может вызвать проблемы для кода, скомпилированного с альтернативным определением модели класса. В некоторых средах были найдены инновационные решения для этого, например, путем обработки проблем с метаобъектами во время компиляции. Хорошим примером этого является OpenC ++ . [5] Семантический Веб объектно-ориентированная модель является более динамичной , чем большинство стандартных систем объекта, и в соответствии с протоколами выполнения метаобъекта. Например, в модели семантической паутины ожидается, что классы изменят свои отношения друг к другу, и есть специальный механизм вывода.известен как классификатор, который может проверять и анализировать развивающиеся модели классов. [6]

Использование [ править ]

Первый протокол метаобъектов был на объектно-ориентированном языке программирования Smalltalk, разработанном в Xerox PARC . Объект Common Lisp System (CLOS) пришел позже и под влияние протокола Smalltalk, а также Brian C. Smith оригинальных исследования «s на 3-Лиспе как бесконечная башня оценщиков. [7] Модель CLOS, в отличие от модели Smalltalk, позволяет классу иметь более одного суперкласса ; это создает дополнительную сложность в таких вопросах, как определение происхождения иерархии классов для некоторого экземпляра объекта. CLOS также позволяет осуществлять динамическую мультиметодную отправку , которая обрабатывается с помощью общих функций.вместо передачи сообщений, как в единственной отправке Smalltalk . [8] Самой влиятельной книгой, описывающей семантику и реализацию протокола метаобъектов в Common Lisp, является «Искусство протокола метаобъектов » Грегора Кичалеса и др. [9]

Протоколы метаобъектов также широко используются в приложениях для разработки программного обеспечения. Практически во всех коммерческих CASE, реинжиниринговых и интегрированных средах разработки существует какая-то форма протокола метаобъектов для представления и управления артефактами дизайна. [10] [11] [12]

Протокол метаобъектов - это один из способов реализации аспектно-ориентированного программирования . Многие из первых основателей MOP, включая Грегора Кичалеса , с тех пор стали главными защитниками аспектно-ориентированного программирования. Kiczales et al. из PARC были наняты для разработки AspectJ для Java , языка, не имеющего собственного протокола метаобъектов.

См. Также [ править ]

  • Добрый (теория типов)
  • Метакласс
  • Javassist
  • Мета-объектная система Joose JavaScript
  • Мета-объектная система Moose Perl
  • OpenC ++
  • OpenJava
  • Единый язык моделирования : UML
  • Groovy

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

  1. ^ Смит, Брайан C (1982-01-01). «Процедурное отражение в языках программирования» . Технический отчет MIT (MIT-LCS-TR-272). Архивировано из оригинала 13 декабря 2015 года . Проверено 16 декабря 2013 года .
  2. ^ Фут, Брайан; Ральф Джонсон (1–6 октября 1989 г.). «Светоотражающие средства в Smalltalk-80» . Упсла '89 : 327–335. DOI : 10.1145 / 74877.74911 . ISBN 0897913337. Проверено 16 декабря 2013 года .
  3. ^ Искусство протокола метаобъектов , Приложение C - Жизнь с круговоротом
  4. ^ Фавр, Лилиана; Лилиана Мартинес; Клаудиа Перейра (2009). Обратный инжиниринг объектно-ориентированного кода на основе MDA . Springer. DOI : 10.1007 / 978-3-642-01862-6_21 . ISBN 978-3-642-01861-9.
  5. Перейти ↑ Chiba, Shigeru (1995). «Протокол метаобъектов для C ++» . Упсла '95 : 285–299. DOI : 10.1145 / 217838.217868 . ISBN 978-0897917032. Проверено 27 декабря 2013 года .
  6. ^ Knublauch, Holger; Оберле, Даниэль; Тетлоу, Фил; Уоллес, Эван (2006-03-09). «Учебник по семантической паутине для разработчиков объектно-ориентированного программного обеспечения» . W3C . Проверено 30 июля 2008 .
  7. ^ Дэниел П. Фридман; Митчелл Уэнд (1988). «Тайна башни раскрыта» . Тайна башни раскрыта: неотражающее описание отражающей башни . С. 298–307. DOI : 10.1145 / 319838.319871 . ISBN 978-0897912006.
  8. ^ «Интеграция объектно-ориентированного и функционального программирования» (PDF) . Проверено 7 июля +2016 .
  9. ^ Kiczales Грегор; Джим де Ривьер; Дэниел Г. Боброу (30 июля 1991 г.). Искусство протокола метаобъектов . MIT Press. ISBN 978-0262610742.
  10. ^ Джонсон, Льюис; Дэвид Р. Харрис; Кевин М. Беннер; Мартин С. Фезер (октябрь 1992 г.). «Овен: аспекты требований / спецификаций для KBSA». Заключительный технический отчет Римской лаборатории . RL-TR-92-248.
  11. ^ «Происхождение уточнения» (PDF) . www.metaware.fr . Белая книга Metaware. Архивировано из оригинального (PDF) 7 января 2014 года . Проверено 6 января 2014 года .
  12. ^ "Объект OMG's MetaObject Facility" . omg.org . Группа управления объектами . Проверено 7 января 2014 года .

Внешние ссылки [ править ]

  • Спецификация Guile MOP (GOOPS, основанная на Tiny CLOS)
  • Метаобъекты и протокол метаобъектов
  • Протокол метаобъектов Common Lisp Object System (содержит две главы из книги Искусство метаобъектного протокола )
  • Python 2.6 Метапрограммирование