92

Click here to load reader

OCL - Conception par contrats avec UML

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Conception par contrats avec UMLOCL – Object Constraint Language

Gerson [email protected]

Universite de Nantes

21 mars 2014

G. Sunye Universite de Nantes 1/ 92

Conception par contrats avec UML

Page 2: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Plan

1 Introduction

2 Notions de base

3 OCL et UML

4 Differentes expressions OCL

5 Navigation a travers lesassociations

6 Collections

7 Concepts avances

8 Conclusion

G. Sunye Universite de Nantes 2/ 92

Conception par contrats avec UML

Page 3: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Plan

1 Introduction

2 Notions de base

3 OCL et UML

4 Differentes expressions OCL

5 Navigation a travers lesassociations

6 Collections

7 Concepts avances

8 Conclusion

G. Sunye Universite de Nantes 3/ 92

Conception par contrats avec UML

Page 4: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

OCL – Object Constraint Language

Langage de description de contraintes de UML.

Permet de restreindre une ou plusieurs valeurs d’un ou departie d’un modele.

Utilise dans les modeles UML ainsi que dans son meta-modele(grace aux stereotypes).

Formel, non ambigu, mais facile a utiliser (meme par les nonmathematiciens).

Actuellement, dans la version 2.3.1.

G. Sunye Universite de Nantes 4/ 92

Conception par contrats avec UML

Page 5: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Motivation

Peut-on rendre plus precis un diagramme UML?

epouse

mari

0..1

0..1

age() : Integer

naissance : Dateprenom : Stringnom : Stringsexe : 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. Sunye Universite de Nantes 5/ 92

Conception par contrats avec UML

Page 6: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Motivation

epouse

mari

0..1

0..1

age() : Integer

naissance : Dateprenom : Stringnom : Stringsexe : 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 manquentparfois de precision.

Le langage naturel est souventambigu.

G. Sunye Universite de Nantes 6/ 92

Conception par contrats avec UML

Page 7: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Conception par contrats avec UML

Ajout de contraintes a deselements de modelisation.

epouse

mari

0..1

0..1

age() : Integer

naissance : Dateprenom : Stringnom : Stringsexe : 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 Personneinv : self .epouse→notEmpty() implies self.epouse.mari = self and

self .mari→notEmpty() implies self.mari.epouse = self

G. Sunye Universite de Nantes 7/ 92

Conception par contrats avec UML

Page 8: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Plan

1 Introduction

2 Notions de base

3 OCL et UML

4 Differentes expressions OCL

5 Navigation a travers lesassociations

6 Collections

7 Concepts avances

8 Conclusion

G. Sunye Universite de Nantes 8/ 92

Conception par contrats avec UML

Page 9: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Principes du langage

Une expression OCL est une expression sans effet de bord, portantsur les elements suivants :

1 Types de base :Integer, Real, Boolean, String,UnlimitedNatural ;

2 Collections d’elements ;

3 Elements du contexte (le modele UML associe).

G. Sunye Universite de Nantes 9/ 92

Conception par contrats avec UML

Page 10: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Appel d’operations

L’appel d’une operation sur un element se fait grace a la notationpointee:

’Nantes’.substring(1,3) = ’Nan’

L’appel d’une operation sur une collection d’elements se fait gracea une fleche (→):

{1, 2, 3, 4, 5}→size() = 5

G. Sunye Universite de Nantes 10/ 92

Conception par contrats avec UML

Page 11: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances 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. Sunye Universite de Nantes 11/ 92

Conception par contrats avec UML

Page 12: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Operations 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. Sunye Universite de Nantes 12/ 92

Conception par contrats avec UML

Page 13: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Operations simples sur les collections

isEmpty() : vrai si la collection est vide.

notEmpty() : vrai si la collection contient au moins unelement.

size () : nombre d’elements 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. Sunye Universite de Nantes 13/ 92

Conception par contrats avec UML

Page 14: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Operations complexes sur les collections

