Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Conception par cont...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Plan
1 Introduction...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Plan
1 Introduction...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
OCL – Object Constr...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Motivation
Peut-on ...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Motivation
epouse
m...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Conception par cont...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Plan
1 Introduction...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Principes du langag...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Appel d’op´erations...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Types de base
Type ...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Op´erations sur les...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Op´erations simples...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Op´erations complex...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
V´erification de pro...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Plan
1 Introduction...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
OCL et UML
Une expr...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Notation graphique
...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Notion de contexte
...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Propri´et´es du con...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Exemple de mod`ele
...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Propri´et´es: Attri...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Propri´et´es: Types...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Propri´et´es: Op´er...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Propri´et´es: ´Etat...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Plan
1 Introduction...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Diff´erentes express...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Invariants de class...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Sp´ecification d’op´...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Pr´e-condition
Ce q...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Post-condition
Sp´e...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Post-condition
cont...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Post-condition : va...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Corps d’une op´erat...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
D´efinitions
D´efinit...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
D´efinitions
Utile p...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Valeur initiale
Sp´...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Propri´et´es d´eriv...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Propri´et´es d´eriv...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Plan
1 Introduction...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Rˆoles: navigation
...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Rˆoles: cardinalit´...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Rˆoles: noms
Quand ...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Rˆoles: navigation
...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Classe-association
...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Classe-association
...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Associations qualifi...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Plan
1 Introduction...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Sortes de Collectio...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Sortes de Collectio...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Op´erations sur les...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Op´eration sur les ...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Select et Reject
co...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Select et Reject
Sy...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Collect
collection ...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Collect
Syntaxe:
co...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Collect Nested
Op´e...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
For All
collection ...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
For All
Syntaxe:
co...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
For All
Produit car...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Exists
collection →...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Closure (1/2)
sourc...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Closure (2/2)
enfan...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Iterate
collection ...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Iterate
context Dep...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Autres op´erations ...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Plan
1 Introduction...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Tuples (N-Uplets)
D...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
N-Uplets
Notation
L...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
N-Uplets
Les valeur...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
N-Uplets
Notation
L...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Messages
Appel d’op...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Messages
Jokers
con...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Le type OclMessage
...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Valeurs des argumen...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Messages
Acc`es aux...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
St´er´eotypes des c...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Package context
Il ...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
R`egles de conformi...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Propri´et´es pr´ed´...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Expression Let
Quan...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Valeurs pr´ec´edent...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Valeurs pr´ec´edent...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
H´eritage de contra...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
H´eritage d’invaria...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
H´eritage de pr´e e...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Plan
1 Introduction...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Conseils de mod´eli...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Rappels
La concepti...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Applicabilit´e
G´en...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
R´ef´erences
The Ob...
Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion
Outils
ModelRun (Bo...
Prochain SlideShare
Chargement dans…5
×

OCL - Conception par contrats avec UML.

3 950 vues

Publié le

Conception par contrats avec UML.
OCL, The Object Constraint Language.

Publié dans : Technologie
1 commentaire
3 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
3 950
Sur SlideShare
0
Issues des intégrations
0
Intégrations
106
Actions
Partages
0
Téléchargements
202
Commentaires
1
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

OCL - Conception par contrats avec UML.

  1. 1. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Conception par contrats avec UML OCL – Object Constraint Language Gerson Suny´e gerson.sunye@univ-nantes.fr Universit´e de Nantes 21 mars 2014 G. Suny´e Universit´e de Nantes 1/ 92 Conception par contrats avec UML
  2. 2. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Plan 1 Introduction 2 Notions de base 3 OCL et UML 4 Diff´erentes expressions OCL 5 Navigation `a travers les associations 6 Collections 7 Concepts avanc´es 8 Conclusion G. Suny´e Universit´e de Nantes 2/ 92 Conception par contrats avec UML
  3. 3. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Plan 1 Introduction 2 Notions de base 3 OCL et UML 4 Diff´erentes expressions OCL 5 Navigation `a travers les associations 6 Collections 7 Concepts avanc´es 8 Conclusion G. Suny´e Universit´e de Nantes 3/ 92 Conception par contrats avec UML
  4. 4. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion OCL – Object Constraint Language Langage de description de contraintes de UML. Permet de restreindre une ou plusieurs valeurs d’un ou de partie d’un mod`ele. Utilis´e dans les mod`eles UML ainsi que dans son m´eta-mod`ele (grˆace aux st´er´eotypes). Formel, non ambigu, mais facile `a utiliser (mˆeme par les non math´ematiciens). Actuellement, dans la version 2.3.1. G. Suny´e Universit´e de Nantes 4/ 92 Conception par contrats avec UML
  5. 5. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Motivation Peut-on rendre plus pr´ecis un diagramme UML? epouse mari 0..1 0..1 age() : Integer naissance : Date prenom : String nom : String sexe : enum {homme, femme} Personne L'épouse du mari d'une personne est elle même. En d'autres termes, le mari d'une femme l'a pour épouse. G. Suny´e Universit´e de Nantes 5/ 92 Conception par contrats avec UML
  6. 6. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Motivation epouse mari 0..1 0..1 age() : Integer naissance : Date prenom : String nom : String sexe : enum {homme, femme} Personne L'épouse du mari d'une personne est elle même. En d'autres termes, le mari d'une femme l'a pour épouse. Les diagrammes UML manquent parfois de pr´ecision. Le langage naturel est souvent ambigu. G. Suny´e Universit´e de Nantes 6/ 92 Conception par contrats avec UML
  7. 7. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Conception par contrats avec UML Ajout de contraintes `a des ´el´ements de mod´elisation. epouse mari 0..1 0..1 age() : Integer naissance : Date prenom : String nom : String sexe : enum {homme, femme} Personne L'épouse du mari d'une personne est elle même. En d'autres termes, le mari d'une femme l'a pour épouse. context Personne inv: self .epouse→notEmpty() implies self.epouse.mari = self and self .mari→notEmpty() implies self.mari.epouse = self G. Suny´e Universit´e de Nantes 7/ 92 Conception par contrats avec UML
  8. 8. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Plan 1 Introduction 2 Notions de base 3 OCL et UML 4 Diff´erentes expressions OCL 5 Navigation `a travers les associations 6 Collections 7 Concepts avanc´es 8 Conclusion G. Suny´e Universit´e de Nantes 8/ 92 Conception par contrats avec UML
  9. 9. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Principes du langage Une expression OCL est une expression sans effet de bord, portant sur les ´el´ements suivants : 1 Types de base :Integer, Real, Boolean, String, UnlimitedNatural ; 2 Collections d’´el´ements ; 3 ´El´ements du contexte (le mod`ele UML associ´e). G. Suny´e Universit´e de Nantes 9/ 92 Conception par contrats avec UML
  10. 10. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Appel d’op´erations L’appel d’une op´eration sur un ´el´ement se fait grˆace `a la notation point´ee: ’Nantes’.substring(1,3) = ’Nan’ L’appel d’une op´eration sur une collection d’´el´ements se fait grˆace `a une fl`eche (→): {1, 2, 3, 4, 5}→size() = 5 G. Suny´e Universit´e de Nantes 10/ 92 Conception par contrats avec UML
  11. 11. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Types de base Type Valeurs Boolean true, false Integer 1, -5, 2, 34, 26524, . . . Real 1.5, 3.14, . . . String ‘To be or not to be. . . ’ UnlimitedNatural 0, 1, 2, 42, . . . , * G. Suny´e Universit´e de Nantes 11/ 92 Conception par contrats avec UML
  12. 12. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Op´erations sur les types de base Type Operations Integer =, *, +, -, /, abs(), div(), mod(), max(), min() Real =, *, +, -, /, abs(), floor(), round(), max(), min(), >, <, <=, >=, . . . String =, size(), concat(), substring(), toInteger(), toReal(), toUpper(), toLower() Boolean or, xor, and, not, implies UnlimitedNatural *,+,/ G. Suny´e Universit´e de Nantes 12/ 92 Conception par contrats avec UML
  13. 13. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Op´erations simples sur les collections isEmpty() : vrai si la collection est vide. notEmpty() : vrai si la collection contient au moins un ´el´ement. size() : nombre d’´el´ements dans la collection. count(elem) : nombre d’occurrences de elem dans la collection. Exemples: {}→isEmpty() −− Vrai {1}→notEmpty() −− Vrai {1,2,3,4,5} →size() = 5 {1,2,3,4,5} →count(2) = 1 G. Suny´e Universit´e de Nantes 13/ 92 Conception par contrats avec UML
  14. 14. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Op´erations complexes sur les collections Certaines op´erations utilisent un it´erateur (nomm´e each par convention), c’est `a dire, une variable qui sera ´evalu´ee `a chaque ´el´ement de la collection. select( expression−booleenne) : S´electionne (filtre) un sous-ensemble de la collection. collect( expression ) : ´Evalue une expression pour chaque ´el´ement de la collection. Exemples: {1,2,3,4,5} →select(each | each > 3) = {4,5} {’a’,’bb’,’ccc’,’dd’}→collect(each | each.toUpper()) = {’A’,’BB’, ’CCC’,’DD’} G. Suny´e Universit´e de Nantes 14/ 92 Conception par contrats avec UML
  15. 15. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion V´erification de propri´et´es sur des collections forAll( expression−booleene) : V´erifie que tous les ´el´ements de la collection respectent l’expression. exists( expression−booleene) : V´erifie qu’au moins un ´el´ement de la collection respecte l’expression. Exemples: {1,2,3,4,5} →forAll(each | each > 0 and each < 10) −− Vrai {1,2,3,4,5} →exists(each | each = 3) −− Vrai G. Suny´e Universit´e de Nantes 15/ 92 Conception par contrats avec UML
  16. 16. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Plan 1 Introduction 2 Notions de base 3 OCL et UML 4 Diff´erentes expressions OCL 5 Navigation `a travers les associations 6 Collections 7 Concepts avanc´es 8 Conclusion G. Suny´e Universit´e de Nantes 16/ 92 Conception par contrats avec UML
  17. 17. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion OCL et UML Une expression OCL peut aussi porter sur les ´el´ements UML suivants: Classificateurs (classes, interfaces, composants, cas d’utilisation, etc.) et leurs propri´et´es : op´erations sans effet de bord, attributs et rˆoles d’associations ; ´Etats (des machines d’´etats associ´ees). G. Suny´e Universit´e de Nantes 17/ 92 Conception par contrats avec UML
  18. 18. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Notation graphique Directement `a l’int´erieur d’un mod`ele ou dans un document s´epar´e: +nom: String +age:Integer Personne «invariant» age < 150 +nom: String +age:Integer Personne {age < 150} context Personne inv: self .age < 150 context Personne inv: age < 150 G. Suny´e Universit´e de Nantes 18/ 92 Conception par contrats avec UML
  19. 19. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Notion de contexte Toute expression OCL est li´ee `a un contexte sp´ecifique, l’´el´ement auquel l’expression est attach´ee. Le contexte peut ˆetre utilis´e `a l’int´erieur d’une expression grˆace au mot-clef ”self”. Implicite dans toute expression OCL. Similaire `a celui de Smalltalk ou Python, au ”this” de C++ et Java, ou au ”Current” de Eiffel. G. Suny´e Universit´e de Nantes 19/ 92 Conception par contrats avec UML
  20. 20. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Propri´et´es du contexte Le contexte permet l’acc`es aux propri´et´es de l’´el´ement UML attach´e, `a l’int´erieur d’une expression. +nom: String +age:Integer Personne context Personne −− (...) self .nom.size() > 1 and self .age ≥ 0 and self .age ≤ 150 G. Suny´e Universit´e de Nantes 20/ 92 Conception par contrats avec UML
  21. 21. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Exemple de mod`ele estAdmis() : Boolean age() : Integer nom : String nasissance : Date Étudiant date : Date valeur : Integer Note nom : String Université code:integer ajouter(Enseignant) nom : String Département enseigner(Matière) nom : String début : Date salaire : Integer titre : Titre /service : Integer Enseignant heures : Integer nom : String Matière enseignantsdepartement maitrise est_maitrisee matiereetudiant etudiants enseigne enseignant * ** * * * * * 1 1 1 1 mdc prof «enumeration» Titre jour : Integer mois : Integer an : Integer «datatype» Date G. Suny´e Universit´e de Nantes 21/ 92 Conception par contrats avec UML
  22. 22. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Propri´et´es: Attributs On utilise la notation point´ee: Attributs d’instance: context Enseignant inv: self . salaire < 10 Attributs de classe: context Enseignant inv: self . salaire < Enseignant::salaireMaximum G. Suny´e Universit´e de Nantes 22/ 92 Conception par contrats avec UML
  23. 23. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Propri´et´es: Types ´enum´er´es D´efinition: enum{value1, value2, value3} Pour ´eviter les conflits de nom, on utilise le nom de l’´enum´eration: Enum::val1 context Enseignant inv: self . titre = Titre :: prof implies self . salaire > 10 G. Suny´e Universit´e de Nantes 23/ 92 Conception par contrats avec UML
  24. 24. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Propri´et´es: Op´erations de Query Notation point´ee: Op´erations d’instance: context Etudiant inv: self .age() > 16 Op´erations de classe: context Etudiant inv: self .age() > Etudiant::ageMinimum() G. Suny´e Universit´e de Nantes 24/ 92 Conception par contrats avec UML
  25. 25. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Propri´et´es: ´Etats Accessibles avec oclInState(): context Departement::ajouter(e:Enseignant) pre: e.oclInState(disponible ) pre:e.oclInState( indisponible :: en vacances) −− etats imbriques G. Suny´e Universit´e de Nantes 25/ 92 Conception par contrats avec UML
  26. 26. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Plan 1 Introduction 2 Notions de base 3 OCL et UML 4 Diff´erentes expressions OCL 5 Navigation `a travers les associations 6 Collections 7 Concepts avanc´es 8 Conclusion G. Suny´e Universit´e de Nantes 26/ 92 Conception par contrats avec UML
  27. 27. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Diff´erentes expressions OCL OCL peut sp´ecifier : 1 Des invariants de classe ; 2 Les pr´e- et post-conditions d’une op´eration (ou d’une transition) ; 3 Le corps d’une op´eration. 4 Des nouvelles propri´et´es ; 5 L’initialisation d’attributs ; 6 Des propri´et´es d´eriv´ees. G. Suny´e Universit´e de Nantes 27/ 92 Conception par contrats avec UML
  28. 28. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Invariants de classe Dans un ´etat stable, toute instance d’une classe doit v´erifier les invariants de cette classe. Exemples: context e : Etudiant inv: ageMinimum: e.age > 16 context e : Etudiant inv: e.age > 16 context Etudiant inv: self .age > 16 context Etudiant inv: age > 16 G. Suny´e Universit´e de Nantes 28/ 92 Conception par contrats avec UML
  29. 29. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Sp´ecification d’op´erations Inspir´ee des types abstraits : une op´eration est compos´ee d’une signature, de pr´e-conditions et de post-conditions. Permet de contraindre l’ensemble de valeurs d’entr´ee d’une op´eration. Permet de sp´ecifier la s´emantique d’une op´eration : ce qu’elle fait et non comment elle le fait. G. Suny´e Universit´e de Nantes 29/ 92 Conception par contrats avec UML
  30. 30. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Pr´e-condition Ce qui doit ˆetre respect´e par le client (l’appelant de l’op´eration) Repr´esent´ee par une expression OCL st´er´eotyp´ee precondition context Departement::ajouter(e : Enseignant) : Integer pre nonNul: not e.oclIsUndefined() G. Suny´e Universit´e de Nantes 30/ 92 Conception par contrats avec UML
  31. 31. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Post-condition Sp´ecifie ce qui devra ˆetre v´erifi´e apr`es l’ex´ecution d’une op´eration. Repr´esent´ee par une expression OCL st´er´eotyp´ee postcondition : Op´erateurs sp´eciaux: @pre: acc`es `a une valeur d’une propri´et´e d’avant l’op´eration (old de Eiffel). result: acc`es au r´esultat de l’op´eration. G. Suny´e Universit´e de Nantes 31/ 92 Conception par contrats avec UML
  32. 32. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Post-condition context Etudiant::age() : Integer post correct : result = (today − naissance).years () context Typename::operationName(param1: type1, ...): Type post: result = ... context Typename::operationName(param1: type1, ...): Type post resultOk: result = ... G. Suny´e Universit´e de Nantes 32/ 92 Conception par contrats avec UML
  33. 33. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Post-condition : valeurs pr´ec´edentes A l’int´erieur d’une postcondition, deux valeurs sont disponibles pour chaque propri´et´e: la valeur de la propri´et´e avant l’op´eration. la valeur de la propri´et´e apr`es la fin de l’op´eration. context Personne:: anniversaire () post: age = age@pre + 1 context Enseignant::augmentation(v : Integer) post: self . salaire = self. salaire @pre + v G. Suny´e Universit´e de Nantes 33/ 92 Conception par contrats avec UML
  34. 34. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Corps d’une op´eration Sp´ecification du corps d’une op´eration sans effet de bord. context Universite :: enseignants() : Set(Enseignant) body: self .departements.enseignants→asSet() G. Suny´e Universit´e de Nantes 34/ 92 Conception par contrats avec UML
  35. 35. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion D´efinitions D´efinition de nouveaux attributs et op´erations dans une classe existante. context Classe def: nomatt : type = expr def: nomop( ... ) : type = expr G. Suny´e Universit´e de Nantes 35/ 92 Conception par contrats avec UML
  36. 36. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion D´efinitions Utile pour d´ecomposer des expressions complexes, sans surcharger le mod`ele. context Enseignant def: eleves () : Bag(Etudiants) = self .enseigne. etudiant inv: self . titre = Titre :: prof implies self . eleves () →forAll(each | each .estAdmis()) −− un professeur a toujours 100% de reussite context Departement def: eleves ():Set(Etudiants) = self . enseignants .enseigne. etudiant→asSet() G. Suny´e Universit´e de Nantes 36/ 92 Conception par contrats avec UML
  37. 37. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Valeur initiale Sp´ecification de la valeur initiale d’un attribut ou d’un rˆole (Association End). Le type de l’expression doit ˆetre conforme au type de l’attribut ou du rˆole. context Typename::attributeName: Type init : −− expression representant la valeur initiale context Enseignant:: salaire : Integer init : 800 G. Suny´e Universit´e de Nantes 37/ 92 Conception par contrats avec UML
  38. 38. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Propri´et´es d´eriv´ees Sp´ecification de la valeur d´eriv´ee d’un attribut ou d’un rˆole (Association End). context Typename::assocRoleName: Type derive: −− expression representant la regle de derivation G. Suny´e Universit´e de Nantes 38/ 92 Conception par contrats avec UML
  39. 39. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Propri´et´es d´eriv´ees context Enseignant:: service : Integer derive: self .enseigne.heures→sum() context Personne:: celibataire : Boolean derive: self . conjoint→isEmpty() G. Suny´e Universit´e de Nantes 39/ 92 Conception par contrats avec UML
  40. 40. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Plan 1 Introduction 2 Notions de base 3 OCL et UML 4 Diff´erentes expressions OCL 5 Navigation `a travers les associations 6 Collections 7 Concepts avanc´es 8 Conclusion G. Suny´e Universit´e de Nantes 40/ 92 Conception par contrats avec UML
  41. 41. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Rˆoles: navigation Il est possible de naviguer `a travers les associations, en utilisant le rˆole oppos´e: 1 1 * universite departement ajouter(Enseignant) nom : String Département nom : String Université context Departement inv: self . universite →notEmpty() context Universite inv: self .departement→ (...) G. Suny´e Universit´e de Nantes 41/ 92 Conception par contrats avec UML
  42. 42. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Rˆoles: cardinalit´es Le type de la valeur de l’expression d´epend de la cardinalit´e maximale du rˆole. Si ´egal `a 1, alors c’est un classificateur. Si > 1, alors c’est une collection. context Matiere −− un objet: inv: self .enseignant.oclInState(disponible ) −− une collection (Set): inv: self . est maitrisee →notEmpty() enseigner(Matière) nom : String début : Date salaire : Integer titre : Titre /service : Integer Enseignant heures : Integer nom : String Matière maitrise est_maitrisee enseigne enseignant * * *1 G. Suny´e Universit´e de Nantes 42/ 92 Conception par contrats avec UML
  43. 43. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Rˆoles: noms Quand le nom de rˆole est absent, le nom du type (en minuscule) est utilis´e. Il est possible de naviguer sur des rˆoles de cardinalit´e 0 ou 1 en tant que collection: context Departement inv: self.chef→size() = 1 context Departement inv: self.chef.age > 40 context Personne inv: self .epouse→notEmpty() implies self .epouse.sexe = Sexe::femme G. Suny´e Universit´e de Nantes 43/ 92 Conception par contrats avec UML
  44. 44. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Rˆoles: navigation Il est possible de combiner des expressions: context Personne inv: self .epouse→notEmpty() implies self.epouse.age ≥ 18 and self .mari→notEmpty() implies self.mari.age ≥ 18 G. Suny´e Universit´e de Nantes 44/ 92 Conception par contrats avec UML
  45. 45. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Classe-association On utilise le nom de la classe-association, en minuscules: context Etudiant inv: −− La moyenne des notes d’un ´etudiant est toujours sup´erieure `a 4: self .note→average() > 4 estAdmis() : Bool age() : Integer nom : string naissance : Date Étudiant date : Date valeur : Integer Note heures : Integer nom : String Matière matiereetudiant G. Suny´e Universit´e de Nantes 45/ 92 Conception par contrats avec UML
  46. 46. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Classe-association Il est possible de naviguer `a partir de la classe-association en utilisant les noms de rˆole et la notation point´ee: context Note inv: self . etudiant .age() ≥ 18 self .matiere.heures > 3 estAdmis() : Bool age() : Integer nom : string naissance : Date Étudiant date : Date valeur : Integer Note heures : Integer nom : String Matière matiereetudiant G. Suny´e Universit´e de Nantes 46/ 92 Conception par contrats avec UML
  47. 47. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Associations qualifi´ees La valeur du qualificatif est mise entre crochets: context Universite −− Le nom de l’´etudiant 8764423 est ”Martin”. inv: self . etudiants [8764423].nom = ”Martin” Quand la valeur n’est pas pr´ecis´ee, le r´esultat est une collection: context Universite −− Il existe un ´etudiant dont le nom est ”Martin” inv: self . etudiants→exists(each | each.nom = ”Martin”) estAdmis() : Bool age() : Integer nom : string nasissance : Date Étudiant nom : String Université etudiants code:integer G. Suny´e Universit´e de Nantes 47/ 92 Conception par contrats avec UML
  48. 48. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Plan 1 Introduction 2 Notions de base 3 OCL et UML 4 Diff´erentes expressions OCL 5 Navigation `a travers les associations 6 Collections 7 Concepts avanc´es 8 Conclusion G. Suny´e Universit´e de Nantes 48/ 92 Conception par contrats avec UML
  49. 49. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Sortes de Collection (1/2) Set: ensemble non ordonn´e. R´esultat d’une navigation. {1, 2, 45, 4} OrderedSet: ensemble ordonn´e. R´esultat d’une navigation par un rˆole ordonn´e (orn´e par une ´etiquette {ordered}). {1, 2, 4, 45} G. Suny´e Universit´e de Nantes 49/ 92 Conception par contrats avec UML
  50. 50. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Sortes de Collection (2/2) Bag: multi-ensemble non ordonn´e. R´esultat de navigations combin´ees. {1, 3, 4, 3} Sequence: multi-ensemble ordonn´e. Navigation `a travers un rˆole ordonn´e {Ordered} {1, 3, 3, 5, 7} {1..10} G. Suny´e Universit´e de Nantes 50/ 92 Conception par contrats avec UML
  51. 51. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Op´erations sur les collections isEmpty() : vrai si la collection est vide. notEmpty() : vrai si la collection contient au moins un ´el´ement. size() : nombre d’´el´ements dans la collection. count(elem) : nombre d’occurrences de elem dans la collection. G. Suny´e Universit´e de Nantes 51/ 92 Conception par contrats avec UML
  52. 52. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Op´eration sur les collections Select et Reject Collect Collect Nested For All Exists Closure Iterate G. Suny´e Universit´e de Nantes 52/ 92 Conception par contrats avec UML
  53. 53. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Select et Reject collection →select(elem:T | bool−expr) : collection collection →reject(elem:T | bool−expr) : collection S´electionne (respectivement rejette) le sous-ensemble d’une collection pour lequel la propri´et´e expr est vraie (respectivement fausse). G. Suny´e Universit´e de Nantes 53/ 92 Conception par contrats avec UML
  54. 54. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Select et Reject Syntaxes possibles: context Departement inv: −− sans iterateur self . enseignants→select(age > 50)→notEmpty() self . enseignants→reject(age > 23)→isEmpty() −− avec iterateur self . enseignants→select(e | e.age > 50)→notEmpty() −− avec iterateur typ´e self . enseignants→select(e : Enseignant | e.age > 50)→ notEmpty() G. Suny´e Universit´e de Nantes 54/ 92 Conception par contrats avec UML
  55. 55. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Collect collection →collect(expr) : collection ´Evalue l’expression expr pour chaque ´el´ement de la collection, et rend une autre collection, compos´ee par les r´esultats de l’´evaluation ; Le r´esultat est un multi-ensemble (Bag) ; Si le r´esultat de expr est une collection, le r´esultat ne sera pas une collection de collections. Les collections de collections sont automatiquement mises `a plat. G. Suny´e Universit´e de Nantes 55/ 92 Conception par contrats avec UML
  56. 56. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Collect Syntaxe: context Departement: self . enseignants→collect(nom) self . enseignants→collect(e | e.nom) self . enseignants→collect(e: Enseignant | e.nom) −− conversion de Bag en Set: self . enseignants→collect(nom)→asSet() −− raccourci: self . enseignants .nom G. Suny´e Universit´e de Nantes 56/ 92 Conception par contrats avec UML
  57. 57. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Collect Nested Op´eration similaire `a collect, mais qui ne met pas `a plat les collections de collections. context Universite self .departement→collectNested(enseignants) Les collections de collections peuvent ˆetre mises `a plat grˆace `a l’op´eration flatten() : Set{Set{1, 2}, Set{3, 4}} →flatten() = Set{1, 2, 3, 4} G. Suny´e Universit´e de Nantes 57/ 92 Conception par contrats avec UML
  58. 58. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion For All collection →forAll(elem:T | bool−expr) : Boolean Vrai si expr est vrai pour chaque ´el´ement de la collection. G. Suny´e Universit´e de Nantes 58/ 92 Conception par contrats avec UML
  59. 59. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion For All Syntaxe: context Departement inv: −− Tous les enseignants sont des MdC. self . enseignants→forAll( titre = Titre :: mdc) self . enseignants→forAll(each | each. titre = Titre :: mdc) self . enseignants→forAll(each: Enseignants | each. titre = Titre :: mdc) G. Suny´e Universit´e de Nantes 59/ 92 Conception par contrats avec UML
  60. 60. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion For All Produit cart´esien: context Departement inv: self . enseignants→forAll(e1, e2 : Enseignant | e1 < >e2 implies e1.nom < >e2.nom) −− equivalent `a self . enseignants→forAll(e1 | self . enseignants→ forAll(e2 | e1 < >e2 implies e1.nom < >e2.nom)) G. Suny´e Universit´e de Nantes 60/ 92 Conception par contrats avec UML
  61. 61. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Exists collection →exists(boolean−expression) : Boolean Rend vrai si expr est vraie pour au moins un ´el´ement de la collection. context: Departement inv: self . enseignants→exists(e: Enseignant | p.nom = ’Martin’) G. Suny´e Universit´e de Nantes 61/ 92 Conception par contrats avec UML
  62. 62. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Closure (1/2) source→closure(v : Type | expression−with−v) Evalue de fa¸con r´ecursive expression-with-v `a l’ensemble source et additionne les r´esultats successifs `a source. L’it´eration termine lorsque l’´evaluation de expression-with-v est un ensemble vide. G. Suny´e Universit´e de Nantes 62/ 92 Conception par contrats avec UML
  63. 63. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Closure (2/2) enfants parents * 0..2 age() : Integer naissance : Date prenom : String nom : String sexe : enum {homme, femme} Personne context Personne def descendants() : Set(Personne) = self . children →closure(children ) G. Suny´e Universit´e de Nantes 63/ 92 Conception par contrats avec UML
  64. 64. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Iterate collection →iterate(elem: T; reponse: T = <valeur> | <expr−avec−elem−et−reponse>) Op´eration g´en´erique (et complexe) applicable aux collections. G. Suny´e Universit´e de Nantes 64/ 92 Conception par contrats avec UML
  65. 65. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Iterate context Departement inv: self . enseignants→select(age > 50)→notEmpty() −− expression ´equivalente: self . enseignants→iterate(e: Enseignant; answer: Set(Enseignant) = Set {} | if e.age > 50 then answer.including(e) else answer endif) → notEmpty() G. Suny´e Universit´e de Nantes 65/ 92 Conception par contrats avec UML
  66. 66. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Autres op´erations sur les Collections includes(elem), excludes(elem) : vrai si elem est pr´esent (resp. absent) dans la collection. includesAll( coll ), excludesAll( coll ) : vrai si tous les ´el´ements de coll sont pr´esents (resp. absents) dans la collection. union(coll), intersection( coll ) : op´erations classiques d’ensembles. asSet(), asBag(), asSequence() : conversions de type. G. Suny´e Universit´e de Nantes 66/ 92 Conception par contrats avec UML
  67. 67. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Plan 1 Introduction 2 Notions de base 3 OCL et UML 4 Diff´erentes expressions OCL 5 Navigation `a travers les associations 6 Collections 7 Concepts avanc´es 8 Conclusion G. Suny´e Universit´e de Nantes 67/ 92 Conception par contrats avec UML
  68. 68. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Tuples (N-Uplets) D´efinition Une N-Uplet est une s´equence finie de objets ou composantes, o`u chaque composante est nomm´ee. Les types des composantes sont potentiellement diff´erents. Exemples : Tuple {nom:String = ’Martin’, age:Integer = 42} Tuple {nom:’Colette’, notes:Collection(Integer) = Set{12, 13, 9}, formation:String = ’Informatique’} G. Suny´e Universit´e de Nantes 68/ 92 Conception par contrats avec UML
  69. 69. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion N-Uplets Notation Les types sont optionnels. L’ordre des composantes n’est pas important : Expressions ´equivalentes : Tuple {name: String = ’Martin,’ age: Integer = 42} Tuple {name = ’Martin,’ age = 42} Tuple {age = 42, name = ’Martin’} G. Suny´e Universit´e de Nantes 69/ 92 Conception par contrats avec UML
  70. 70. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion N-Uplets Les valeurs des composantes peuvent ˆetre sp´ecifi´ees par des expressions OCL : context Universite def: statistiques : Set(Tuple(dpt:Departement, nbEtudiants:Integer, admis: Set(Etudiants), moyenne: Integer)) = departement→collect(each | Tuple {dpt:Departement = each, nbEtudiants: Integer = each.eleves()→size(), admis: Set(Person) = each.eleves()→select(estAdmis()), moyenne: Integer = eleves().note→avg() } ) G. Suny´e Universit´e de Nantes 70/ 92 Conception par contrats avec UML
  71. 71. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion N-Uplets Notation Les composantes sont accessibles grˆace `a leurs noms, en utilisant la notation point´ee : Tuple {nom:String=’Martin’, age:Integer = 42}.age = 42 L’attribut statistiques d´efinit pr´ec´edemment peut ˆetre utilis´e `a l’int´erieur d’un autre expression OCL : context Universite inv: statistiques →sortedBy(moyenne)→last().dpt.nom = ’ Informatique’ −− Le d´epartement d’informatique poss`ede les meilleurs ´etudiants. G. Suny´e Universit´e de Nantes 71/ 92 Conception par contrats avec UML
  72. 72. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Messages Appel d’op´erations et envoi d’´ev´enements On utilise l’op´erateur “ˆ” (hasSent) pour sp´ecifier qu’une communication a eu lieu. context Subject::hasChanged() post: observerˆupdate(12, 14) G. Suny´e Universit´e de Nantes 72/ 92 Conception par contrats avec UML
  73. 73. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Messages Jokers context Subject::hasChanged() post: observerˆupdate(? : Integer, ? : Integer) L’op´erateur ? indique que les valeurs des arguments ne sont pas connues. G. Suny´e Universit´e de Nantes 73/ 92 Conception par contrats avec UML
  74. 74. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Le type OclMessage OCL introduit le type OclMessage. L’op´erateur ˆˆ permet d’acc´eder `a une s´equence de messages envoy´es. observerˆˆupdate(?, ?) −− renvoie une s´equence de messages envoy´es. G. Suny´e Universit´e de Nantes 74/ 92 Conception par contrats avec UML
  75. 75. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Valeurs des arguments Il est possible d’acc´eder aux valeurs des arguments d’un message grˆace aux noms des param`etres de l’op´eration ou du signal: context Subject::hasChanged() post: let messages : Sequence(OclMessage) = observerˆˆupdate(? : Integer, ? : Integer) in messages→notEmpty() and messages→exists( m | m.i > 0 and m.j ≥ m.i ) G. Suny´e Universit´e de Nantes 75/ 92 Conception par contrats avec UML
  76. 76. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Messages Acc`es aux valeurs renvoy´es L’op´erateur OclMessage::result() permet l’acc`es `a la valeur renvoy´ee d’une op´eration (les signaux ne renvoient pas de valeur). L’op´erateur OclMessage::hasReturned() retourne vrai si l’op´eration a renvoy´e une valeur. context Person:: giveSalary (amount : Integer) post: let message : OclMessage = companyˆgetMoney(amount) in message.hasReturned() −− getMoney was sent and returned and message.result() −− the getMoney call returned true G. Suny´e Universit´e de Nantes 76/ 92 Conception par contrats avec UML
  77. 77. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion St´er´eotypes des contraintes Plusieurs st´er´eotypes sont d´efinis en standard dans UML: Invariants de classe: invariant Pr´e-conditions: precondition Post-conditions: postcondition D´efinitions de propri´et´es: definition G. Suny´e Universit´e de Nantes 77/ 92 Conception par contrats avec UML
  78. 78. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Package context Il est possible de sp´ecifier explicitement le nom du paquetage auquel appartient une contrainte : package Package::SubPackage context X inv: −− some invariant context X::operation() pre: −− some precondition endpackage G. Suny´e Universit´e de Nantes 78/ 92 Conception par contrats avec UML
  79. 79. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion R`egles de conformit´e de types Type Est conforme `a Condition Set(T1) Collection(T2) Si T1 est conforme `a T2 Sequence(T1) Collection(T2) Si T1 est conforme `a T2 Bag(T1) Collection(T2) Si T1 est conforme `a T2 OrderedSet(T1) Collection(T2) Si T1 est conforme `a T2 Integer Real G. Suny´e Universit´e de Nantes 79/ 92 Conception par contrats avec UML
  80. 80. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Propri´et´es pr´ed´efinies oclIsTypeOf(t : OclType):Boolean oclIsKindOf(t : OclType):Boolean oclInState(s : OclState):Boolean oclIsNew():Boolean oclIsUndefined():Boolean oclIsInvalid ():Boolean oclAsType(t : Type):Type allInstances():Set(T) Exemples: context Universite inv: self .oclIsTypeOf(Universite) −− vrai inv: self .oclIsTypeOf(Departement) −− faux G. Suny´e Universit´e de Nantes 80/ 92 Conception par contrats avec UML
  81. 81. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Expression Let Quand une sous-expression apparaˆıt plus d’une fois dans une contrainte, il est possible de la remplacer par une variable qui lui sert d’alias : context Person inv: let income : Integer = self.job. salary →sum() in if isUnemployed then income < 100 else income ≥ 100 endif G. Suny´e Universit´e de Nantes 81/ 92 Conception par contrats avec UML
  82. 82. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Valeurs pr´ec´edentes (1/2) Quand la valeur @pre d’une propri´et´e est un objet, toutes les valeurs atteintes `a partir de cet objet sont nouvelles : a.b@pre.c −− l’ancienne valeur de b, disons X, −− et la nouvelle valeur de c de X a.b@pre.c@pre −− l’ancienne valeur de b, disons X, −− et l’ancienne valeur de c de x. G. Suny´e Universit´e de Nantes 82/ 92 Conception par contrats avec UML
  83. 83. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Valeurs pr´ec´edentes (2/2) Avant Après a:A b b1:B c b2:B c1:C a:A cb b2:B c2:C cb1:B c3:C a.b@pre.c −− la nouvelle valeur de b1.c, c3 a.b@pre.c@pre −− l’ancienne valeur de b1.c, c1 a.b.c −− la nouvelle valeur de b2.c, c2 G. Suny´e Universit´e de Nantes 83/ 92 Conception par contrats avec UML
  84. 84. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion H´eritage de contrats Rappel: principe de substitution de Liskov (LSP) : ”Partout o`u une instance d’une classe est attendue, il est possible d’utiliser une instance d’une de ses sous-classes.” G. Suny´e Universit´e de Nantes 84/ 92 Conception par contrats avec UML
  85. 85. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion H´eritage d’invariants Cons´equences du principe de substitution de Liskov sur les invariants : Les invariants sont toujours h´erit´es par les sous-classes. Une sous-classe peut renforcer l’invariant. G. Suny´e Universit´e de Nantes 85/ 92 Conception par contrats avec UML
  86. 86. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion H´eritage de pr´e et post-conditions Cons´equences du LSP pour les pr´e et post-conditions : Une pr´e-condition peut seulement ˆetre assouplie (contrevariance). Une post-condition peut seulement ˆetre renforc´ee (covariance). G. Suny´e Universit´e de Nantes 86/ 92 Conception par contrats avec UML
  87. 87. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Plan 1 Introduction 2 Notions de base 3 OCL et UML 4 Diff´erentes expressions OCL 5 Navigation `a travers les associations 6 Collections 7 Concepts avanc´es 8 Conclusion G. Suny´e Universit´e de Nantes 87/ 92 Conception par contrats avec UML
  88. 88. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Conseils de mod´elisation Faire simple : les contrats doivent am´eliorer la qualit´e des sp´ecifications et non les rendre plus complexes. Toujours combiner OCL avec un langage naturel : les contrats servent `a rendre les commentaires moins ambigus et non `a les remplacer. Utiliser un outil. G. Suny´e Universit´e de Nantes 88/ 92 Conception par contrats avec UML
  89. 89. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Rappels La conception par contrats permet aux concepteurs de : Mod´eliser de mani`ere plus pr´ecise ; Mieux documenter un mod`ele ; Rester ind´ependant de l’impl´ementation ; Identifier les responsabilit´es de chaque composant. G. Suny´e Universit´e de Nantes 89/ 92 Conception par contrats avec UML
  90. 90. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Applicabilit´e G´en´eration de code : assertions en Eiffel, Sather. dans d’autres langages, grˆace `a des outils sp´ecialis´es : iContract, JMSAssert, jContractor, Handshake, Jass, JML, JPP, etc. G´en´eration de tests mieux cibl´es. G. Suny´e Universit´e de Nantes 90/ 92 Conception par contrats avec UML
  91. 91. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion R´ef´erences The Object Constraint Language – Jos Warmer, Anneke Kleppe. OCL home page – http://www.klasse.nl/ocl/ OCL tools – http://www.um.es/giisw/ocltools OMG Specification v2.3.1 –http://www.omg.org/spec/OCL/Current/ OMG UML 2.5 Working Group. G. Suny´e Universit´e de Nantes 91/ 92 Conception par contrats avec UML
  92. 92. Introduction Pr´eliminaires OCL et UML Expressions Navigation Collections Concepts avanc´es Conclusion Outils ModelRun (Boldsoft). http://www.borland.com/company/boldsoft.html/products/modelru OCL Compiler (Cybernetic Intelligence GMBH). http://www.cybernetic.org/ OCL Checker (Klasse Objecten) USE (Mark Richters). http://www.db.informatik.uni-bremen.de/projects/USE/ Dresden OCL. http://dresden-ocl.sourceforge.net/ Octopus (Warmer & Kleppe). http://octopus.sourceforge.net/ G. Suny´e Universit´e de Nantes 92/ 92 Conception par contrats avec UML

×