Jump to content

Метаобъект

(Перенаправлено из протокола Metaobject )

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

Протокол метаобъекта

[ редактировать ]

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

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

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

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

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

Время выполнения и время компиляции

[ редактировать ]

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

Использование

[ редактировать ]

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

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

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

См. также

[ редактировать ]
  1. ^ Смит, Брайан С. (1 января 1982 г.). «Процедурная рефлексия в языках программирования» . Технический отчет MIT (MIT-LCS-TR-272). Архивировано из оригинала 13 декабря 2015 года . Проверено 16 декабря 2013 г.
  2. ^ Фут, Брайан; Ральф Джонсон (1–6 октября 1989 г.). «Отражательные средства в Smalltalk-80» . Материалы конференции «Объектно-ориентированные системы, языки и приложения программирования» . стр. 327–335. дои : 10.1145/74877.74911 . ISBN  0897913337 . Проверено 16 декабря 2013 г.
  3. ^ Искусство протокола метаобъектов , Приложение C — Жизнь с цикличностью
  4. ^ Фавр, Лилиана; Лилиана Мартинес; Клаудия Перейра (2009). «Обратный инжиниринг объектно-ориентированного кода на основе MDA». Моделирование предприятия, бизнес-процессов и информационных систем . Конспекты лекций по обработке деловой информации. Том. 29. Спрингер. стр. 251–263. дои : 10.1007/978-3-642-01862-6_21 . ISBN  978-3-642-01861-9 .
  5. ^ Тиба, Сигэру (1995). «Протокол метаобъектов для C++» . Материалы десятой ежегодной конференции по системам, языкам и приложениям объектно-ориентированного программирования . стр. 285–299. дои : 10.1145/217838.217868 . ISBN  978-0897917032 . S2CID   3090058 . Проверено 27 декабря 2013 г.
  6. ^ Кнублаух, Хольгер; Оберле, Дэниел; Тетлоу, Фил; Уоллес, Эван (9 марта 2006 г.). «Учебник по семантической сети для разработчиков объектно-ориентированного программного обеспечения» . W3C . Проверено 30 июля 2008 г.
  7. ^ Дэниел П. Фридман; Митчелл Ванд (1988). «Тайна башни раскрыта: неотражающее описание отражающей башни». Материалы конференции ACM 1986 года по LISP и функциональному программированию - LFP '86 . стр. 298–307. дои : 10.1145/319838.319871 . ISBN  978-0897912006 . S2CID   7974739 .
  8. ^ «Интеграция объектно-ориентированного и функционального программирования» (PDF) . Проверено 7 июля 2016 г.
  9. ^ Кичалес, Грегор; Джим де Ривьер; Дэниел Дж. Боброу (30 июля 1991 г.). Искусство метаобъектного протокола . Массачусетский технологический институт Пресс. ISBN  978-0262610742 .
  10. ^ Джонсон, Льюис; Дэвид Р. Харрис; Кевин М. Беннер; Мартин С. Физер (октябрь 1992 г.). «Овен: аспекты требований/спецификаций для KBSA». Заключительный технический отчет Римской лаборатории . РЛ-ТР-92-248.
  11. ^ «Происхождение Refine» (PDF) . www.metaware.fr . Технический документ по метапрограммам. Архивировано из оригинала (PDF) 7 января 2014 года . Проверено 6 января 2014 г.
  12. ^ «Метаобъектная служба OMG» . омг.орг . Группа управления объектами . Проверено 7 января 2014 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 84b4dd740770f264f88a3ca870488b34__1712016240
URL1:https://arc.ask3.ru/arc/aa/84/34/84b4dd740770f264f88a3ca870488b34.html
Заголовок, (Title) документа по адресу, URL1:
Metaobject - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)