Certaines operations utilisent un iterateur (nomme each parconvention), c’est a dire, une variable qui sera evaluee a chaqueelement de la collection.

select( expression−booleenne) : Selectionne (filtre) unsous-ensemble de la collection.

collect ( expression ) : Evalue une expression pour chaqueelement 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. Sunye Universite de Nantes 14/ 92

Conception par contrats avec UML

Page 15: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Verification de proprietes sur des collections

forAll ( expression−booleene) : Verifie que tous les elements dela collection respectent l’expression.

exists ( expression−booleene) : Verifie qu’au moins un elementde 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. Sunye Universite de Nantes 15/ 92

Conception par contrats avec UML

Page 16: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Plan

1 Introduction

2 Notions de base

3 OCL et UML

4 Differentes expressions OCL

5 Navigation a travers lesassociations

6 Collections

7 Concepts avances

8 Conclusion

G. Sunye Universite de Nantes 16/ 92

Conception par contrats avec UML

Page 17: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

OCL et UML

Une expression OCL peut aussi porter sur les elements UMLsuivants:

Classificateurs (classes, interfaces, composants, casd’utilisation, etc.) et leurs proprietes : operations sans effet debord, attributs et roles d’associations ;

Etats (des machines d’etats associees).

G. Sunye Universite de Nantes 17/ 92

Conception par contrats avec UML

Page 18: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Notation graphique

Directement a l’interieur d’un modele ou dans un documentsepare:

+nom: String+age:Integer

Personne

«invariant» age < 150

+nom: String+age:Integer

Personne{age < 150}

context Personne inv: self .age < 150context Personne inv: age < 150

G. Sunye Universite de Nantes 18/ 92

Conception par contrats avec UML

Page 19: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Notion de contexte

Toute expression OCL est liee a un contexte specifique,l’element auquel l’expression est attachee.

Le contexte peut etre utilise a l’interieur d’une expressiongrace au mot-clef ”self”.

Implicite dans toute expression OCL.Similaire a celui de Smalltalk ou Python, au ”this” de C++ etJava, ou au ”Current” de Eiffel.

G. Sunye Universite de Nantes 19/ 92

Conception par contrats avec UML

Page 20: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Proprietes du contexte

Le contexte permet l’acces aux proprietes de l’element UMLattache, a l’interieur d’une expression.

+nom: String+age:Integer

Personnecontext Personne−− (...)self .nom.size() > 1 andself .age ≥ 0 andself .age ≤ 150

G. Sunye Universite de Nantes 20/ 92

Conception par contrats avec UML

Page 21: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Exemple de modele

estAdmis() : Booleanage() : Integer

nom : Stringnasissance : Date

Étudiant

date : Datevaleur : Integer

Note

nom : StringUniversité

code

:inte

ger

ajouter(Enseignant)nom : StringDépartement

enseigner(Matière)

nom : Stringdébut : Datesalaire : Integertitre : Titre/service : Integer

Enseignant

heures : Integernom : String

Matière

ense

igna

nts

depa

rtem

ent

maitrise

est_maitrisee

matiereetudiant

etudiantsenseigne

enseignant

*

**

*

* * *

*

1

1

1

1

mdcprof

«enumeration»Titre

jour : Integermois : Integeran : Integer

«datatype»Date

G. Sunye Universite de Nantes 21/ 92

Conception par contrats avec UML

Page 22: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Proprietes: Attributs

On utilise la notation pointee:

Attributs d’instance:

context Enseignant inv:self . salaire < 10

Attributs de classe:

context Enseignant inv:self . salaire < Enseignant::salaireMaximum

G. Sunye Universite de Nantes 22/ 92

Conception par contrats avec UML

Page 23: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Proprietes: Types enumeres

Definition: enum{value1, value2, value3}Pour eviter les conflits de nom, on utilise le nom del’enumeration: Enum::val1

context Enseignant inv:self . titre = Titre :: prof impliesself . salaire > 10

G. Sunye Universite de Nantes 23/ 92

Conception par contrats avec UML

