Реификация (информатика) - Reification (computer science)
Реификация это процесс, посредством которого абстрактное представление о компьютерная программа превращается в явный модель данных или другой объект, созданный в язык программирования. Вычислимый / адресный объект - ресурс - создается в системе как прокси для невычислимого / адресуемого объекта. Посредством овеществления то, что ранее было неявным, невыраженным и, возможно, невыразимым, явно формулируется и становится доступным для концептуальных (логических или вычислительных) манипуляций. Неформально материализацию часто называют «создание чего-то первоклассный гражданин "в рамках конкретной системы. Некоторые аспекты системы могут быть воплощены в время разработки языка, что связано с отражение в языках программирования. Может применяться как пошаговое уточнение в время разработки системы. Реификация - одна из наиболее часто используемых техник концептуальный анализ и представление знаний.
Светоотражающие языки программирования
В контексте языки программирования, реификация - это процесс, посредством которого пользовательская программа или любой аспект языка программирования, который неявно присутствовал в переведенной программе и системе времени выполнения, выражаются на самом языке. Этот процесс делает его доступным для программы, которая может проверять все эти аспекты как обычные данные. В рефлексивные языки данные овеществления причинно связаны со связанным овеществленным аспектом, так что изменение одного из них влияет на другой. Следовательно, данные овеществления всегда являются точным представлением соответствующего овеществленного аспекта.[требуется разъяснение ]. Часто говорят, что данные реификации объект первого класса[нужна цитата ]. Реификация, по крайней мере частично, на сегодняшний день переживается во многих языках: в раннем Диалекты Лиспа и в настоящее время Пролог диалекты программы обрабатывались как данные, хотя причинно-следственная связь часто оставалась на ответственность программиста. В Болтовня -80 компилятор от исходного текста к байт-коду был частью системы времени выполнения с самых первых реализаций языка.[1]
- В Язык программирования C усиливает детализацию низкого уровня адреса памяти.Многие конструкции языков программирования инкапсулируют детали распределения памяти в компиляторе и системе времени выполнения. В дизайне языка программирования C адрес памяти реифицируется и доступен для непосредственного управления другими языковыми конструкциями. Например, следующий код может использоваться при реализации драйвера устройства с отображением в память. Указатель буфера является прокси для адреса памяти 0xB800000.
char* буфер = (char*) 0xB800000; буфер[0] = 10;
- Функциональные языки программирования на основе лямбда-исчисление конкретизировать концепцию абстракции процедуры и приложения процедуры в виде Лямбда-выражение.
- В Схема язык программирования усиливает продолжения (примерно, стек вызовов).
- В C #, овеществление используется для создания параметрический полиморфизм реализован в виде дженериков как первоклассная функция языка.
- в Ява В языке программирования существуют «реифицируемые типы», которые «полностью доступны во время выполнения» (т.е. их информация не стирается во время компиляции).[2]
- REBOL превращает код в данные и наоборот.
- Многие языки, такие как Лисп, JavaScript, и Завиток, предоставить
оценка
или жеоценивать
процедура что эффективно укрепляет языковой интерпретатор. - В Logtalk рамки для Пролог предлагает средства для изучения материализации в контексте логическое программирование.
- Болтовня и Актерские языки разрешить овеществление блоков и Сообщения,[3] которые эквивалентны лямбда-выражениям в Лиспе, и thisContext который является воплощением текущего исполняемого блока.
- Гомоиконические языки преобразовать синтаксис самого языка в форму абстрактное синтаксическое дерево, обычно вместе с
оценка
.
Реификация данных против уточнения данных
Реификация данных (пошаговое уточнение ) предполагает поиск более конкретного представления абстрактные типы данных используется в формальная спецификация.
Верификация данных - это терминология Венский метод развития (VDM), который большинство людей назвали бы уточнением данных. Примером является шаг к реализации путем замены представления данных без аналога на предполагаемом языке реализации, таком как наборы, на представление, у которого есть аналог (например, карты с фиксированными доменами, которые могут быть реализованы с помощью массивов) или по крайней мере, тот, который ближе к аналогу, например, последовательности. Сообщество VDM предпочитает слово «овеществление», а не «уточнение», поскольку этот процесс больше связан с конкретизацией идеи, чем с ее уточнением.[4]
Для аналогичного использования см. Реификация (лингвистика).
В концептуальном моделировании
Реификация широко используется в концептуальное моделирование.[5] Реализовать отношения означает рассматривать их как сущность. Цель материализации отношений - сделать их явными, когда к ним нужно добавить дополнительную информацию. Учитывайте тип отношений IsMemberOf (член: Человек, Комитет)
. Пример IsMemberOf
это отношения, которые представляют тот факт, что человек является членом комитета. На рисунке ниже показан пример популяции IsMemberOf
отношения в табличной форме. Человек P1 является членом комитетов C1 и C2. Человек P2 является членом комитета C1 Только.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Reification_example1.png/500px-Reification_example1.png)
IsMemberOf
отношения в табличной форме. Лицо P1 является членом комитетов C1 и C2. Лицо P2 является членом только комитета C1.Однако тот же факт можно рассматривать как единое целое. Рассматривая отношения как сущность, можно сказать, что сущность закрепляет отношения. Это называется овеществлением отношений. Как и любой другой объект, он должен быть экземпляром типа объекта. В данном примере тип объекта был назван Членство
. Для каждого экземпляра IsMemberOf
, есть один-единственный экземпляр Членство
, наоборот. Теперь стало возможным добавить больше информации к исходным отношениям. В качестве примера можно выразить тот факт, что «человек p1 был назначен членом комитета c1 лицом p2». Реифицированные отношения Членство
можно использовать как источник новых отношений IsNominatedBy (членство, лицо)
.
Для связанных способов использования см. Реификация (представление знаний).
На унифицированном языке моделирования (UML)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Reification_example2.png/400px-Reification_example2.png)
UML обеспечивает класс ассоциации конструкция для определения овеществленных типов отношений. Класс ассоциации - это отдельный элемент модели, который одновременно является разновидностью ассоциации и разновидностью класса.[6] Связь и тип сущности, которая реифицирует, являются одним и тем же элементом модели. Обратите внимание, что атрибуты не могут быть реифицируются
В семантической сети
RDF и OWL
В Семантическая сеть языки, такие как Структура описания ресурсов (RDF) и Язык веб-онтологий (OWL) утверждение - это бинарное отношение. Он используется для связывания двух людей или отдельного человека и значения. Иногда приложениям необходимо описывать другие операторы RDF, например, для записи информации, например, когда были сделаны операторы или кто их сделал, что иногда называется "происхождение "информация. В качестве примера мы можем захотеть представить свойства отношения, такие как наша уверенность в нем, серьезность или сила отношения, релевантность отношения и так далее.
Пример из раздела концептуального моделирования описывает конкретного человека с URIref person: p1
, который является членом комитет: c1
. Тройка RDF из этого описания:
человек:p1 комитет:isMemberOf комитет:c1 .
Вы можете сохранить еще два факта: (i) записать, кто назначил этого конкретного человека в этот комитет (заявление о самом членстве), и (ii) записать, кто добавил этот факт в базу данных (заявление о заявлении).
Первый случай - это случай классической реификации, подобной приведенной выше в UML: преобразовать членство и сохранить его атрибуты и роли и т. Д .:
комитет:Членство rdf:тип сова:Учебный класс . комитет:членство12345 rdf:тип комитет:Членство . комитет:членство12345 комитет:ofPerson человек:p1 . комитет:членство12345 комитет:inCommittee комитет:c1 . человек:p2 комитет:назначен комитет:членство12345 .
Кроме того, RDF предоставляет встроенный словарь, предназначенный для описания операторов RDF. Описание высказывания с использованием этого словаря называется овеществлением высказывания. Словарь реификации RDF состоит из типа rdf: Заявление
, а свойства rdf: тема
, rdf: предикат
, и rdf: объект
.[7]
Используя словарь овеществления, овеществление утверждения о членстве человека будет дано путем присвоения этому утверждению URIref, например комитет: членство12345
так что описывающие утверждения можно записать следующим образом:
комитет:членство12345Stat rdf:тип rdf:Заявление . комитет:членство12345Stat rdf:предмет человек:p1 . комитет:членство12345Stat rdf:предикат комитет:isMemberOf . комитет:членство12345Stat rdf:объект комитет:c1 .
Эти утверждения говорят, что ресурс, идентифицированный Комитет URIref: members12345Stat
является заявлением RDF, что предмет утверждения относится к ресурсу, идентифицированному человек: p1
, предикат оператора относится к ресурсу, идентифицированному комитет: isMemberOf
, а объект утверждения относится к ресурсу комитет: c1
. Предполагая, что исходное утверждение фактически идентифицируется комитет: членство12345
, сравнивая исходное утверждение с овеществлением, должно быть ясно, что реификация действительно описывает его. Традиционное использование словаря реификации RDF всегда включает в себя описание оператора с помощью четырех операторов в этом шаблоне. Поэтому их иногда называют «квадроциклом овеществления».[7]
Используя реификацию в соответствии с этим соглашением, мы могли бы зафиксировать тот факт, что человек: p3
добавил оператор в базу данных
человек:p3 комитет:addedToDatabase комитет:членство12345Stat .
Важно отметить, что при обычном использовании материализации предполагается, что субъект троек материализации идентифицирует конкретный экземпляр тройки в конкретном документе RDF, а не произвольную тройку, имеющую тот же субъект, предикат и объект. Это конкретное соглашение используется, потому что реификация предназначена для выражения таких свойств, как даты составления и исходная информация, как в уже приведенных примерах, и эти свойства необходимо применять к конкретным экземплярам троек. Отметим, что описанный тройной (объект предиката субъекта)
сам по себе не подразумевается такой реификационной четверкой (и не обязательно, чтобы она действительно существовала в базе данных). Это позволяет также использовать этот механизм для выражения того, какие тройки нет держать.
Возможности словаря овеществления в RDF ограничены отсутствием встроенных средств для назначения URIrefs операторам, поэтому, чтобы выразить информацию о «происхождении» такого рода в RDF, необходимо использовать какой-то механизм (за пределами RDF ), чтобы назначить URI отдельным операторам RDF, а затем сделать дальнейшие утверждения об этих отдельных операторах, используя их URI для их идентификации.[7]
В тематических картах
В Карта тем XML (XTM), только тема может иметь имя или играть роль в ассоциации. Можно использовать ассоциацию, чтобы сделать утверждение о теме, но нельзя напрямую делать утверждения об этом утверждении. Тем не менее, можно создать тему, которая укрепляет конструкцию, не связанную с темой, на карте, что позволяет присвоить ассоциации имя и рассматривать ее как саму тему.[8]
п-арочные отношения
В языках семантической паутины, таких как RDF и OWL, свойство - это двоичное отношение, используемое для связи двух индивидов или индивида и значения. Однако в некоторых случаях естественным и удобным способом представления определенных концепций является использование отношений для связывания человека с более чем одним человеком или ценностью. Эти отношения называются n-арные отношения. Примеры представляют отношения между несколькими людьми, такими как комитет, человек, который является членом комитета, и другое лицо, которое назначило первого человека, который станет членом комитета, или покупатель, продавец и объект, который был куплен при описании покупка книги.
Более общий подход к овеществлению состоит в создании явного нового класса и n новых свойств для представления п-арное отношение, являющееся примером отношения, связывающего п индивиды - экземпляр этого класса. Этот подход также можно использовать для представления информации о происхождении и других свойств для отдельного экземпляра отношения.[9]
:p1а:Человек;:has_membership_:members_12345._:members_12345а:Членство;:комитет:c1;:nominated_by:p2.
Против. цитата
Также важно отметить, что описываемое здесь овеществление не то же самое, что «цитата» в других языках. Вместо этого реификация описывает отношения между конкретным экземпляром тройки и ресурсами, на которые она ссылается. Интуитивно овеществление можно прочитать как высказывание «эта тройка RDF говорит об этих вещах», а не (как в цитате) «эта тройка RDF имеет такую форму». Например, в примере реификации, используемом в этом разделе, тройка:
комитет:членство12345 rdf:предмет человек:p1 .
описывая rdf: тема
исходного утверждения говорит, что субъектом утверждения является ресурс (человек), идентифицированный URIref человек: p1
. Он не утверждает, что предметом утверждения является сам URIref (т.е. строка, начинающаяся с определенных символов), как это было бы в кавычках.
Смотрите также
- Денотационная семантика
- Формальная семантика языков программирования
- Мета-круговой оценщик
- Метамоделирование
- Метаобъект
- Метапрограммирование
- Нормализация по оценке
- Операционная семантика
- Отражение (информатика)
- Структура описания ресурсов
- Самостоятельный переводчик
- Тематические карты
Рекомендации
- ^ Ж. Маленфант, М. Жак и Ф.-Н. Демерс, Учебное пособие по поведенческой рефлексии и ее реализации В архиве 2010-05-28 на Wayback Machine
- ^ Спецификация языка Java, раздел 4.7, Java SE 7 Edition
- ^ "Блоки и замыкания Smalltalk". C2.com. 2009-10-15. Получено 2010-10-09.
- ^ Формальные методы Европа, Часто задаваемые вопросы, часть 13 В архиве 2005-03-12 на Wayback Machine.
- ^ Антони Оливе, Концептуальное моделирование информационных систем, Springer Verlag, 2007.
- ^ Единый язык моделирования, надстройка UML, Object Management Group, 2007-11-02.
- ^ а б c «RDF Primer». W3.org. Получено 2010-10-09.
- ^ Практическое введение в тематические карты В архиве 2009-02-03 на Wayback Machine.
- ^ «W3C, определяющий N-арные отношения в семантической сети». W3.org. Получено 2010-10-09.