Реификация (информатика) - 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 Только.
Однако тот же факт можно рассматривать как единое целое. Рассматривая отношения как сущность, можно сказать, что сущность закрепляет отношения. Это называется овеществлением отношений. Как и любой другой объект, он должен быть экземпляром типа объекта. В данном примере тип объекта был назван Членство
. Для каждого экземпляра IsMemberOf
, есть один-единственный экземпляр Членство
, наоборот. Теперь стало возможным добавить больше информации к исходным отношениям. В качестве примера можно выразить тот факт, что «человек p1 был назначен членом комитета c1 лицом p2». Реифицированные отношения Членство
можно использовать как источник новых отношений IsNominatedBy (членство, лицо)
.
Для связанных способов использования см. Реификация (представление знаний).
На унифицированном языке моделирования (UML)
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.