Page 24: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Proprietes: Operations de Query

Notation pointee:

Operations d’instance:

context Etudiant inv :self .age() > 16

Operations de classe:

context Etudiant inv :self .age() > Etudiant::ageMinimum()

G. Sunye Universite de Nantes 24/ 92

Conception par contrats avec UML

Page 25: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Proprietes: Etats

Accessibles avec oclInState():

context Departement::ajouter(e:Enseignant)pre: e.oclInState( disponible )

pre:e.oclInState( indisponible :: en vacances)−− etats imbriques

G. Sunye Universite de Nantes 25/ 92

Conception par contrats avec UML

Page 26: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Plan

1 Introduction

2 Notions de base

3 OCL et UML

4 Differentes expressions OCL

5 Navigation a travers lesassociations

6 Collections

7 Concepts avances

8 Conclusion

G. Sunye Universite de Nantes 26/ 92

Conception par contrats avec UML

Page 27: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Differentes expressions OCL

OCL peut specifier :

1 Des invariants de classe ;

2 Les pre- et post-conditions d’une operation (ou d’unetransition) ;

3 Le corps d’une operation.

4 Des nouvelles proprietes ;

5 L’initialisation d’attributs ;

6 Des proprietes derivees.

G. Sunye Universite de Nantes 27/ 92

Conception par contrats avec UML

Page 28: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Invariants de classe

Dans un etat stable, toute instance d’une classe doit verifierles invariants de cette classe.

Exemples:

context e : Etudiant inv : ageMinimum: e.age > 16context e : Etudiant inv : e.age > 16context Etudiant inv : self .age > 16context Etudiant inv : age > 16

G. Sunye Universite de Nantes 28/ 92

Conception par contrats avec UML

Page 29: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Specification d’operations

Inspiree des types abstraits : une operation est composeed’une signature, de pre-conditions et de post-conditions.

Permet de contraindre l’ensemble de valeurs d’entree d’uneoperation.

Permet de specifier la semantique d’une operation : ce qu’ellefait et non comment elle le fait.

G. Sunye Universite de Nantes 29/ 92

Conception par contrats avec UML

Page 30: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Pre-condition

Ce qui doit etre respecte par le client (l’appelant del’operation)

Representee par une expression OCL stereotypee� precondition �

context Departement::ajouter(e : Enseignant) : Integerpre nonNul: not e.oclIsUndefined()

G. Sunye Universite de Nantes 30/ 92

Conception par contrats avec UML

Page 31: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Post-condition

Specifie ce qui devra etre verifie apres l’execution d’uneoperation.

Representee par une expression OCL stereotypee� postcondition �:

Operateurs speciaux:

@pre: acces a une valeur d’une propriete d’avant l’operation(old de Eiffel).result : acces au resultat de l’operation.

G. Sunye Universite de Nantes 31/ 92

Conception par contrats avec UML

Page 32: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Post-condition

context Etudiant::age() : Integerpost correct : result = (today − naissance). years ()

context Typename::operationName(param1: type1, ...): Typepost: result = ...

context Typename::operationName(param1: type1, ...): Typepost resultOk: result = ...

G. Sunye Universite de Nantes 32/ 92

Conception par contrats avec UML

Page 33: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Post-condition : valeurs precedentes

A l’interieur d’une postcondition, deux valeurs sont disponiblespour chaque propriete:

la valeur de la propriete avant l’operation.

la valeur de la propriete apres la fin de l’operation.

context Personne:: anniversaire ()post: age = age@pre + 1

context Enseignant::augmentation(v : Integer)post: self . salaire = self . salaire @pre + v

G. Sunye Universite de Nantes 33/ 92

Conception par contrats avec UML

Page 34: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Corps d’une operation

Specification du corps d’une operation sans effet de bord.

context Universite :: enseignants () : Set(Enseignant)body:

self .departements.enseignants→asSet()

G. Sunye Universite de Nantes 34/ 92

Conception par contrats avec UML

Page 35: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Definitions

