Reificare (IT)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Î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 sau evaluate care reifică în mod eficient interpretul de limbă. De exemplu, scrierea unui script JavaScript precum:
     pentru ( var i = 1 ; i <= 3 ; i ++ ) eval ( "document.myform.object" + i + ".value = 0" );
    
    este echivalent cu scrisul
     document . myform . obiect1 . valoare = 0
     document . myform . obiect2 . valoare = 0
     document . myform . obiect3 . valoare = 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.

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 .

Exemplu de set de instanțe ale relației AppartieneA e. Persoana P1 este membru al comitetelor C1 și C2 . Persoana P2 este doar un membru al comitetului C1 .

Î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.

Diagrama clasei UML pentru exemplul comitetelor

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:

  1. este menit să exprime faptul că o persoană a desemnat o altă persoană ca membru al unui anumit comitet;
  2. 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ă

  1. ^ (EN) Michael Scott's Programming Language Pragmatics , San Francisco, CA, Morgan Kaufmann Publishers, 2006, p. 140 .
  2. ^(EN) The Java Language Specification, secțiunea 4.7 , Java SE 7 Edition
  3. ^ ( RO ) O.-J. Dahl, Edsger Dijkstra , CAR Hoare , Structured Programming , Londra, Academic Press, 1972, ISBN 0-12-200550-3 .
  4. ^ (EN) Antoni Olivé, Modelarea conceptuală a sistemelor informaționale, Springer Verlag, 2007.
  5. ^(EN) Limbaj de modelare unificat, suprastructură UML, Grup de gestionare a obiectelor, 2 noiembrie 2007.
  6. ^ (EN) RDF Primer , pe w3.org. Adus pe 9 octombrie 2010 .

Elemente conexe

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT