Reificare (IT)
În informatică , reificarea este procesul prin care un concept abstract este transformat într-un model de date sau alt obiect creat folosind un limbaj de programare . Un obiect calculabil / adresabil, numit „resursă”, este creat în sistem pentru a încapsula un obiect necomputabil sau adresabil.
În mod informal, reificarea unui concept sau comportament abstract înseamnă a face din acesta un obiect de primă clasă , cum ar fi un tip , obiect, entitate sau valoare , sau o structură care acceptă cele mai frecvente operații, cum ar fi trecerea ca argument , returnată dintr-o funcție sau atribuit unei variabile . [1]
Reificarea este o tehnică foarte comună în paradigma orientată pe obiecte , în analiza conceptuală și în reprezentarea cunoștințelor .
Reificare și limbaje reflexive
În contextul limbajelor de programare , reificarea este procesul prin care anumite aspecte ale programului sau limbajului de programare, care altfel ar fi implicite în codul compilat și în timpul rulării, sunt exprimate de limbajul însuși. Prin reificare, programul poate analiza toate aceste aspecte ca date obișnuite. În limbajele reflexive , referentul (adică structura creată prin reificare) este legat cauzal de aspectul reificat, astfel încât o modificare a primului îl afectează și pe cel din urmă.
Reificarea, cel puțin parțial, poate fi exprimată prin utilizarea diferitelor limbi:
- În C , detaliile de nivel scăzut ale adreselor de memorie sunt reificate. Spre deosebire de multe alte limbi, de fapt, gestionarea memoriei se realizează direct în codul sursă, care necesită tehnici pentru gestionarea metadatelor variabilelor programului. În special, adresa de memorie este reificată și pusă la dispoziție pentru manipulare directă de către alte construcții de limbaj. De exemplu, în următoarea linie de cod, indicatorul
buffer
este creat pentru a permite accesul la adresa de memorie 0xB800000:char * buffer = ( char * ) 0xB800000 ;
- Limbajul Scheme reifică continuările (aproximativ, stiva de apeluri).
- În C # , reificarea este utilizată pentru a efectua polimorfism parametric .
- Există „ tipuri reifiabile ” în Java care sunt „complet disponibile la rulare” (adică metadatele lor nu sunt șterse în timpul compilării sursei) [2]
- Multe limbi, cum ar fi Lisp , JavaScript și Curl , oferă o procedură numită
eval
sauevaluate
care reifică în mod eficient interpretul de limbă. De exemplu, scrierea unui script JavaScript precum:este echivalent cu scrisulpentru ( var i = 1 ; i <= 3 ; i ++ ) eval ( "document.myform.object" + i + ".value = 0" );
În acest fel, după cum puteți vedea, este foarte ușor să manipulați obiecte fără a utiliza direct numele variabilelor, ci obținându-le dinamic.document . myform . obiect1 . valoare = 0 document . myform . obiect2 . valoare = 0 document . myform . obiect3 . valoare = 0
Reificarea și rafinarea datelor
În metoda formală VDM , reificarea se numește rafinament . Rafinarea datelor constă în înlocuirea tipului de date abstract utilizat în proiectarea unui algoritm sau a unui sistem cu o structură concretă de date respectivă. [3]
Reificarea în modelarea conceptuală
Reificarea este utilizată pe scară largă în modelarea conceptuală . [4] Reificarea unei relații înseamnă reprezentarea acesteia ca entitate .
De exemplu, având în vedere relația AppartieneA(membro:Persona, Comitato)
, o instanță a AppartieneA
lui reprezintă faptul că o persoană este membru al unui comitet. Figura de mai jos prezintă un exemplu de instanțe de relație sub formă de tabel. Obiectivarea raportului AppartieneA
constă în transformarea acestuia într-o entitate Appartenenza
, care, prin două rapoarte ad hoc AppartenenzaP
și AppartenenzaC
este conectată, respectiv, la entitățile Persona
și Comitato
.
În contextul modelării datelor, reificarea unei relații este indispensabilă atunci când doriți să tratați relația în sine ca pe o entitate. În exemplul de mai sus, utilizarea entității de Appartenenza
ar putea servi la definirea relației care indică care persoană stabilește calitatea de membru al unei alte persoane într-un comitet, adică stabilește Stabilisce(Persona, Appartenenza)
.
În contextul implementării bazei de date, reificarea este necesară atunci când relația nu are constrângeri de cardinalitate. În exemplul de mai sus, o persoană poate fi membru al mai multor comitete, iar un comitet poate avea mai mulți membri. Această situație nu poate fi exprimată fie prin integrarea relației în Persona
tabel (printr - un posibil Persona.appartiene_a
atribut) sau prin integrarea acestuia în Comitato
tabel (printr - un posibil Comitato.partecipanti
atribut), ca atribut poate conține doar o singură valoare. Cea mai simplă soluție este de a insera toate instanțele relației AppartieneA
unei tabele de Appartenenza
care are două atribute, membro
și comitato
, impunând constrângerile cheie străine necesare pe tabelele Persona
și respectiv Comitato
.
În mod similar, atributele unei entități pot fi reificate și dacă sunt prea complexe.
UML oferă construcția clasei de asociere pentru a defini relațiile reificate. Această construcție este atât de tip „clasă”, cât și „asociere”. [5]
Reificarea în web-ul semantic
RDF și OWL
În limbile pentru Semantic Web , cum ar fi Resource Description Framework (RDF) și Web Ontology Language (OWL), fiecare afirmație (afirmație) constă dintr-o relație binară, alcătuită din subiect, predicat și obiect. O declarație este utilizată pentru a lega două resurse sau o resursă și o valoare. Uneori, totuși, poate fi necesar să se exprime predicate despre aceeași relație. De exemplu, este posibil să dorim să reprezentăm unele proprietăți ale relației în sine, cum ar fi gradul său de fiabilitate, relevanța, puterea cu care sunt conectați subiectul și obiectul etc.
Urmând exemplul comisiilor din secțiunea privind modelarea conceptuală, o anumită persoană poate fi indicată cu URIref person:p1
și un anumit comitet ex:c1
. Triplul RDF care descrie faptul că p1
este un membru al c1
este după cum urmează:
persoană : p1 ex : aparține ex : c1 .
Acum luați în considerare următoarele două cazuri:
- este menit să exprime faptul că o persoană a desemnat o altă persoană ca membru al unui anumit comitet;
- vrem să exprimăm faptul că o persoană a înregistrat această întâlnire în baza de date.
În primul caz, reificarea clasică poate fi implementată (ca mai sus):
ex : Membership rdf : type owl : Class .
ex : membership0004 rdf : type ex : Membership .
ex : membru 0004 ex : al persoanei Persoană : p1 .
ex: appartenenza0004 former: ex nelComitato: c1.
persoana : p2 ex : numire ex : membru 0004 .
În al doilea caz, este necesar să se exprime declarații cu privire la declarația însăși. Pentru a face acest lucru, RDF oferă un vocabular dedicat descrierii enunțurilor , constând din tipul rdf:Statement
și proprietățile rdf:subject
, rdf:predicate
și rdf:object.
. [6]
ex : membership0004Stat rdf : tip rdf : Declarație .
ex: membership0004Stat rdf: Persoana subiect: p1.
ex : membership0004Stat rdf : comitet predicat : apartineA .
ex : membership0004Stat rdf : object ex : c1 .
Aceste patru tripluri indică faptul că resursa indicată cu URIref ex:appartenenza0004Stat
este o declarație RDF, că subiectul acestei declarații se referă la resursa identificată cu person:p1
, predicatul la resursa identificată cu committee:AppartieneA
și obiectul la resursă identificată cu ex:c1
. Folosind reificarea conform acestei convenții, putem exprima ulterior faptul că person:p3
a adăugat afirmația de mai sus la baza de date:
persoană : p3 ex : adăugare la DB ex : membership0004Stat .
Reification și Hărți de subiecte
Notă
- ^ (EN) Michael Scott's Programming Language Pragmatics , San Francisco, CA, Morgan Kaufmann Publishers, 2006, p. 140 .
- ^(EN) The Java Language Specification, secțiunea 4.7 , Java SE 7 Edition
- ^ ( RO ) O.-J. Dahl, Edsger Dijkstra , CAR Hoare , Structured Programming , Londra, Academic Press, 1972, ISBN 0-12-200550-3 .
- ^ (EN) Antoni Olivé, Modelarea conceptuală a sistemelor informaționale, Springer Verlag, 2007.
- ^(EN) Limbaj de modelare unificat, suprastructură UML, Grup de gestionare a obiectelor, 2 noiembrie 2007.
- ^ (EN) RDF Primer , pe w3.org. Adus pe 9 octombrie 2010 .
Elemente conexe
- Semantica denotațională
- Semantică (informatică)
- Metamodelare
- Metaobject
- Metaprogramare
- Semantica operațională
- Reflecție (informatică)
- Cadrul de descriere a resurselor
- Hărți de subiecte
linkuri externe
- ( EN ) Tim Berners-Lee , Reifying RDF (corect) și N3 , la w3.org , W3C , 17 decembrie 2004. Accesat la 11 mai 2016 .