Definition de nouveaux attributs et operations dans une classeexistante.

context Classedef: nomatt : type = exprdef: nomop( ... ) : type = expr

G. Sunye Universite de Nantes 35/ 92

Conception par contrats avec UML

Page 36: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Definitions

Utile pour decomposer des expressions complexes, sanssurcharger le modele.

context Enseignantdef: eleves () : Bag(Etudiants) =

self . enseigne . etudiantinv : self . titre = Titre :: prof implies self . eleves ()→forAll(each | each .estAdmis())−− un professeur a toujours 100% de reussite

context Departementdef: eleves () :Set(Etudiants) =

self . enseignants . enseigne . etudiant→asSet()

G. Sunye Universite de Nantes 36/ 92

Conception par contrats avec UML

Page 37: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Valeur initiale

Specification de la valeur initiale d’un attribut ou d’un role(Association End).

Le type de l’expression doit etre conforme au type de l’attributou du role.

context Typename::attributeName: Typeinit : −− expression representant la valeur initiale

context Enseignant:: salaire : Integerinit : 800

G. Sunye Universite de Nantes 37/ 92

Conception par contrats avec UML

Page 38: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Proprietes derivees

Specification de la valeur derivee d’un attribut ou d’un role(Association End).

context Typename::assocRoleName: Typederive: −− expression representant la regle de derivation

G. Sunye Universite de Nantes 38/ 92

Conception par contrats avec UML

Page 39: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Proprietes derivees

context Enseignant:: service : Integerderive: self . enseigne .heures→sum()

context Personne:: celibataire : Booleanderive: self . conjoint→isEmpty()

G. Sunye Universite de Nantes 39/ 92

Conception par contrats avec UML

Page 40: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Plan

1 Introduction

2 Notions de base

3 OCL et UML

4 Differentes expressions OCL

5 Navigation a travers lesassociations

6 Collections

7 Concepts avances

8 Conclusion

G. Sunye Universite de Nantes 40/ 92

Conception par contrats avec UML

Page 41: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Roles: navigation

Il est possible de naviguer a travers les associations, en utilisant lerole oppose:

11 *universite departement ajouter(Enseignant)

nom : StringDépartement

nom : StringUniversité

context Departementinv : self . universite→notEmpty()

context Universiteinv : self .departement→ (...)

G. Sunye Universite de Nantes 41/ 92

Conception par contrats avec UML

Page 42: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Roles: cardinalites

Le type de la valeur de l’expression depend de la cardinalitemaximale du role. 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 : Stringdébut : Datesalaire : Integertitre : Titre/service : Integer

Enseignant

heures : Integernom : String

Matièremaitrise

est_maitrisee

enseigne

enseignant

* *

*1

G. Sunye Universite de Nantes 42/ 92

Conception par contrats avec UML

Page 43: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Roles: noms

Quand le nom de role est absent, le nom du type (enminuscule) est utilise.

Il est possible de naviguer sur des roles de cardinalite 0 ou 1en 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. Sunye Universite de Nantes 43/ 92

Conception par contrats avec UML

Page 44: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Roles: 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. Sunye Universite de Nantes 44/ 92

Conception par contrats avec UML

Page 45: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Classe-association

On utilise le nom de la classe-association, en minuscules:

context Etudiantinv :−− La moyenne des notes d’un etudiant est toujours superieure a 4:self .note→average() > 4

estAdmis() : Boolage() : Integer

nom : stringnaissance : Date

Étudiant

date : Datevaleur : Integer

Note

heures : Integernom : String

Matière

matiereetudiant

G. Sunye Universite de Nantes 45/ 92

Conception par contrats avec UML

Page 46: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Classe-association

Il est possible de naviguer a partir de la classe-association enutilisant les noms de role et la notation pointee:

context Note inv:self . etudiant .age() ≥ 18self .matiere .heures > 3

estAdmis() : Boolage() : Integer

nom : stringnaissance : Date

Étudiant

date : Datevaleur : Integer

