1 / 43

Object Constraint Language

Object Constraint Language. Objectivs. OCL Introducere. OCL = Object Constraint Language OCL este un limbaj expresiv de asertiuni non-executabile A fost definit pentru prima oara în 1997 de catre IBM A fost adoptat de catre UML în 2003 Descrie toate aspectele semantice ale UML

shaw
Télécharger la présentation

Object Constraint Language

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Object Constraint Language

  2. Objectivs

  3. OCL Introducere • OCL = Object Constraint Language • OCL este un limbaj expresiv de asertiuni non-executabile • A fost definit pentru prima oara în 1997 de catre IBM • A fost adoptat de catre UML în 2003 • Descrie toate aspectele semantice ale UML • Are o sintaxa apropiata de Eiffel (aceleasi notiuni – pre,post, invariant ) • OCL este compatibil cu modelele OMG : ODMG,CORBA

  4. Locul constrângerilor în UML • UML este un limbaj grafic,deci asertiunile sunt asociate figurilor cu ajutorul clauzelor de tip context • Fiecare clasificator (tip,clasa,interfata, asociere) al modelului UML reprezinta un tip OCL • Exista un ansamblu de tipuri predefinite care permit normalizarea descrierii

  5. Studiu de caz

  6. 1. Context • Notatia self.nrMuncitori > 50 este una ambigua • Pentru a înlatura aceasta ambiguitate folosim un context pentru care constrângerea de mai sus este clar definita • Mai multe constrângeri pot fi grupate în acelasi context

  7. Exemplu context Company inv: self.nrAngajati >50

  8. Alte forme de exprimare a contextului (V1) context Companie inv : nrAngajati>50 (V2) context c: Companie inv: c.nrAngajati>50 (V3) context c: Companie inv destuiAngajati: c.nrAngajati >50

  9. 2. Tipuri de constrângeri • Invarianti Exprima anumite conditii pe care trebuie sa le îndeplineasca atributele claselor. • Pre-conditii Exprima anumite constrângeri care trebuie sa fie îndeplinite pentru executarea operatiilor cerute de corpul unei functii • Post-conditii Exprima anumite conditii care trebuie îndeplinte la iesirea din corpul unei functii

  10. Exemplu context numeTip : numeOperatie (p1:Tip1,…) : tipReturnat pre: param1> post: result=… context Persoana::venit(d:Date) : Integer post: result= 800

  11. 3. Tipuri • Tipuri • Atribuiri (expresia LET)

  12. 3.1 Tipuri de baza foarte clasic,minimum vital

  13. Operatii cu tipuri de baza

  14. 3.2 Tipul enumerare • Declarare enum{ valoare1, valoare2,…} • Utilizare într-o expresie valoare1 -- daca nu exista nici o ambiguitate #valoare1 -- daca exista ambiguitati

  15. Exemplu context Persoana inv sex : enum{ masculin, feminin }

  16. 3.3 Tipuri speciale • Collection : un ansamblu de elemente • Bag : este o colectie de elemente cu posibilitatea de a avea un acelasi element de mai multe ori • Set : este o colectie de elemente,dar fiecare element apare o singura data.Este echivalentul matematic al notiunii de multime • Sequence : este o multime ordonata de elemente

  17. 3.4 Conformitatea tipurilor Colectie Bag Set Sequence

  18. Exemplu Transport Biciceta Masina Tramvai

  19. • Set(Bicicleta) conform cu Set(Transport) • Set(Bicicleta) conform cu Collection(Bicicleta) • Set(Bicicleta) conform cu Collection(Transport) • Set(Bicicleta) nu este conform cu Bag(Bicicleta) Deci conformitatea tipurilor este la fel ca si în Java 5

  20. Cast Fie T2 un sub-tip al lui T1, si obj1 o variabila de tip T2,obj2 o variabila de tip T1. obj1.oclAsType(T2) -- este legal obj1.oclAsType(T1) -- este legal obj2.oclAsType(T2) -- este ilegal

  21. Valori nedefinite Toti operanzii sau argumentele pot avea valori « non-defnite ».Rezultatul unei astfel de expresii este de asemeni « nedefinit ». Exceptii • Or returneaza true daca unul din argumente este true. • And returneaza false daca unul din argumente este fals.

  22. 3.5 Metaconcepte • Tipul OclType t.allInstances -- t o instanta a OclType -- returneaza un ansamblu al tututor obiectelor de tipul Type -- nume definit pentru tipurile Integer,Real,String Exemplu : context Person inv : Person.allInstances->forAll(p1,p2 | p1<>p2 implies p1.name<>p2.name )

  23. 4. Accesul la obiecte si proprietati Fiecare espresie OCL se poate referi la • Clasificatori : tipuri,clase, interfete,asocieri • Proprietati : atribute, extremitati ale unei asocieri,metode,operatii,metode Accesul la o proprietate se face cu ajutorul notatiei cu punct.

  24. Notatia cu punct context ATp inv : self.proprietate Exemplu de acces la un atribut context Persoana inv : self.vârsta>18 context Companie inv : self. pretStoc( ) > 0

  25. Accesul la roluri obiect.numeRol obiect.numeRol->proprietate

  26. Navigarea cu ajutorul rolurilor • Cardinalitati simple : 0 sau 1 => returneaza un obiect • Cardinalitati multiple,fara ordine => returneaza un Set • Cardinalitati multiple,cu ordine => returneaza un Sequence

  27. Exemplul 1 context Company inv: self.manager.isUnemployed=false inv: self.employee->notEmpty

  28. Exemplul 2 context Persoana -- nu mai mult de 3 manageri pentru aceeasi persoana inv : self.angajator->size < 3

  29. Asocieri de cardinalitate 0..1 Atunci când o asociere conduce la un obiect,acesta poate fi considerat ca un ansamblu de tip singleton. context Company inv : self.manager-> size=1

  30. Combinarea proprietatilor context Company inv : self.employee->size >=50 -- companiile au minim 50 de angajati context Person inv : self.wife->notEmpty implies self.wife.age>18 or self.husband->notEmpty implies self.husband.age>18 -- persoanele casatorite au vârsta mai mare de 18 ani

  31. Asocieri si cardinalitate * Persoana Rang sef Self.Rang [ sef ]->sum > 0

  32. OCL Type • Toate tipurile OCL sunt de tipul OclType • Carcateristici - t.name : String -- numele tipului t - t.attributes : Set (String) -- numele tuturor atributelor - t.operations : Set (String) -- numele tuturor operatiilor pentru tipul t - t.superTypes : Set( OclType) -- numele tuturor tipurilor pe care le mosteneste tipul T

  33. Primitive OCL • Primitive de tip Collection • Primitive de tip Set • Primitive de tip Sequence • Primitive de tip Integer • Primitive de tip Real • Primitive de tip String • Primitive de tip Boolean • Primitive de tip Enumeration

  34. 1 Primitive de tip Collection • a->union(s:Set(T) ) : Bag(T) • a->intersection(b:Bag(T)) : Bag(T) • a->intersection(b:Set(T)) : Set(T) • a->including (el : T) :Bag(T) • a->excluding (el : T) :Bag(T) • a->asSet : Set(T) • a->asSequnce : Sequence(T)

  35. Alte primitive de tip Collection • c->size :Integer -- numarul de elemente dintr-o colectie • c->isEmpty : Boolean -- spune daca o multime este sau nu vida • c->notEmpty : Boolean • c->count(x : OclAny) : Integer -- numara aparitiile lui x în colectie • c->includes(x : OclAny) : Boolean -- true daca x apartine colectiei c • c->excludes(x:OclAny) :Boolean • c->select(e|boolean-expr-with-e): Collection(c.oclType.generic(1)) • c->select(e|boolean-expr-with-e): Collection(c.oclType.generic(1)) • c->sum : T -- suma tuturor elementelor din colectia C

  36. 2 Primitive de tip Set Multimea în sens informatic este un ansamblu finit de elemente,fara duplicare. • a->union(s:Set(T) ) : Set(T) • a->union(s:Bag(T) ) : Bag(T) • a->intersection(b:Set(T)) : Set(T) • a->including (el : T) :Set(T) • a->excluding (el : T) :Set(T) • a->count(el : T) :Integer

  37. 3 Primitive de tip Sequence • s->count(el:T) : Integer • s=(s2 : Sequence (T) ) : Boolean • s->union(s:Sequence(T) ) : Sequnce(T) • s->intersection(b:Sequnce(T)) : Sequnce(T) • s->including (el : T) :Sequence(T) • s->excluding (el : T) :Sequnce(T) • s->asBag ( ) :Bag(T) • s->asSet( ) :Set(T) • s->at(i : Integer) : T • s->first : T • s->last : T • s->append(el : T) : Sequence (T) -- adauga la sfârsitul secventei • s->prepend( el : T) : Sequnce (T) -- adauga la începutul secventei • s->subSequnce( a,b : Integer) : Sequnce(T) – returneaza subsecventa de elemente dintre elementul de indice a si de indice b,inclusiv capetele

  38. 4 Primitive de tip Real • r1=(r2:Real) : Boolean • r1<>(r2:Rreal): Boolean • r1 – (r2:Real) : Real • r1 * (r2:Real) : Real • r1 / (r2:Real) : Real • r1.abs : Integer-- modullul lui r1 • r1.floor : Integer -- partea întreaga a lui r1 • r1.round : Integer • r1.max(r2 : Real) : Integer • r1.min(r2 : Real) : Integer • r1< (r2 : Real) : Boolean • r1<= (r2 : Real) : Boolean • r1> (r2 : Real) : Boolean • r1>= (r2 : Real) : Boolean

  39. 5 Primitive de tip Întreg • z1=(z2: Integer) : Boolean • z1<>(z2: Integer): Boolean • z1 – (z2: Integer) : Integer • z1 * (z2: Integer) : Integer • z1 / (z2: Real) : Integer • z1.abs : Integer-- modullul lui z1 • z1.max(z2 : Integer) : Integer • z1.min(z2 : Integer) : Integer • z1< (z2 : Integer) : Boolean • z1<= (z2 : Integer) : Boolean • z1> (z2 : Integer) : Boolean • z1>= (z2 : Integer) : Boolean

  40. 6 Primitive de tip String • s1=(s2 : String ) : Boolean • s1.size : Integer • s1.substring(lower,upper :Integer) : String • s1.concat(s2 : String ) : String • s1.toUpper : String • s1.toLower : String

  41. 7 Primitive de tip Boolean • b1=(b2 : Boolean ) : Boolean • b1 or (b2 : Boolean ) :Boolean • b1 xor (b2 : Boolean ) :Boolean • b1 and (b2 : Boolean ) :Boolean • b1 implies (b2 : Boolean ) :Boolean • not b1 : Boolean

  42. 8 Primitive de tip Enumeration • e1=(e2 : Enumeration ) :Boolean • e1 <> (e2 : Enumeration) : Boolean

More Related