2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -

Preview:

Citation preview

2003/2004 Cours d'UML 1

Les concepts d’UML

- Le langage OCL -

2003/2004 Cours d'UML 2

OCL: what is it?

OCL: Object Constraint LanguageChapter 6 of UML 1.5

Langage formel pour exprimer les contraintes.

Expression des invariants d’un système modélisé.

Les expressions OCL sont évaluées, n’ont aucun effet de bord.Celui-ci s’applique non seulement au méta-modèle mais aussi au modèle.

2003/2004 Cours d'UML 3

Pourquoi OCL?

Un diagramme UML peut manquer de précision pour exprimer tous les aspects d’une spécification.

Besoin de décrire des contraintes additionnelles au modèle.Le langage naturel est souvent utilisé

Pb: apparition d’ambiguïtés.

OCL a pour but de combler ce manque!Langage formel aucune ambiguïté Pure langage d’expressionaucun effet de bordCe n’est pas un langage de programmationne modifie pas le modèle.

2003/2004 Cours d'UML 4

OCL: Comment l’utiliser

Utilisation d’OCL dans plusieurs cas:Spécifier les invariants des classes et types du modèle de classes

Spécifier les invariants pour les stéréotypes

Décrire les pre et post conditions sur les opérations et méthodes.

Décrire les gardes

L’utiliser comme langage de navigation

Spécifier les contraintes sur les opérations

2003/2004 Cours d'UML 5

OCL: Comment l’écrire?

De manière graphique:

De manière textuelle: Contexte Expression OCL Ex: context Compagny inv: self.numberOfEmployees > 50

{Règle OCL}Entité UML

2003/2004 Cours d'UML 6

OCL: Le contexte (1/2)

Le contexte s’écrit de la manière suivante :

Context entitéUML typeDecontexte [nomDeLaRègle]:

Ex: Context compagny inv:

Context c:Compagny inv enoughEmployees:

2003/2004 Cours d'UML 7

Dans le cas d’un contexte invariant:

Context entitéUML inv:

Expression OCL

Ex: context Compagny inv:

self.numberOfEmployees > 50

2003/2004 Cours d'UML 8

OCL: Le contexte (2/2)

Dans le cas d’un contexte pre et postconditions

S’applique aux opérations

Context typeName::opérationName(param1: type1, . . .):ReturnType

pre : param1>. . .

post: result =. . .

Ex: Context Person::income(date:Date):Integer post: result = 5000

2003/2004 Cours d'UML 9

OCL: Écriture d’une expression

Type de base:Booléen : Boolean Entier : IntegerRéel : RealChaîne de caractères : String

Opération sur les types:Booléen : and, or, xor, not, implies, if-then-else Entier : +, -,*, /, abs(), max()…Réel : +, -,*, /, floor(),max()…Chaîne de caractères : toUpper(), concat(),size()…

2003/2004 Cours d'UML 10

OCL: Écriture d’une expression

Accès au propriété d’un objet:

Objet.propriété

Accès à un attribut:Ex: context Person inv:

self.age > 0

Accès à une opération:Ex : aPerson.income(aDate)

2003/2004 Cours d'UML 11

OCL: Écriture d’une expression

Accès à une fin d’association Objet.nomDuRôleOpposé

context Company inv: self.manager.isUnemployed = false

inv: self.employee->notEmpty()

context Person inv: self.employer->isEmpty() -- Ensemble de personnes

qui ont -- le rôle employeur

manager 0..*

1 managerCompanies

employee 0..*

0..* employer

Person

+ IsUnemployed : Boolean

+ income(d :Date) : Integer

Company

+ name : String

+ stockPrice():Real

2003/2004 Cours d'UML 12

OCL: Écriture d’une expression

Navigation vers la classe associations

Context Person inv: self.employeeRanking[bosses]->sum() > 0

Ensemble des « employeeRanking » qui appartiennent à la collection « bosses »

2003/2004 Cours d'UML 13

OCL: Écriture d’une expression

Quelques opérateursAccès aux propriétés des supertypes

Context B inv:Self.oclAsType(A).attributeASelf.attributeA

Nous avons accès à la propriété définie dans la classe A.Ensuite, nous accédons à la propriété définie dans la classe B.

+ attributeA

A

+ attributeA

B

2003/2004 Cours d'UML 14

OCL: Écriture d’une expression

Les notions d’ensemble:Set C’est un ensemble au sens mathématique, les doublons ne sont pas admis.