Note

heures : Integernom : String

Matière

matiereetudiant

G. Sunye Universite de Nantes 46/ 92

Conception par contrats avec UML

Page 47: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Associations qualifiees

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 precisee, le resultat est unecollection:

context Universite−− Il existe un etudiant dont le nom est ”Martin”inv : self . etudiants→exists(each | each.nom = ”Martin”)

estAdmis() : Boolage() : Integer

nom : stringnasissance : Date

Étudiant

nom : StringUniversité etudiants

code:integer

G. Sunye Universite de Nantes 47/ 92

Conception par contrats avec UML

Page 48: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Plan

1 Introduction

2 Notions de base

3 OCL et UML

4 Differentes expressions OCL

5 Navigation a travers lesassociations

6 Collections

7 Concepts avances

8 Conclusion

G. Sunye Universite de Nantes 48/ 92

Conception par contrats avec UML

Page 49: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Sortes de Collection (1/2)

Set: ensemble non ordonne.

Resultat d’une navigation.{1, 2, 45, 4}

OrderedSet: ensemble ordonne.

Resultat d’une navigation par un role ordonne (orne par uneetiquette {ordered}).{1, 2, 4, 45}

G. Sunye Universite de Nantes 49/ 92

Conception par contrats avec UML

Page 50: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Sortes de Collection (2/2)

Bag: multi-ensemble non ordonne.

Resultat de navigations combinees.{1, 3, 4, 3}

Sequence: multi-ensemble ordonne.

Navigation a travers un role ordonne {Ordered}{1, 3, 3, 5, 7}{1..10}

G. Sunye Universite de Nantes 50/ 92

Conception par contrats avec UML

Page 51: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Operations sur les collections

isEmpty() : vrai si la collection est vide.

notEmpty() : vrai si la collection contient au moins unelement.

size () : nombre d’elements dans la collection.

count(elem) : nombre d’occurrences de elem dans la collection.

G. Sunye Universite de Nantes 51/ 92

Conception par contrats avec UML

Page 52: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Operation sur les collections

Select et Reject

Collect

Collect Nested

For All

Exists

Closure

Iterate

G. Sunye Universite de Nantes 52/ 92

Conception par contrats avec UML

Page 53: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Select et Reject

collection→select(elem:T | bool−expr) : collectioncollection→reject(elem:T | bool−expr) : collection

Selectionne (respectivement rejette) le sous-ensemble d’unecollection pour lequel la propriete expr est vraie(respectivement fausse).

G. Sunye Universite de Nantes 53/ 92

Conception par contrats avec UML

Page 54: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Select et Reject

Syntaxes possibles:

context Departement inv:−− sans iterateurself . enseignants→select(age > 50)→notEmpty()self . enseignants→reject(age > 23)→isEmpty()

−− avec iterateurself . enseignants→select(e | e.age > 50)→notEmpty()

−− avec iterateur typeself . enseignants→select(e : Enseignant | e.age > 50)→

notEmpty()

G. Sunye Universite de Nantes 54/ 92

Conception par contrats avec UML

Page 55: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Collect

collection→collect(expr) : collection

Evalue l’expression expr pour chaque element de la collection,et rend une autre collection, composee par les resultats del’evaluation ;

Le resultat est un multi-ensemble (Bag) ;

Si le resultat de expr est une collection, le resultat ne sera pasune collection de collections. Les collections de collectionssont automatiquement mises a plat.

G. Sunye Universite de Nantes 55/ 92

Conception par contrats avec UML

Page 56: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances 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. Sunye Universite de Nantes 56/ 92

Conception par contrats avec UML

Page 57: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Collect Nested

Operation similaire a collect , mais qui ne met pas a plat lescollections de collections.

context Universiteself .departement→collectNested(enseignants)

Les collections de collections peuvent etre mises a plat grace al’operation flatten () :

Set{Set{1, 2}, Set{3, 4}} →flatten() = Set{1, 2, 3, 4}

G. Sunye Universite de Nantes 57/ 92

