Реификация - это процесс, с помощью которого абстрактное представление о компьютерной программе превращается в явную модель данных или другой объект, созданный на языке программирования . Вычислимый / адресуемый объект - ресурс - создается в системе как прокси для невычислимого / адресуемого объекта. Посредством овеществления то, что ранее было неявным, невыраженным и, возможно, невыразимым, явно формулируется и становится доступным для концептуальных (логических или вычислительных) манипуляций. Неформально овеществление часто называют «превращением чего-либо в первоклассного гражданина » в рамках конкретной системы. Некоторые аспекты системы могут быть переработаны во время разработки языка , что связано сотражение в языках программирования. Его можно применять как пошаговое уточнение во время разработки системы . Реификация - один из наиболее часто используемых приемов концептуального анализа и представления знаний .
Светоотражающие языки программирования [ править ]
В контексте языков программирования реификация - это процесс, посредством которого пользовательская программа или любой аспект языка программирования, который неявно присутствовал в переведенной программе и системе времени выполнения, выражается в самом языке. Этот процесс делает его доступным для программы, которая может проверять все эти аспекты как обычные данные . В рефлексивных языках данные овеществления причинно связаны со связанным овеществленным аспектом, так что изменение одного из них влияет на другой. Следовательно, данные овеществления всегда являются точным представлением связанного овеществленного аспекта [ требуется пояснение ] . Данные реификации часто называют объектом первого класса [цитата необходима ]. Реификация, по крайней мере частично, на сегодняшний день испытана на многих языках: в раннихдиалектах Лиспаи в современныхдиалектах Прологапрограммы обрабатывались как данные, хотя причинная связь часто оставалась ответственностью программиста. ВSmalltalk-80 компилятор от исходного текста до байт-кода был частью системы времени выполнения с самых первых реализаций языка. [1]
- Язык программирования C усиливает низкоуровневую детализацию адресов памяти .Многие конструкции языков программирования инкапсулируют детали распределения памяти в компиляторе и системе времени выполнения. В дизайне языка программирования C адрес памяти реифицируется и доступен для прямого управления другими языковыми конструкциями. Например, следующий код может использоваться при реализации драйвера устройства с отображением в память. Указатель буфера является прокси для адреса памяти 0xB800000.
символ * буфер = ( символ * ) 0xB800000 ; буфер [ 0 ] = 10 ;
- Языки функционального программирования, основанные на лямбда-исчислении, воплощают концепцию абстракции процедуры и приложения процедуры в форме лямбда-выражения .
- Язык программирования Scheme воплощает продолжения (примерно, стек вызовов).
- В C # реификация используется для того, чтобы параметрический полиморфизм был реализован в виде обобщений как первоклассной особенности языка.
- В языке программирования Java существуют «реифицируемые типы», которые «полностью доступны во время выполнения» (т. Е. Их информация не стирается во время компиляции). [2]
- REBOL превращает код в данные и наоборот.
- Многие языки, такие как Lisp , JavaScript и Curl , предоставляют процедуру evalили evaluate, которая эффективно переоснащает интерпретатор языка.
- Logtalk рамка для Пролога предлагает средства для изучения овеществления в контексте логического программирования .
- Smalltalk и языки Actor позволяют овеществлению блоков и сообщений , [3] , которые эквивалентны лямбда - выражений в Лисп и thisContext , который является материализация текущего исполнительного блока.
- Гомоиконные языки реифицируют синтаксис самого языка в форме абстрактного синтаксического дерева , обычно вместе с
eval
.
Вещество данных против уточнения данных [ править ]
Реификация данных ( пошаговое уточнение ) включает поиск более конкретного представления абстрактных типов данных, используемых в формальной спецификации .
Вещество данных - это терминология Венского метода разработки (VDM), который большинство людей назвали бы уточнением данных. Примером является шаг к реализации путем замены представления данных без аналога на предполагаемом языке реализации, таком как наборы, на представление, у которого есть аналог (например, карты с фиксированными доменами, которые могут быть реализованы с помощью массивов) или по крайней мере, тот, который ближе к аналогу, например, последовательности. Сообщество VDM предпочитает слово «овеществление», а не «уточнение», поскольку этот процесс больше связан с конкретизацией идеи, чем с ее уточнением. [4]
О подобных употреблениях см. Reification (лингвистика) .
В концептуальном моделировании [ править ]
Реификация широко используется в концептуальном моделировании . [5] Реифицируя отношения, мы рассматриваем их как единое целое. Цель материализации отношений - сделать их явными, когда к ним нужно добавить дополнительную информацию. Учитывайте тип отношений IsMemberOf(member:Person, Committee)
. Примером IsMemberOf
является отношение, которое представляет тот факт, что человек является членом комитета. На рисунке ниже показан пример совокупности IsMemberOf
отношений в табличной форме. Лицо P1 является членом комитетов C1 и C2 . Лицо P2 является членом только комитета C1 .
Однако тот же факт можно рассматривать как единое целое. Рассматривая отношения как сущность, можно сказать, что сущность укрепляет отношения. Это называется овеществлением отношений. Как и любой другой объект, он должен быть экземпляром типа объекта. В данном примере был назван тип объекта Membership
. Для каждого экземпляра IsMemberOf
существует один и только один экземпляр Membership
, и наоборот. Теперь стало возможным добавить больше информации к исходным отношениям. В качестве примера можно выразить тот факт, что «человек p1 был назначен членом комитета c1 лицом p2». Реифицированные отношения Membership
могут использоваться как источник новых отношений IsNominatedBy(Membership, Person)
.
Для связанных употреблений см. Reification (представление знаний) .
На унифицированном языке моделирования (UML) [ править ]
UML предоставляет конструкцию класса ассоциации для определения овеществленных типов отношений. Класс ассоциации - это единый элемент модели, который одновременно является разновидностью ассоциации и разновидностью класса. [6] Связь и тип сущности, которая реифицирует, являются одним и тем же элементом модели. Обратите внимание, что атрибуты не могут быть реифицируются.
В семантической сети [ править ]
RDF и OWL [ править ]
В языках семантической паутины , таких как Resource Description Framework (RDF) и Web Ontology Language (OWL), утверждение является бинарным отношением. Он используется для связывания двух людей или отдельного человека и значения. Иногда приложениям необходимо описывать другие операторы RDF, например, для записи информации, например, когда были сделаны утверждения или кто их сделал, что иногда называют информацией о происхождении . В качестве примера мы можем захотеть представить свойства отношения, такие как наша уверенность в этом, серьезность или сила отношения, релевантность отношения и так далее.
Пример из раздела концептуального моделирования описывает конкретного человека URIref person:p1
, который является членом committee:c1
. Тройка RDF из этого описания:
человек : p1 комитет : isЧлен комитета : c1 .
Вы можете сохранить еще два факта: (i) записать, кто назначил этого конкретного человека в этот комитет (заявление о самом членстве), и (ii) записать, кто добавил этот факт в базу данных (заявление о заявлении).
Первый случай - это случай классической реификации, подобной приведенной выше в UML: преобразовать членство и сохранить его атрибуты, роли и т.
комитет : Членство в rdf : тип сова : класс . комитет : membership12345 РДФ : Тип комитета : членство . комитет : членство12345 комитет : изЛицо человека : p1 . комитет : membership12345 комитет : inCommittee комитет : c1 . человек : p2 комитет : назначенный комитет: members12345 .
Кроме того, RDF предоставляет встроенный словарь, предназначенный для описания операторов RDF. Описание высказывания с использованием этого словаря называется овеществлением высказывания. RDF Овеществление словарный запас состоит из типа rdf:Statement
и свойств rdf:subject
, rdf:predicate
и rdf:object
. [7]
Используя словарь овеществления, овеществление утверждения о членстве человека будет дано путем присвоения этому утверждению URIref, например, committee:membership12345
чтобы описывающие утверждения можно было записать следующим образом:
комитет : membership12345Stat РДФ : Тип РДФ : Заявление . комитет : membership12345Stat РДФ : субъект человек : p1 . комитет : membership12345Stat РДФ : сказуемое комитет : isMemberOf . комитет : membership12345Stat РДФ : объект комитета : c1 .
Эти операторы говорят, что ресурс, идентифицированный с помощью, URIref committee:membership12345Stat
является оператором RDF, что субъект оператора относится к ресурсу, идентифицированному person:p1
, предикат оператора относится к ресурсу, идентифицированному committee:isMemberOf
, а объект оператора относится к ресурсу committee:c1
. Предполагая, что исходное утверждение действительно идентифицируется committee:membership12345
, должно быть ясно, сравнивая исходное утверждение с реификацией, что реификация действительно описывает его. Традиционное использование словаря реификации RDF всегда включает в себя описание оператора с помощью четырех операторов в этом шаблоне. Поэтому их иногда называют «квадроциклом овеществления». [7]
Используя реификацию в соответствии с этим соглашением, мы могли бы записать факт person:p3
добавления оператора в базу данных с помощью
человек : p3 комитет : addedToDatabase комитет : membership12345Stat .
Важно отметить, что при обычном использовании материализации предполагается, что субъект троек материализации идентифицирует конкретный экземпляр тройки в конкретном документе RDF, а не произвольную тройку, имеющую тот же субъект, предикат и объект. Это конкретное соглашение используется потому, что реификация предназначена для выражения таких свойств, как даты составления и исходная информация, как в уже приведенных примерах, и эти свойства необходимо применять к конкретным экземплярам троек. Обратите внимание, что описанная тройка (subject predicate object)
сама по себе не подразумевается такой реификационной четверкой (и не обязательно, чтобы она действительно существовала в базе данных). Это также позволяет использовать этот механизм для определения того, какие тройки не выполняются.
Возможности словаря овеществления в RDF ограничены отсутствием встроенных средств для присвоения URIrefs инструкциям, поэтому, чтобы выразить информацию о происхождении такого рода в RDF, нужно использовать какой-то механизм (за пределами RDF ), чтобы назначить URI отдельным операторам RDF, а затем сделать дальнейшие утверждения об этих отдельных операторах, используя их URI для их идентификации. [7]
В тематических картах [ править ]
В XML Topic Map (XTM) только тема может иметь имя или играть роль в ассоциации. Можно использовать ассоциацию, чтобы сделать утверждение о теме, но нельзя напрямую делать утверждения об этом утверждении. Однако можно создать тему, которая закрепляет конструкцию, не связанную с темой, на карте, что позволяет присвоить ассоциации имя и рассматривать ее как саму тему. [8]
n -арные отношения [ править ]
В языках семантической паутины, таких как RDF и OWL, свойство - это двоичное отношение, используемое для связи двух индивидов или индивида и значения. Однако в некоторых случаях естественным и удобным способом представления определенных концепций является использование отношений, связывающих человека с более чем одним человеком или ценностью. Эти отношения называются n-арными отношениями . Примеры представляют отношения между несколькими людьми, такими как комитет, человек, который является членом комитета, и другое лицо, которое назначило первого человека, который станет членом комитета, или покупатель, продавец и объект, который был куплен при описании покупка книги.
Более общий подход к овеществлению состоит в создании явного нового класса и n новых свойств для представления n- мерного отношения, что делает экземпляр отношения, связывающего n индивидов, экземпляром этого класса. Этот подход также можно использовать для представления информации о происхождении и других свойств для отдельного экземпляра отношения. [9]
: p1 a : Человек ; : Has_membership _ : membership_12345 . _ : members_12345 a : Членство ; : Committee : c1 ; : nominated_by : p2 .
Против. цитата [ править ]
Также важно отметить, что описанное здесь овеществление не то же самое, что «цитата» в других языках. Вместо этого реификация описывает отношения между конкретным экземпляром тройки и ресурсами, на которые она ссылается. Интуитивно овеществление можно прочитать как высказывание «эта тройка RDF говорит об этих вещах», а не (как в цитате) «эта тройка RDF имеет такую форму». Например, в примере реификации, используемом в этом разделе, тройка:
комитет : membership12345 РДФ : субъект человек : p1 .
Описание rdf:subject
исходного утверждения говорит, что предметом утверждения является ресурс (человек), идентифицированный URIref person:p1
. Он не утверждает, что предметом утверждения является сам URIref (то есть строка, начинающаяся с определенных символов), как это было бы в кавычках.
См. Также [ править ]
Поищите реификацию в Викисловаре, бесплатном словаре. |
- Денотационная семантика
- Формальная семантика языков программирования
- Мета-круговой оценщик
- Метамоделирование
- Метаобъект
- Метапрограммирование
- Нормализация по оценке
- Операционная семантика
- Отражение (информатика)
- Структура описания ресурсов
- Самостоятельный переводчик
- Тематические карты
Ссылки [ править ]
- ^ J. Мейлфант, М. Жак и F.-N. Демерс, Учебное пособие по поведенческой рефлексии и его реализации, архивировано 28 мая2010 г. в Wayback Machine
- ^ Спецификация языка Java, раздел 4.7 , Java SE 7 Edition
- ^ "Блоки и замыкания Smalltalk" . C2.com. 2009-10-15 . Проверено 9 октября 2010 .
- ^ Формальные методы Европа, Часто задаваемые вопросы, часть 13 Архивировано 12 марта 2005 г. в Wayback Machine .
- ^ Антони Оливе, Концептуальное моделирование информационных систем , Springer Verlag, 2007.
- ^ Унифицированный язык моделирования, надстройка UML , Object Management Group, 2007-11-02.
- ^ a b c «RDF Primer» . W3.org . Проверено 9 октября 2010 .
- ^ Практическое введение в тематические карты. Архивировано 3 февраля 2009 г. в Wayback Machine .
- ^ «W3C, определяющий N-арные отношения в семантической сети» . W3.org . Проверено 9 октября 2010 .