Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Светоотражающие языки программирования [ править ]

В контексте языков программирования реификация - это процесс, посредством которого пользовательская программа или любой аспект языка программирования, который неявно присутствовал в переведенной программе и системе времени выполнения, выражается в самом языке. Этот процесс делает его доступным для программы, которая может проверять все эти аспекты как обычные данные . В рефлексивных языках данные овеществления причинно связаны со связанным овеществленным аспектом, так что изменение одного из них влияет на другой. Следовательно, данные овеществления всегда являются точным представлением связанного овеществленного аспекта [ требуется пояснение ] . Данные реификации часто называют объектом первого класса [цитата необходима ]. Реификация, по крайней мере частично, на сегодняшний день испытана на многих языках: в раннихдиалектах Лиспаи в современныхдиалектах Прологапрограммы обрабатывались как данные, хотя причинная связь часто оставалась ответственностью программиста. В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 .

Пример совокупности IsMemberOfотношений в табличной форме. Лицо P1 является членом комитетов C1 и C2. Лицо P2 является членом только комитета C1.

Однако тот же факт можно рассматривать как единое целое. Рассматривая отношения как сущность, можно сказать, что сущность укрепляет отношения. Это называется овеществлением отношений. Как и любой другой объект, он должен быть экземпляром типа объекта. В данном примере был назван тип объекта Membership. Для каждого экземпляра IsMemberOfсуществует один и только один экземпляр Membership, и наоборот. Теперь стало возможным добавить больше информации к исходным отношениям. В качестве примера можно выразить тот факт, что «человек p1 был назначен членом комитета c1 лицом p2». Реифицированные отношения Membershipмогут использоваться как источник новых отношений IsNominatedBy(Membership, Person).

Для связанных употреблений см. Reification (представление знаний) .

На унифицированном языке моделирования (UML) [ править ]

Диаграмма классов 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 (то есть строка, начинающаяся с определенных символов), как это было бы в кавычках.

См. Также [ править ]

  • Денотационная семантика
  • Формальная семантика языков программирования
  • Мета-круговой оценщик
  • Метамоделирование
  • Метаобъект
  • Метапрограммирование
  • Нормализация по оценке
  • Операционная семантика
  • Отражение (информатика)
  • Структура описания ресурсов
  • Самостоятельный переводчик
  • Тематические карты

Ссылки [ править ]

  1. ^ J. Мейлфант, М. Жак и F.-N. Демерс, Учебное пособие по поведенческой рефлексии и его реализации, архивировано 28 мая2010 г. в Wayback Machine
  2. ^ Спецификация языка Java, раздел 4.7 , Java SE 7 Edition
  3. ^ "Блоки и замыкания Smalltalk" . C2.com. 2009-10-15 . Проверено 9 октября 2010 .
  4. ^ Формальные методы Европа, Часто задаваемые вопросы, часть 13 Архивировано 12 марта 2005 г. в Wayback Machine .
  5. ^ Антони Оливе, Концептуальное моделирование информационных систем , Springer Verlag, 2007.
  6. ^ Унифицированный язык моделирования, надстройка UML , Object Management Group, 2007-11-02.
  7. ^ a b c «RDF Primer» . W3.org . Проверено 9 октября 2010 .
  8. ^ Практическое введение в тематические карты. Архивировано 3 февраля 2009 г. в Wayback Machine .
  9. ^ «W3C, определяющий N-арные отношения в семантической сети» . W3.org . Проверено 9 октября 2010 .