Conception par contrats avec UML

Page 58: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

For All

collection→forAll(elem:T | bool−expr) : Boolean

Vrai si expr est vrai pour chaque element de la collection.

G. Sunye Universite de Nantes 58/ 92

Conception par contrats avec UML

Page 59: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances 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. Sunye Universite de Nantes 59/ 92

Conception par contrats avec UML

Page 60: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

For All

Produit cartesien:

context Departement inv:self . enseignants→forAll(e1, e2 : Enseignant |

e1 <>e2 implies e1.nom <>e2.nom)

−− equivalent aself . enseignants→forAll(e1 | self . enseignants→

forAll (e2 | e1 <>e2 implies e1.nom <>e2.nom))

G. Sunye Universite de Nantes 60/ 92

Conception par contrats avec UML

Page 61: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Exists

collection→exists(boolean−expression) : Boolean

Rend vrai si expr est vraie pour au moins un element de lacollection.

context: Departement inv:self . enseignants→exists(e: Enseignant |

p.nom = ’Martin’)

G. Sunye Universite de Nantes 61/ 92

Conception par contrats avec UML

Page 62: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Closure (1/2)

source→closure(v : Type | expression−with−v)

Evalue de facon recursive expression-with-v a l’ensemblesource et additionne les resultats successifs a source.

L’iteration termine lorsque l’evaluation de expression-with-vest un ensemble vide.

G. Sunye Universite de Nantes 62/ 92

Conception par contrats avec UML

Page 63: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Closure (2/2)

enfants

parents

*

0..2

age() : Integer

naissance : Dateprenom : Stringnom : Stringsexe : enum {homme, femme}

Personne

context Personnedef descendants() : Set(Personne) =self . children→closure( children )

G. Sunye Universite de Nantes 63/ 92

Conception par contrats avec UML

Page 64: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Iterate

collection→iterate(elem: T; reponse: T = <valeur> |<expr−avec−elem−et−reponse>)

Operation generique (et complexe) applicable aux collections.

G. Sunye Universite de Nantes 64/ 92

Conception par contrats avec UML

Page 65: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances 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. Sunye Universite de Nantes 65/ 92

Conception par contrats avec UML

Page 66: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Autres operations sur les Collections

includes(elem), excludes(elem) : vrai si elem est present (resp.absent) dans la collection.

includesAll( coll ), excludesAll( coll ) : vrai si tous les elementsde coll sont presents (resp. absents) dans la collection.

union(coll ), intersection( coll ) : operations classiquesd’ensembles.

asSet(), asBag(), asSequence() : conversions de type.

G. Sunye Universite de Nantes 66/ 92

Conception par contrats avec UML

Page 67: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Plan

1 Introduction

2 Notions de base

3 OCL et UML

4 Differentes expressions OCL

5 Navigation a travers lesassociations

6 Collections

7 Concepts avances

8 Conclusion

G. Sunye Universite de Nantes 67/ 92

Conception par contrats avec UML

Page 68: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Tuples (N-Uplets)Definition

Une N-Uplet est une sequence finie de objets ou composantes, ouchaque composante est nommee. Les types des composantes sontpotentiellement differents.

Exemples :

Tuple {nom:String = ’Martin’, age:Integer = 42}Tuple {nom:’Colette’, notes:Collection(Integer) = Set{12, 13, 9},

formation:String = ’Informatique’}

G. Sunye Universite de Nantes 68/ 92

Conception par contrats avec UML

Page 69: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

N-UpletsNotation

Les types sont optionnels. L’ordre des composantes n’est pasimportant :

Expressions equivalentes :

Tuple {name: String = ’Martin,’ age: Integer = 42}Tuple {name = ’Martin,’ age = 42}Tuple {age = 42, name = ’Martin’}

G. Sunye Universite de Nantes 69/ 92

Conception par contrats avec UML

Page 70: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

N-Uplets

Les valeurs des composantes peuvent etre specifiees par desexpressions 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. Sunye Universite de Nantes 70/ 92

