Reifikacja (informatyka)
Reifikacja to proces, w wyniku którego abstrakcyjna koncepcja programu komputerowego zostaje przekształcona w jawny model danych lub inny obiekt utworzony w języku programowania . Obiekt obliczalny/adresowalny — zasób — jest tworzony w systemie jako serwer proxy dla obiektu, którego nie można obliczyć/adresować. Za pomocą urzeczowienia coś, co wcześniej było ukryte, niewyrażone i być może niewyrażalne, zostaje wyraźnie sformułowane i udostępnione manipulacji pojęciowej (logicznej lub obliczeniowej). Nieformalnie o reifikacji często mówi się jako o „uczynieniu z czegoś obywatela pierwszej klasy”. "w zakresie konkretnego systemu. Pewien aspekt systemu można zreifikować na etapie projektowania języka , co wiąże się z odzwierciedleniem w językach programowania. Można go zastosować jako stopniowe udoskonalanie na etapie projektowania systemu . Reifikacja jest jedną z najbardziej często stosowane techniki analizy pojęciowej i reprezentacji wiedzy .
Refleksyjne języki programowania
W kontekście języków programowania reifikacja to proces, w wyniku którego program użytkownika lub dowolny aspekt języka programowania, który był ukryty w przetłumaczonym programie i systemie wykonawczym, jest wyrażany w samym języku. Proces ten udostępnia je programowi, który może sprawdzać wszystkie te aspekty jak zwykłe dane . W językach refleksyjnych dane reifikacyjne są przyczynowo powiązane z powiązanym z nimi aspektem urzeczowionym w taki sposób, że modyfikacja jednego z nich wpływa na drugi. Dlatego dane reifikacyjne są zawsze wierną reprezentacją powiązanego z nimi aspektu urzeczowionego [ potrzebne wyjaśnienia ] . Często mówi się, że dane reifikacyjne są obiektem pierwszej klasy [ potrzebne źródło ] . Reifikacji, przynajmniej częściowo, doświadczono do tej pory w wielu językach: we wczesnych dialektach Lispa i obecnych dialektach Prologu programy traktowano jak dane, chociaż związek przyczynowy często pozostawiano w gestii programisty. W Smalltalk -80 kompilator przekształcający tekst źródłowy w kod bajtowy jest częścią systemu wykonawczego od pierwszych implementacji tego języka.
-
Język programowania C opisuje niski poziom szczegółowości adresów pamięci . Wiele projektów języków programowania zawiera szczegóły alokacji pamięci w kompilatorze i systemie wykonawczym. W projektowaniu języka programowania C adres pamięci jest reifikowany i można nim bezpośrednio manipulować za pomocą innych konstrukcji językowych. Na przykład poniższy kod może zostać użyty podczas implementowania sterownika urządzenia mapowanego w pamięci. Wskaźnik bufora jest proxy dla adresu pamięci 0xB8000000.
0 znak * bufor = ( znak * ) 0xB8000000 ; bufor [ ] = 10 ;
- Funkcjonalne języki programowania oparte na rachunku lambda urzeczywistniają koncepcję abstrakcji procedury i zastosowania procedury w postaci wyrażenia Lambda .
- Język programowania Scheme reifikuje kontynuacje (w przybliżeniu stos wywołań).
- W języku C# reifikacja służy do zaimplementowania polimorfizmu parametrycznego w formie typów generycznych jako pierwszorzędnej cechy języka.
- W języku programowania Java istnieją „typy podlegające refinansowaniu”, które są „całkowicie dostępne w czasie wykonywania” (tzn. ich informacje nie są usuwane podczas kompilacji).
- REBOL reifikuje kod jako dane i odwrotnie.
- Wiele języków, takich jak Lisp , JavaScript i Curl , zapewnia procedurę
eval
lubeval
, która skutecznie reprezentuje interpreter języka. - Struktura Logtalk dla Prologu oferuje środki do badania reifikacji w kontekście programowania logicznego .
-
Smalltalk i Actor pozwalają na reifikację bloków i komunikatów , które są odpowiednikami wyrażeń lambda w Lisp, oraz
thisContext
w Smalltalk, co jest reifikacją bieżącego bloku wykonującego. -
Języki homoikoniczne reifikują składnię samego języka w postaci abstrakcyjnego drzewa składni , zazwyczaj razem z
eval
.
Reifikacja danych a udoskonalanie danych
Reifikacja danych ( stopniowe udoskonalanie ) polega na znalezieniu bardziej konkretnej reprezentacji abstrakcyjnych typów danych używanych w formalnej specyfikacji .
Reifikacja danych to terminologia Wiedeńskiej Metody Rozwoju (VDM), którą większość ludzi nazwałaby udoskonalaniem danych. Przykładem jest zrobienie kroku w stronę implementacji poprzez zastąpienie reprezentacji danych bez odpowiednika w zamierzonym języku implementacji, takim jak zestawy, reprezentacją, która ma odpowiednik (np. mapy ze stałymi domenami, które można zaimplementować za pomocą tablic) lub co najmniej taki, który jest bliższy odpowiednikowi, na przykład sekwencje. Społeczność VDM woli słowo „reifikacja” od „udoskonalenia”, ponieważ proces ten ma więcej wspólnego z konkretyzacją pomysłu niż z jego udoskonalaniem.
Aby zapoznać się z podobnymi zastosowaniami, zobacz Reifikacja (lingwistyka) .
W modelowaniu koncepcyjnym
Reifikacja jest szeroko stosowana w modelowaniu koncepcyjnym . Reifikacja relacji oznacza postrzeganie jej jako całości. Celem reifikacji relacji jest jej wyraźne określenie, kiedy należy do niej dodać dodatkowe informacje. Rozważ typ relacji IsMemberOf(member:Person, Committee)
. Instancja IsMemberOf
to relacja reprezentująca fakt, że dana osoba jest członkiem komitetu. Poniższy rysunek przedstawia przykładową populację IsMemberOf
w formie tabelarycznej. Osoba P1 jest członkiem komitetów C1 i C2 . Osoba P2 jest członkiem wyłącznie komitetu C1 .
Jednakże ten sam fakt można również postrzegać jako całość. Patrząc na relację jako na byt, można powiedzieć, że byt reifikuje relację. Nazywa się to reifikacją związku. Jak każda inna jednostka, musi to być instancja typu jednostki. W tym przykładzie typ jednostki został nazwany Membership
. Dla każdej instancji IsMemberOf
istnieje jedno i tylko jedno wystąpienie Membership
, i wzajemnie. Teraz możliwe staje się dodanie większej ilości informacji do pierwotnej relacji. Jako przykład można wyrazić fakt, że „osoba p1 została nominowana na członka komisji c1 przez osobę p2”. Reifikowana relacja Członkostwo
może służyć jako źródło nowej relacji IsNominateBy(Membership, Person)
.
Aby zapoznać się z powiązanymi zastosowaniami, zobacz Reifikacja (reprezentacja wiedzy) .
W ujednoliconym języku modelowania (UML)
UML zapewnia konstrukcję klasy asocjacji służącą do definiowania reifikowanych typów relacji. Klasa asocjacyjna jest pojedynczym elementem modelu, który jest zarówno rodzajem asocjacji, jak i rodzajem klasy. Zarówno skojarzenie, jak i typ jednostki, który podlega reifikacji, są tym samym elementem modelu. Należy pamiętać, że atrybutów nie można reifikować.
W sieci semantycznej
RDF i OWL
W językach sieci semantycznej , takich jak RDF i język ontologii sieciowej ( OWL), instrukcja jest relacją binarną. Służy do łączenia dwóch osób lub osoby i wartości. Aplikacje czasami wymagają opisywania innych wyciągów RDF, na przykład w celu rejestrowania informacji, np. kiedy sporządzono oświadczenia lub kto je sporządził, co jest czasami nazywane informacjami o „ pochodzeniu ”. Jako przykład możemy chcieć przedstawić właściwości relacji, takie jak nasza pewność co do niej, dotkliwość lub siła relacji, znaczenie relacji i tak dalej.
Przykład z sekcji modelowania koncepcyjnego opisuje konkretną osobę o URIref person:p1
, która jest członkiem komitetu :c1
. Trójka RDF z tego opisu to
osoba : p1 komisja : jestczłonkiem komisji : c1 .
Rozważ przechowywanie dwóch kolejnych faktów: (i) odnotowanie, kto nominował tę konkretną osobę do tej komisji (oświadczenie o samym członkostwie) oraz (ii) odnotowanie, kto dodał ten fakt do bazy danych (oświadczenie o oświadczeniu).
Pierwszy przypadek to przypadek klasycznej reifikacji, jak powyżej w UML: reifikuj członkostwo i przechowuj jego atrybuty i role itp.:
komitet : Członkostwo rdf : typ sowa : Klasa . komitet : członkostwo12345 rdf : typ komitet : członkostwo . komitet : członkostwo12345 komitet : ofPerson osoba : p1 . komisja : członkostwo12345 komisja : wKomitet komisja : c1 .
osoba : p2 komisja : nominowana komisja : członkostwo12345 .
Dodatkowo RDF udostępnia wbudowane słownictwo przeznaczone do opisywania instrukcji RDF. Opis wypowiedzi przy użyciu tego słownictwa nazywa się reifikacją wypowiedzi. Słownik reifikacyjny RDF składa się z typu rdf:Statement
oraz właściwości rdf:subject
, rdf:predicate
i rdf:object
.
Używając słownictwa reifikacyjnego, reifikację oświadczenia o członkostwie danej osoby można uzyskać poprzez przypisanie mu identyfikatora URIref, takiego jak komitet: członkostwo12345
, dzięki czemu oświadczenia opisujące można zapisać w następujący sposób:
komitet : członkostwo12345Stat rdf : typ rdf : Oświadczenie . komitet : członkostwo12345Stat rdf : temat osoba : p1 . komitet : członkostwo12345Stat rdf : komitet predykatowy : isMemberOf . komitet : członkostwo12345Stat rdf : przedmiot komitet : c1 .
Stwierdzenia te mówią, że zasób zidentyfikowany przez komitet URIref:membership12345Stat
jest oświadczeniem RDF, że podmiot oświadczenia odnosi się do zasobu zidentyfikowanego przez osobę:p1
, predykat oświadczenia odnosi się do zasobu zidentyfikowanego przez komitet:isMemberOf
, oraz przedmiot oświadczenia odnosi się do komitetu ds. zasobów:c1
. Zakładając, że oryginalne oświadczenie zostało faktycznie zidentyfikowane przez komitet:membership12345
, porównując oryginalne stwierdzenie z urzeczowieniem, powinno być jasne, że urzeczowienie faktycznie je opisuje. Konwencjonalne użycie słownictwa reifikacyjnego RDF zawsze wiąże się z opisywaniem wypowiedzi przy użyciu czterech stwierdzeń według tego wzorca. Dlatego czasami określa się je mianem „kwadratów reifikacyjnych”.
Stosując reifikację zgodnie z tą konwencją, moglibyśmy odnotować fakt, że osoba:p3
dodała instrukcję do bazy danych przez
osoba : p3 komitet : dodano do bazy danych komitet : członkostwo12345Stat .
Należy zauważyć, że w konwencjonalnym użyciu reifikacji zakłada się, że podmiot trójki urzeczowienia identyfikuje konkretny przypadek trójki w konkretnym dokumencie RDF, a nie jakąś dowolną trójkę mającą ten sam podmiot, orzeczenie i przedmiot. Ta szczególna konwencja jest stosowana, ponieważ reifikacja ma na celu wyrażenie właściwości, takich jak daty składu i informacje o źródle, jak w podanych już przykładach, a właściwości te należy zastosować do konkretnych przypadków trójek. Zauważ, że opisana trójka (podmiot predykat dopełnienie)
samo w sobie nie jest implikowane przez taką czwórkę reifikacyjną (i nie jest konieczne, aby faktycznie istniała w bazie danych). Pozwala to również na użycie tego mechanizmu do wyrażenia, które trójki nie obowiązują .
Siła słownika reifikacyjnego w RDF jest ograniczona przez brak wbudowanych środków do przypisywania URIrefów do instrukcji, więc aby wyrazić tego rodzaju informacje o „pochodzeniu” w RDF, trzeba użyć jakiegoś mechanizmu (poza RDF ), aby przypisać identyfikatory URI do poszczególnych instrukcji RDF, a następnie sporządzić dalsze instrukcje dotyczące tych indywidualnych instrukcji, używając ich identyfikatorów URI do ich identyfikacji.
W Mapach tematycznych
W mapie tematów XML (XTM) tylko temat może mieć nazwę lub odgrywać rolę w powiązaniu. Można użyć skojarzenia, aby wysunąć twierdzenie na dany temat, ale nie można bezpośrednio formułować twierdzeń na temat tego twierdzenia. Jednakże możliwe jest utworzenie tematu, który reifikuje konstrukcję nietematyczną na mapie, umożliwiając w ten sposób nazwanie skojarzenia i traktowanie go jako samego tematu.
relacje n -arne
W językach sieci semantycznej, takich jak RDF i OWL, właściwość to relacja binarna używana do łączenia dwóch osób lub osoby i wartości. Jednakże w niektórych przypadkach naturalnym i wygodnym sposobem przedstawienia pewnych koncepcji jest użycie relacji w celu powiązania jednostki z więcej niż jedną osobą lub wartością. Relacje te nazywane są relacjami n-arnymi . Przykładami są relacje między wieloma osobami, takimi jak komitet, osoba będąca członkiem komitetu i inna osoba, która wyznaczyła pierwszą osobę na członka komitetu, lub kupujący, sprzedający i przedmiot, który został kupiony podczas opisywania zakup książki.
Bardziej ogólne podejście do reifikacji polega na utworzeniu jawnej nowej klasy i n nowych właściwości reprezentujących n -arną relację, czyniąc instancję relacji łączącej n jednostek instancją tej klasy. Podejścia tego można również użyć do przedstawienia informacji o pochodzeniu i innych właściwości pojedynczej instancji relacji.
: p1 a : Osoba ; : has_membership _ : członkostwo_12345 . _ : członkostwo_12345 a : Członkostwo ; : komisja : c1 ; : nominowany przez : p2 .
Vs. cytat
Należy również zauważyć, że opisana tutaj reifikacja nie jest tym samym, co „cytat” występujący w innych językach. Zamiast tego urzeczowienie opisuje związek między konkretnym wystąpieniem trójki a zasobami, do których ta trójka się odnosi. Reifikację można intuicyjnie odczytać jako stwierdzenie „ta trójka RDF mówi o tych rzeczach”, a nie (jak w cytacie) „ta trójka RDF ma tę formę”. Na przykład w przykładzie reifikacji użytym w tej sekcji potrójna:
komitet : członkostwo12345 rdf : temat osoba : p1 .
opisujący rdf:subject
oryginalnej instrukcji mówi, że podmiotem wypowiedzi jest zasób (osoba) zidentyfikowany przez URIref person:p1
. Nie stwierdza, że przedmiotem instrukcji jest sam identyfikator URIref (tj. ciąg znaków rozpoczynający się od określonych znaków), jak miałby to miejsce w cudzysłowie.