{1, 5, 4, 8}BagCet ensemble accepte plusieurs même éléments, les doublons sont admis.

{1, 1, 5, 4, 4, 8}SequenceCet ensemble peut contenir des doublons et tous ses éléments sont ordonnés.

{1, 1, 4, 4, 5, 8}

2003/2004 Cours d'UML 15

OCL: Écriture d’une expression

L’opérateur @preCelui-ci est utilisé pour spécifier les pre et post-conditions sur les opérations et méthodes dans UML.

Il indique la valeur de la propriété au début de l’opération.

Il est post fixé

Ex: context Person::birthdayHappens() post: age=age@pre + 1

2003/2004 Cours d'UML 16

OCL: Écriture d’une expression

Sélection dans un sous ensembleCollection->select(…)

Ex : context Company inv: self.employee->select(age>50)->notEmpty()

Rejet d’un élément d’une collectionCollection->reject(…)

Ex:context Company inv: self.employee->reject(isMarried)->isEmpty()

2003/2004 Cours d'UML 17

OCL: Écriture d’une expression

ExistenceCollection->exist(…)

Ex : context Company inv: self.employee->exists(forename =‘Jack’)

Iteration

collection->iterate(elem:Type;acc:type=<expression>)|expression-with-elem-and-acc)

Ex : self.employee->iterate(p:Person;acc=Bag{}

|acc->including (p.forename<>’Jack’)

2003/2004 Cours d'UML 18

OCL : l’expression « let »

‘Let’ permet de définir un attribut ou une opération dans une contrainte

Ex: context Person inv:

let income: Integer=self.job.salary-> sum()

let hasTitle(t: string):Boolean=self.job-

>exists(title=t) in if isUnemployed then self.income <100

else self.income>=100 and

self.hasTitle(‘manager’) endif

2003/2004 Cours d'UML 19

Manipulation des collections

Opérations sur les collections:Collection->size(),

Collection->includes(objet),Collection->excludes(objet),Collection->count(objet),Collection->includesAll(collection),Collection->excludesAll(collection),Collection->isEmpty(),Collection->notEmpty(),Collection->sum(),Collection->exist(expressionOCL),Collection->sortedBy(expressionOCL)

2003/2004 Cours d'UML 20

Opérations sur les collections de type Set et Bag

set->union (set2:Set(T)) ou

Bag->union(bag2:Bag(T))=set->intersection(set2:Set(T)) ou set->intersection(bag2:Bag(T))

(set ou bag)->select(expressionOCL(set ou bag)->reject(expressionOCL)(set ou bag)->count(object)

2003/2004 Cours d'UML 21

Etude de Cas

Système de gestion pour le prêt d’un livre.

L’étudiant ne peut emprunter que 4 livres au maximum.

La durée de l’emprunt dure 3 semaines.

Si le livre est rendu N jours en retard, l’étudiant ne peut pas emprunter de livres pendant N jours.

2003/2004 Cours d'UML 22

Analyse rapide

Déterminons les classes:Livre

Auteur

Étudiant

Emprunt

Les attributsLivre: titre

Étudiant: nom, prénom, age

Auteur: nom, prénom

Emprunt: dateDébut, DateFin

2003/2004 Cours d'UML 23

Diagramme de classe 1/2

2003/2004 Cours d'UML 24

Diagramme de classes 2/2

2003/2004 Cours d'UML 25

Cas d’études

Les contraintes OCLL’étudiant peut emprunter si il a moins de 4 emprunts en cours.

Vérifier la cohérence des dates.

Le livre ne peut pas être emprunter s’il est déjà.

Lorsqu’un livre est acheté, il peut être emprunté

2003/2004 Cours d'UML 26

Règles OCL

Context Etudiant::effectuerEmprunt(livre:Livre)

pre :emprunt->size()<4

post : emprunt->size()=emprunt@pre->size()+1

Context Emprunt::emprunt(livre:Livre)

Post : dateDebut=System.currentdate

Context Livre::emprunter()

pre : libre=true

post : libre= false

Context Etudiant inv:

self.dateDebut<=dateFin

Context Livre::livre()

Post : libre=true

2003/2004 Cours d'UML 27

Améliorations !!

Exprimer le fait que la durée de l’emprunt ne doit pas excéder 3 semaines (21 jours).

Nous avons oublié que l’étudiant pouvait rendre le livre.

Quels sont les éléments à ajouter?

Quels sont les contraintes OCL à ajouter?

Recommended