Conception par contrats avec UML

Page 71: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

N-UpletsNotation

Les composantes sont accessibles grace a leurs noms, en utilisantla notation pointee :

Tuple {nom:String=’Martin’, age:Integer = 42}.age = 42

L’attribut statistiques definit precedemment peut etre utilise al’interieur d’un autre expression OCL :

context Universite inv :statistiques →sortedBy(moyenne)→last().dpt.nom = ’

Informatique’

−− Le departement d’informatique possede les meilleurs etudiants.

G. Sunye Universite de Nantes 71/ 92

Conception par contrats avec UML

Page 72: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

MessagesAppel d’operations et envoi d’evenements

On utilise l’operateur “ˆ” (hasSent) pour specifier qu’unecommunication a eu lieu.

context Subject ::hasChanged()post: observerˆupdate(12, 14)

G. Sunye Universite de Nantes 72/ 92

Conception par contrats avec UML

Page 73: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

MessagesJokers

context Subject ::hasChanged()post: observerˆupdate(? : Integer, ? : Integer)

L’operateur �?� indique que les valeurs des arguments ne sont pasconnues.

G. Sunye Universite de Nantes 73/ 92

Conception par contrats avec UML

Page 74: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Le type OclMessage

OCL introduit le type OclMessage. L’operateur �ˆˆ�permetd’acceder a une sequence de messages envoyes.

observerˆˆupdate(?, ?)−− renvoie une sequence de messages envoyes.

G. Sunye Universite de Nantes 74/ 92

Conception par contrats avec UML

Page 75: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Valeurs des arguments

Il est possible d’acceder aux valeurs des arguments d’un messagegrace aux noms des parametres de l’operation ou du signal:

context Subject ::hasChanged()post: let messages : Sequence(OclMessage) =

observerˆˆupdate(? : Integer, ? : Integer) inmessages→notEmpty() andmessages→exists( m | m.i > 0 and m.j ≥ m.i )

G. Sunye Universite de Nantes 75/ 92

Conception par contrats avec UML

Page 76: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

MessagesAcces aux valeurs renvoyes

L’operateur OclMessage::result() permet l’acces a la valeurrenvoyee d’une operation (les signaux ne renvoient pas de valeur).L’operateur OclMessage::hasReturned() retourne vrai si l’operation arenvoye une valeur.

context Person:: giveSalary (amount : Integer)post: let message : OclMessage = companyˆgetMoney(amount) in

message.hasReturned()−− getMoney was sent and returnedandmessage.result()−− the getMoney call returned true

G. Sunye Universite de Nantes 76/ 92

Conception par contrats avec UML

Page 77: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Stereotypes des contraintes

Plusieurs stereotypes sont definis en standard dans UML:

Invariants de classe: � invariant �

Pre-conditions: � precondition �

Post-conditions: � postcondition �

Definitions de proprietes: � definition �

G. Sunye Universite de Nantes 77/ 92

Conception par contrats avec UML

Page 78: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Package context

Il est possible de specifier explicitement le nom du paquetageauquel appartient une contrainte :

package Package::SubPackagecontext X inv:−− some invariant

context X::operation()pre:−− some precondition

endpackage

G. Sunye Universite de Nantes 78/ 92

Conception par contrats avec UML

Page 79: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Regles de conformite de types

Type Est conforme a ConditionSet(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. Sunye Universite de Nantes 79/ 92

Conception par contrats avec UML

Page 80: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Proprietes predefinies

oclIsTypeOf(t : OclType):BooleanoclIsKindOf(t : OclType):BooleanoclInState(s : OclState):BooleanoclIsNew():BooleanoclIsUndefined():BooleanoclIsInvalid () :BooleanoclAsType(t : Type):TypeallInstances () :Set(T)

Exemples:

context Universiteinv : self .oclIsTypeOf(Universite) −− vraiinv : self .oclIsTypeOf(Departement) −− faux

G. Sunye Universite de Nantes 80/ 92

Conception par contrats avec UML

Page 81: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Expression Let

Quand une sous-expression apparaıt plus d’une fois dans unecontrainte, il est possible de la remplacer par une variable qui luisert d’alias :

context Person inv:let income : Integer = self . job . salary→sum() inif isUnemployed then

income < 100else

income ≥ 100endif

G. Sunye Universite de Nantes 81/ 92

Conception par contrats avec UML

Page 82: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Valeurs precedentes (1/2)

Quand la valeur @pre d’une propriete est un objet, toutes lesvaleurs atteintes a partir de cet objet sont nouvelles :

[email protected]−− l’ancienne valeur de b, disons X,−− et la nouvelle valeur de c de X

[email protected]@pre−− l’ancienne valeur de b, disons X,−− et l’ancienne valeur de c de x.

G. Sunye Universite de Nantes 82/ 92

Conception par contrats avec UML

Page 83: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Valeurs precedentes (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

[email protected] −− la nouvelle valeur de b1.c, [email protected]@pre −− l’ancienne valeur de b1.c, c1a.b.c −− la nouvelle valeur de b2.c, c2

G. Sunye Universite de Nantes 83/ 92

Conception par contrats avec UML

Page 84: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Heritage de contrats

Rappel: principe de substitution de Liskov (LSP) :

”Partout ou une instance d’une classe est attendue, ilest possible d’utiliser une instance d’une de sessous-classes.”

G. Sunye Universite de Nantes 84/ 92

Conception par contrats avec UML

Page 85: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Heritage d’invariants

Consequences du principe de substitution de Liskov sur lesinvariants :

Les invariants sont toujours herites par les sous-classes.

Une sous-classe peut renforcer l’invariant.

G. Sunye Universite de Nantes 85/ 92

Conception par contrats avec UML

Page 86: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Heritage de pre et post-conditions

Consequences du LSP pour les pre et post-conditions :

Une pre-condition peut seulement etre assouplie(contrevariance).

Une post-condition peut seulement etre renforcee(covariance).

G. Sunye Universite de Nantes 86/ 92

Conception par contrats avec UML

Page 87: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Plan

1 Introduction

2 Notions de base

3 OCL et UML

4 Differentes expressions OCL

5 Navigation a travers lesassociations

6 Collections

7 Concepts avances

8 Conclusion

G. Sunye Universite de Nantes 87/ 92

Conception par contrats avec UML

Page 88: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Conseils de modelisation

Faire simple : les contrats doivent ameliorer la qualite desspecifications et non les rendre plus complexes.

Toujours combiner OCL avec un langage naturel : les contratsservent a rendre les commentaires moins ambigus et non a lesremplacer.

Utiliser un outil.

G. Sunye Universite de Nantes 88/ 92

Conception par contrats avec UML

Page 89: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Rappels

La conception par contrats permet aux concepteurs de :

Modeliser de maniere plus precise ;

Mieux documenter un modele ;

Rester independant de l’implementation ;

Identifier les responsabilites de chaque composant.

G. Sunye Universite de Nantes 89/ 92

Conception par contrats avec UML

Page 90: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Applicabilite

Generation de code :

assertions en Eiffel, Sather.dans d’autres langages, grace a des outils specialises :iContract, JMSAssert, jContractor, Handshake, Jass, JML,JPP, etc.

Generation de tests mieux cibles.

G. Sunye Universite de Nantes 90/ 92

Conception par contrats avec UML

Page 91: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

References

The Object Constraint Language – Jos Warmer, AnnekeKleppe.

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. Sunye Universite de Nantes 91/ 92

Conception par contrats avec UML

Page 92: OCL - Conception par contrats avec UML

Introduction Preliminaires OCL et UML Expressions Navigation Collections Concepts avances Conclusion

Outils

ModelRun (Boldsoft).http://www.borland.com/company/boldsoft.html/products/modelrun/modelrun.html

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. Sunye Universite de Nantes 92/ 92

Conception par contrats avec UML