megaplanet.org/JeanMarieFavre
OCL : Liaison avec UMLOCL : Liaison avec UML
ContexteContexte
Accès aux attributs et opérati...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
2
Contexte d'une contrainteContexte d'une contrainte
Contrainte...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
3
Opérations spécifiquesOpérations spécifiques
au modèle objet ...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
4
Accès à un attributAccès à un attribut
Accès à une méthodeAcc...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
5
Navigation VIA une associationNavigation VIA une association
...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
6
ExempleExemple
Personne
Set(Voiture)
OrderedSet(Personne)
Seq...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
7
Navigation VIA une associationNavigation VIA une association
...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
8
Personne Société
Navigation VERS une associationNavigation VE...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
9
Navigation VERS une association réflexiveNavigation VERS une ...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
10
Personne Société
Emploi
salaire
Navigation DEPUIS une associ...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
11
Navigation via une Association QualifiéeNavigation via une A...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
12
Opérations concernant les typesOpérations concernant les typ...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
13
Opérations concernant les typesOpérations concernant les typ...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
14
Opérations définies sur les classesOpérations définies sur l...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
15
Où utiliser OCLOù utiliser OCL
OCL peut être utilisé pour dé...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
16
InvariantsInvariants (inv)(inv)
Prédicat associé à une class...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
17
Exemples d’invariantsExemples d’invariants (inv)(inv)
contex...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
18
Définitions additionnellesDéfinitions additionnelles (def)(d...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
19
Expression de propriétés dérivéesExpression de propriétés dé...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
20
Expression du corps d'une méthodeExpression du corps d'une m...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
21
Pré-conditions et post-conditionsPré-conditions et post-cond...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
22
ExemplesExemples
contextcontext Personne::retirer( montant :...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
23
ExercicesExercices
Spécifier une fonction qui retourne la ra...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
24
Accès à l'état d'un objetAccès à l'état d'un objet
obj . ocl...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
25
Contraintes sur l'état dans les post-conditionsContraintes s...
megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre
26
Contraintes sur l'échange de messagesContraintes sur l'échan...
Prochain SlideShare
Chargement dans…5
×

UML OCL : Liaison avecUML -- 24

622 vues

Publié le

Introduction a OCL
Cette deuxième partie présente la relation entre OCL et UML.
Elle fait suite à la description d'OCL comme un langage d'expression.

Publié dans : Formation
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
622
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
50
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

UML OCL : Liaison avecUML -- 24

  1. 1. megaplanet.org/JeanMarieFavre OCL : Liaison avec UMLOCL : Liaison avec UML ContexteContexte Accès aux attributs et opérationsAccès aux attributs et opérations Navigation via les associationsNavigation via les associations Invariant, Propriété dérivée, Valeur d'initialisationInvariant, Propriété dérivée, Valeur d'initialisation Précondition, Postcondition, Corps de méthodePrécondition, Postcondition, Corps de méthode
  2. 2. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 2 Contexte d'une contrainteContexte d'une contrainte Contrainte toujours associée à un élément de modèle :Contrainte toujours associée à un élément de modèle : lele contextecontexte de la contrainte.de la contrainte. Deux techniques pour spécifier le contexte :Deux techniques pour spécifier le contexte : Client 1..4 0..* titulaires Compte numéro solde dMax * 1 signataire1 0..* CarteBleue code retraitMax context Compte inv: dmax >=0 inv: solde > -dMax context CarteBleue inv: Compte.titulaires->includes(self.signataire) inv: code>0 and code<=9999 inv: retraitMax>10 context Compte::solde : integer init: floor(depotInitial * 10 / 100) { init: 0 } { inv: Compte.titulaires->includes(self.signataire)} { inv: dMax >= 0 inv: solde > -dMax }
  3. 3. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 3 Opérations spécifiquesOpérations spécifiques au modèle objet d ’UMLau modèle objet d ’UML accès à un attribut, à une opérationaccès à un attribut, à une opération navigation via les associationsnavigation via les associations VIA une associationVIA une association VERS une classe associativeVERS une classe associative DEPUIS une classe associativeDEPUIS une classe associative VIA un association qualifiéeVIA un association qualifiée accès au type et super typesaccès au type et super types accès aux instances d’une classe (extension)accès aux instances d’une classe (extension) accès à l'état d'un objetaccès à l'état d'un objet constructions pour les post conditionsconstructions pour les post conditions
  4. 4. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 4 Accès à un attributAccès à un attribut Accès à une méthodeAccès à une méthode objet . attributobjet . attribut Accès à un attributAccès à un attribut selfself.dateDeNaissance.dateDeNaissance objet . méthodeobjet . méthode(( expr1expr1,, expr2expr2, … ), … ) Accès à une méthodeAccès à une méthode sans effet de bordsans effet de bord (( {query}{query} )) selfself.impôts(1998).impôts(1998)
  5. 5. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 5 Navigation VIA une associationNavigation VIA une association X Set(X) OrderedSet(X) Bag(X) Sequence(X) Personne Société employés * 0..2 sociétés objet . roleobjet . role X 1 ou 0..1 X* X {ordered} * X * X {ordered, nonunique} * {nonunique} typetype
  6. 6. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 6 ExempleExemple Personne Set(Voiture) OrderedSet(Personne) Sequence(Personne) self.père self.voitures self.enfants self.épouses 0..1 * * {ordered} * {ordered,nonunique}
  7. 7. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 7 Navigation VIA une associationNavigation VIA une association Rappel: élement converti en singletonRappel: élement converti en singleton selfself.père->.père->sizesize()() = 1= 1 Permet de tester si la valeur est définiePermet de tester si la valeur est définie selfself.père->.père->isEmptyisEmpty()() selfself.épouse->.épouse->notEmptynotEmpty()() impliesimplies selfself.épouse.sexe =.épouse.sexe = Sexe::fémininSexe::féminin Association sans nom de rôleAssociation sans nom de rôle => nom de la classe destination (avec une minuscule)=> nom de la classe destination (avec une minuscule) père épouse 0..1 0..1Personne sexe
  8. 8. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 8 Personne Société Navigation VERS une associationNavigation VERS une association objet . associationobjet . association Permet d ’accéder à l ’ensemble des liensPermet d ’accéder à l ’ensemble des liens employés * 0..2 Emploi salaire augmenter() sociétés s.Emploi p.Emploi s.Emploi->collect(salaire)->sum() s.Emploi.salaire->forall(x | x>500 ) sp
  9. 9. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 9 Navigation VERS une association réflexiveNavigation VERS une association réflexive association réflexive => indication du sens de parcoursassociation réflexive => indication du sens de parcours (vers le role)(vers le role) objet . associationobjet . association [[ rolerole ]] Personne age chefs employés * * Evaluation note paul.Evaluation [chefs ] paul.Evaluation [employés] paul.Evaluation [chefs].note -> sum()/paul.chefs->size() paul.Evaluation ? marie sophie chefs chefs note=5 e1 note=15 e1 paulpablo chefs note=5 e3
  10. 10. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 10 Personne Société Emploi salaire Navigation DEPUIS une associationNavigation DEPUIS une association lienlien .. rolerole Accès aux objets à d'un lienAccès aux objets à d'un lien toujourstoujours un et un seulun et un seul objetobjet employés * 0..2 sociétés e.employés e.sociétés s.Emploi->select(salaire<1000).employés e s
  11. 11. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 11 Navigation via une Association QualifiéeNavigation via une Association Qualifiée Banque Comptenc 0..1 lienlien .. rolerole [[valeurvaleur,,valeurvaleur, … ], … ] Accès qualifiéAccès qualifié b.compte[ 4029 ] b.compte[ 0 ] compte Gère lienlien .. rolerole codomainecodomaine lienlien .. assoc . keyassoc . key domainedomaine b.compte b.Gére.nc
  12. 12. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 12 Opérations concernant les typesOpérations concernant les types objetobjet .. oclIsTypeOf(oclIsTypeOf( typetype )) type directtype direct objetobjet . oclIsKindOf(. oclIsKindOf( typetype )) type direct ou supertypestype direct ou supertypes objetobjet . oclAsType(. oclAsType( typetype )) Conversion de type (casting)Conversion de type (casting) Figures Cercles Polygones Triangles Carrés c1 c2 c3 c4 t1 t2 ca1 ca2 p
  13. 13. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 13 Opérations concernant les typesOpérations concernant les types Contraintes sur les typesContraintes sur les types p.enfantsp.enfants->select(oclIsTypeOf(->select(oclIsTypeOf(FemmeFemme)))) p.enfants->p.enfants->select(oclIsKindOf(select(oclIsKindOf(FemmeFemme)))) Accès aux propriétés redéfiniesAccès aux propriétés redéfinies f .f . oclAsType(oclAsType(PersonPerson)).nom.nom Typage dynamiqueTypage dynamique p.enfants-p.enfants->select(oclIsKindOf(>select(oclIsKindOf(FemmeFemme)).oclAsType(Set()).oclAsType(Set(FemmeFemme)))) ->select(->select(nomDeJF <> nomnomDeJF <> nom)) Personne nom enfants * Femme nomDeJF
  14. 14. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 14 Opérations définies sur les classesOpérations définies sur les classes Classe.propdeclasseClasse.propdeclasse Permet d ’accéder aux propriétés de classesPermet d ’accéder aux propriétés de classes Classe.Classe.allInstancesallInstances Retourne l ’ensemble des instances de la classeRetourne l ’ensemble des instances de la classe c ’est à dire l ’extension de cette classec ’est à dire l ’extension de cette classe Personne.allInstances->Personne.allInstances->size()size() < 500< 500 Personne.allInstances->Personne.allInstances->forallforall(p1,p2 |(p1,p2 | p1<>p2p1<>p2 impliesimplies p1.numsecu <> p2.numsecu)p1.numsecu <> p2.numsecu) Personne.allInstances-Personne.allInstances->isUnique>isUnique(numsecu)(numsecu)
  15. 15. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 15 Où utiliser OCLOù utiliser OCL OCL peut être utilisé pour décrire des prédicatsOCL peut être utilisé pour décrire des prédicats inv:inv: invariants de classesinvariants de classes inv:inv: solde < decouvertMaxsolde < decouvertMax pre:pre: pré-conditions d ’opérationspré-conditions d ’opérations pre:pre: montantARetirer > 0montantARetirer > 0 post:post: post-conditions d ’opérationspost-conditions d ’opérations post:post: solde > solde@presolde > solde@pre OCL peut également être utilisé pour décrire des expressionsOCL peut également être utilisé pour décrire des expressions def:def: déclarer des attributs ou des opérationsdéclarer des attributs ou des opérations def:def: nbEnfants:IntegernbEnfants:Integer init:init: spécifier la valeur initiale des attributsspécifier la valeur initiale des attributs init:init: enfants->size()enfants->size() body:body: exprimer le corps de méthodes {query}exprimer le corps de méthodes {query} body:body: enfants->select(age< a )enfants->select(age< a ) derive:derive: définir des élements dérivés (/)définir des élements dérivés (/) derive:derive: age<18age<18
  16. 16. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 16 InvariantsInvariants (inv)(inv) Prédicat associé à une classe ou une associationPrédicat associé à une classe ou une association Doit être vérifié à tout instantDoit être vérifié à tout instant Le contexte est défini par un objetLe contexte est défini par un objet cet objet peut être référencé parcet objet peut être référencé par selfself l ’objet peut être nommé explicitement (possibilité supprimée en UML2.0?)l ’objet peut être nommé explicitement (possibilité supprimée en UML2.0?) L ’invariant peut être nomméL ’invariant peut être nommé contextcontext PersonnePersonne invinv pasTropVieux : age < 110pasTropVieux : age < 110 invinv : self.age >= 0: self.age >= 0
  17. 17. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 17 Exemples d’invariantsExemples d’invariants (inv)(inv) contextcontext PersonnePersonne invinv : age>0: age>0 andand selfself.age<110.age<110 invinv mariageLégal : mariémariageLégal : marié impliesimplies age > 16age > 16 invinv enfantsOk : enfants->enfantsOk : enfants->sizesize() < 20() < 20 invinv : not enfants->: not enfants-> includesincludes((selfself)) invinv : enfants->: enfants->includesAllincludesAll(filles)(filles) invinv : enfants->: enfants->forallforall( e |( e | selfself.age - e.age < 7 ).age - e.age < 7 )
  18. 18. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 18 Définitions additionnellesDéfinitions additionnelles (def)(def) Il est possible en OCL de définir dans une classe existante:Il est possible en OCL de définir dans une classe existante: de nouveaux attributsde nouveaux attributs de nouvelles opérationsde nouvelles opérations contextcontext ClasseClasse defdef: nomatt : type = expr: nomatt : type = expr defdef: nomop( … ) : type = expr: nomop( … ) : type = expr Utile pour décomposer des requetes ou contraintes complexesUtile pour décomposer des requetes ou contraintes complexes Eviter de "polluer" le modèleEviter de "polluer" le modèle contextcontext PersonnePersonne defdef: ancestres() :: ancestres() : SetSet(Personne)(Personne) = parents->= parents-> unionunion(parents.ancestres()->(parents.ancestres()->asSetasSet())()) invinv:: notnot ancestres()->ancestres()->includesincludes((selfself))
  19. 19. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 19 Expression de propriétés dérivéesExpression de propriétés dérivées (derive)(derive) Préciser en OCL la valeur d'un attribut ou d'une associationPréciser en OCL la valeur d'un attribut ou d'une association dérivéedérivée Complète la notationComplète la notation // contextcontext Personne::estMarié : BooleanPersonne::estMarié : Boolean derivederive : conjoint->: conjoint->notEmpty()notEmpty() contextcontext Personne::filles :Personne::filles : SetSet(Personne)(Personne) derivederive : enfants->: enfants->selectselect(sexe = Sexe::Feminin)(sexe = Sexe::Feminin) contextcontext Personne::grandParents :Personne::grandParents : SetSet(Personne)(Personne) derivederive: parents.parents->: parents.parents->asSetasSet()()
  20. 20. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 20 Expression du corps d'une méthodeExpression du corps d'une méthode (body)(body) Description en OCL d'une méthode sans effet de bordDescription en OCL d'une méthode sans effet de bord (({isQuery}{isQuery})) Equivalent à une requêteEquivalent à une requête contextcontext Personne:acf( p : Personne ) :Personne:acf( p : Personne ) : OrderedSetOrderedSet(Personne)(Personne) bodybody : self.ancestres()->: self.ancestres()->intersectionintersection(p.ancestres())(p.ancestres()) ->select(sexe = Sexe::Feminin)-->select(sexe = Sexe::Feminin)- >>sortedBysortedBy(dateDeNaissance)(dateDeNaissance) contextcontext PersonnePersonne defdef: ancestres :: ancestres : SetSet(Personne)(Personne) = parents->= parents->unionunion(parents.ancestres->(parents.ancestres->asSetasSet())())
  21. 21. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 21 Pré-conditions et post-conditionsPré-conditions et post-conditions (pre, post)(pre, post) Prédicats associés à une opérationPrédicats associés à une opération les pré-conditions doivent être vérifiées avant l ’exécutionles pré-conditions doivent être vérifiées avant l ’exécution les post-conditions sont vraies après l ’exécutionles post-conditions sont vraies après l ’exécution selfself désigne l ’objet sur lequel l ’opération à lieudésigne l ’objet sur lequel l ’opération à lieu Dans une post-condition :Dans une post-condition : @pre@pre permet de faire référence à la valeur avant l ’opérationpermet de faire référence à la valeur avant l ’opération resultresult designe le resultatdesigne le resultat ocsIsNewocsIsNew()() indique si un objet n'existait pas dans l'état précédentindique si un objet n'existait pas dans l'état précédent contextcontext Type::opération( param1 : Type1, …) : TypeType::opération( param1 : Type1, …) : Type prepre nom1 : param1 < …nom1 : param1 < … prepre nom2 : …nom2 : … postpost nom2 : …nom2 : … resultresult > …> …
  22. 22. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 22 ExemplesExemples contextcontext Personne::retirer( montant : Integer )Personne::retirer( montant : Integer ) prepre :: montant > 0montant > 0 postpost : solde < solde: solde < solde@pre@pre - montant- montant contextcontext Personne::salaire() : integerPersonne::salaire() : integer postpost : result >= Legislation::salaireMinimum: result >= Legislation::salaireMinimum contextcontext Compagnie::embaucheEmployé( p : Personne) : ContratCompagnie::embaucheEmployé( p : Personne) : Contrat prepre pasPrésent :pasPrésent : notnot employés->employés->includesincludes(p)(p) postpost embauché : employés = employésembauché : employés = employés@pre@pre->->includingincluding(p)(p) postpost :: result.oclIsNewresult.oclIsNew()() postpost :: resultresult.compagnie =.compagnie = selfself andand resultresult.employé = p.employé = p
  23. 23. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 23 ExercicesExercices Spécifier une fonction qui retourne la racine carrée d'un réelSpécifier une fonction qui retourne la racine carrée d'un réel context Math::Sqrt(x : Real) : Realcontext Math::Sqrt(x : Real) : Real pre: x>=0pre: x>=0 post: result * result = xpost: result * result = x Partie entière de la racine carrée d'un entierPartie entière de la racine carrée d'un entier context Math::ISqrt( x : Integer ) : Integercontext Math::ISqrt( x : Integer ) : Integer pre: x>=0pre: x>=0 post: result*result <= x and (result+1)*(result+1) > xpost: result*result <= x and (result+1)*(result+1) > x
  24. 24. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 24 Accès à l'état d'un objetAccès à l'état d'un objet obj . oclInState( state )obj . oclInState( state ) Indique si l'objet est dans l'état spécifiéIndique si l'objet est dans l'état spécifié Si une machine à état a été associée à la classe de l'objetSi une machine à état a été associée à la classe de l'objet :::: pour avoir accès aux états imbriquéspour avoir accès aux états imbriqués enfants->select( e | e.oclInState( Employé ) )enfants->select( e | e.oclInState( Employé ) ) livres->exists( l.oclInState( Rentré::ARanger ) )livres->exists( l.oclInState( Rentré::ARanger ) )
  25. 25. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 25 Contraintes sur l'état dans les post-conditionsContraintes sur l'état dans les post-conditions @pre@pre fait référence à la valeur d'une propriété dans l'état initialfait référence à la valeur d'une propriété dans l'état initial resultresult fait référence au résultatfait référence au résultat oclIsNewoclIsNew indique que l'objet n'existait pas dans l'état initialindique que l'objet n'existait pas dans l'état initial context Compte::virementInterne( dest : Compte, montant : integer )context Compte::virementInterne( dest : Compte, montant : integer ) : Opération: Opération pre: montant>0pre: montant>0 pre: montant<self.soldepre: montant<self.solde pre: self.titulaire = dest.titulairepre: self.titulaire = dest.titulaire pre: self.banque = dest.banquepre: self.banque = dest.banque post: self.solde < self.solde@pre - montantpost: self.solde < self.solde@pre - montant post: dest.solde = dest.solde@pre + montantpost: dest.solde = dest.solde@pre + montant post: self.operations = self.operations@pre->append(result)post: self.operations = self.operations@pre->append(result) post: result.oclIsNew and result.montant = montantpost: result.oclIsNew and result.montant = montant
  26. 26. megaplanet.org/JeanMarieFavremegaplanet.org/JeanMarieFavre 26 Contraintes sur l'échange de messagesContraintes sur l'échange de messages ^^ indique qu'un message à été envoyé entre les deux étatsindique qu'un message à été envoyé entre les deux états ^^^^ dénote l'ensemble des messages envoyés entre les deux étatsdénote l'ensemble des messages envoyés entre les deux états Utile pour l'expression de protocoles, de patrons de conception, etc.Utile pour l'expression de protocoles, de patrons de conception, etc. context TreeModel::hasChanged()context TreeModel::hasChanged() post: getTreeListeners()@pre->forall( li | li ^ update() )post: getTreeListeners()@pre->forall( li | li ^ update() ) TreeModel TreeView treeListeners * update()hasChanged()

×