Метаобъект

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

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

Содержание
  • 1 Протокол метаобъектов
    • 1.1 Время выполнения и время компиляции
    • 1.2 Использование
  • 2 См. Также
  • 3 ссылки
  • 4 Внешние ссылки
Протокол метаобъектов

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

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

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

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

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

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

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

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

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

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

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

Смотрите также
Рекомендации
внешняя ссылка
Последняя правка сделана 2024-01-02 08:32:07
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте