Documente Academic
Documente Profesional
Documente Cultură
10
11
12
Definitia inregistrarilor
Rec: f(UVAR X UTYPE) UTYPE,unde numele variabilelor sunt
toate diferite
Notatie
Rec({(a1,T1), (a2,T2),, (an,Tn)}) se noteaza cu Rec{ a1:T1, a2:T2,
, an:Tn}
Definitie
Car(Rec{ a1:T1, a2:T2,, an:Tn}) = {r:UVARUVAL|r(ai)CAR(Ti),
1in}
attr: UTYPEUVAR
attr(Rec{ a1:T1, a2:T2,, an:Tn}) = {a1,,an}
attr(Ref T) = attr(T) pentru tipul de referinta Ref T
attr(T) = { } pentru orice alt tip
13
2.5 Locatii
Partile statice si dinamice trebuiesc tinute strict separate.
Introducem astfel un concept explicit de locatii pentru variabilele
mutabile. Valoarea stocata in locatie depinde de starea masinii de
stare. O locatie este o reprezentare abstracta a unei parti a starii
sistemului.
Definitia locatiilor
- ULOC UVAL este universal locatiilor
- Loc: UTYPE UTYPE
- Loc T reprezinta tipul locatiei care stocheaza data de tip T
- CAR(Loc T ) ULOC
Pentru orice nume de tip T,notam cu Loc T numele de tip a
carui valori asociate sunt locatii pentru valorile asociate cu
numele de tip T. Ne permitem combinatii arbitrare de tipuri, cum
ar fi Loc Ref T sau Ref Loc T.
15
16
Fig.3
Structura tipica a unui obiect
Avem doua scene dereferentiind de la identificatorul obiectului
la valorile mutabile, actuale ale atributelor. Identificatorul de
obiect, mai intii face referinta la structura statica, care contine un
numar de locatii pentru valorile atributelor in stocul de date.
Numele de clase au asociata o structura speciala. Fiecare clasa
reprezinta o multime de idetificatori de obiecte, caracterizindu-se
prin numele tipului, care este de forma:
C = Ref Rec {self: C, a1:Loc T1,,an:Loc Tn},
si valorile asociate lor, care sunt numite obiecte si sunt asociate
unui nume de tip de forma:
*C = Rec {self: C, a1:Loc T1,,an:Loc Tn}
Astfel un nume de clasa este un nume de tip la fel de bine.
CAR(C) reprezinta multimea de identificatori de obiecte pentru
clasa C. O singura dereferentiere a acestor identificatori duce la
structura obiectului:
17
CAR(C) UOID
CAR(*C) = {*oid | oidCAR(C) } INSTANCE.
( UOID si INSTANCE sunt definite formal anterior ) Identificatorii de
obiect puncteaza unic structura obiectului (inregistrarile formale )
si cum noi nu avem referinte instabile, exista o bijectie intre
identificatorii de obiecte si structurile obiectelor, adica
dereferentierea (* ) este bijectiva ( atunci cand nu tinem seama
de Nil )
In final,nu permitem existenta obiectelor cu locatiile
impartite. Astfel, pentru orice doi identificatori de obiect
o1CAR(C1) , o2CAR(C2)si nume de atribute
aattr(*C1),battr(*C2), avem *o1.a *o2.b, pentru orice a si b de
tip Loc.
Observam ca UOID contine referintele tuturor obiectelor
posibile si , in mod analog, INSTANCE contine toate obiectele
posibile intr-un stoc de date.
Prin functia de dereferentiere identificatorii obiectelor cunosc
obiectele pe care le dereferentiaza.Obiectele au de asemenea
anumite cunostinte si despre ele insele. Aceasta inseamna ca
obiectele cunosc identificatorul lor si clasa lor. Ca o consecinta a
acestei definitii,fiacre obiect apartine exact unei clase.
Definitia claselor si a instantierilor:
- Ref Rec {self: C,c1:T1,,ck:Tk, ak+1:Loc Tk+1,,an:Loc Tn},este un
nume de clasa
- UCLASS UTYPE este universul numelor de clase
- UOID = C UCLASS CAR (C) este universal identificatorilor de
obiect
- INSTANCE = C UCLASS CAR ( C) este multimea obiectelor,
unde pentru fiecare CUCLASS exista si sunt unici ai,Ti asa
incat
18
2.7 Subclasarea
- CAR(Oid(C)) =
CAR(C 1)
C 1C
UOID.
29
30