Download pptx - Contraintes uml

Transcript

1

Les Contraintes UML

Par: Sari Meriem

UNIVERSITE MOHAMED CHERIF MESAADIASOUK-AHRAS

Exposé sur:

Définition

2

une condition ou une restriction sémantique exprimée sous forme d’instruction dans un langage textuel.

Une contrainte:

Peut être attachée à n’importe quel élément de modèle ou liste d’éléments de modèle. Désigne une restriction qui doit être appliquée par une implémentation correcte du système.

?

Sari Meriem Contraintes UML 1ére Année Master GL

Les Contraintes

3

Une contrainte peut être un corps écrit dans un langage de contrainte qui peut être:

Naturel.

Dédié, comme OCL.

Issu d’un langage de programmation.

Sari Meriem Contraintes UML 1ére Année Master GL

Les Contraintes

4

Nous avons déjà vu comment exprimer certaines formes de contraintes avec UML :

Contraintes structurelles : les attributs dans les classes, les différents types de relations entre classes, la cardinalité, etc.

Contraintes de type : typage des propriétés, etc.

Contraintes diverses : les contraintes de visibilité, les méthodes et classes abstraites, etc.

Sari Meriem Contraintes UML 1ére Année Master GL

Représentation d’une Contrainte

5

Une contrainte est représenté sous la forme d’une chaîne de texte placée entre accolades ({}).

Une contrainte peut possédé un nom.

Le nom est présenté sous forme d’une chaîne suivie d’un double point (:).

Le tout précédant le texte de la contrainte.

Sari Meriem Contraintes UML 1ére Année Master GL

Contraintes et contraintes prédéfinies

6

UML permet d’associer une contrainte à un, ou plusieurs, élément(s) de modèle de différentes façons :

Sari Meriem Contraintes UML 1ére Année Master GL

Types de Contraintes

7

Invariant de Classe: une contrainte qui doit être satisfaite par toutes les instances de la classe.

Pré-condition d’une opération: une contrainte qui doit toujours être vrai avant l’exécution de l’opération.

Post-condition d’une opération: une contrainte qui doit toujours être vrai après l’exécution de l’opération.

Sari Meriem Contraintes UML 1ére Année Master GL

OCL

8

un langage formel textuel d’expression de contraintes bien adapté aux diagrammes d’UML.

Acronyme de: Object Constraint Language.

Existe depuis la version 1.1 d’UML.

Peut s’appliquer sur la plupart des diagrammes d’UML et en particulier au diagramme de classes.

Simple à utiliser et non ambigüe.

?

Sari Meriem Diagrammes de Classes 1ére Année Master GL

Intérêt du OCL

9

C’est un langage formel volontairement simple d’accès.

Peut être interprété par des outils.

Représente un juste milieu entre le langage naturel et un langage très technique (langage mathématique, informatique, …).

Il permet ainsi de limiter les ambiguïtés, tout en restant accessible.

Une expression OCL décrit une contrainte à respecter et ne décrit absolument pas l’implémentation d’une méthode.

Sari Meriem Contraintes UML 1ére Année Master GL

Typologie des contraintes OCL

10

1. Contexte (context).

2. Invariants (inv).

3. Préconditions et postconditions (pre, post).

4. Résultat d’une méthode (body).

5. Définition d’attributs et de méthodes (def et let…in).

6. Initialisation (init) et évolution des attributs (derive).

Sari Meriem Contraintes UML 1ére Année Master GL

Contexte (context)

11

Une contrainte est toujours associée à un élément de modèle.

C’est cet élément qui constitue le contexte de la contrainte.

Syntaxe: context <élément>

<élément> peut être une classe: Exemple: context Compte

<élément> peut être une opération: Exemple: context Compte::getSolde()

Sari Meriem Contraintes UML 1ére Année Master GL

Invariants (inv)

12

Un invariant exprime une contrainte prédicative sur un objet qui doit être respectée en permanence.

Syntaxe: inv : <expression_logique>

Exemple: Le solde d’un compte doit toujours être positif.

context Compteinv : solde > 0

Sari Meriem Contraintes UML 1ére Année Master GL

Préconditions & postconditions (pre, post)

13

Une précondition permet de spécifier une contrainte prédicative qui doit être vérifiée avant l’appel d’une opération.

Une postcondition permet de spécifier une contrainte prédicative qui doit être vérifiée après l’appel d’une opération.

Syntaxe: Précondition : pre : <expression_logique> Postcondition : post : <expression_logique>

Exemple:context Compte::getSolde() : Real pre : somme > 0post : result = solde

Sari Meriem Contraintes UML 1ére Année Master GL

Résultat d’une méthode (body)

14

Permet de définir directement le résultat d’une opération.

Syntaxe: body : <requête>

Exemple: le résultat de l’appel de l’opération getSolde doit être égal à l’attribut solde.

context Compte::getSolde() : Realbody : solde

Sari Meriem Contraintes UML 1ére Année Master GL

Définition d’attributs et de méthodes (def et let…in)

15

let permet de déclarer et de définir la valeur (i.e. initialiser) d’un attribut qui pourra être utilisé dans l’expression qui suit le in.

def permet également de déclarer et de définir la valeur retournée par une opération interne à la contrainte.

Syntaxe: let <déclaration> = <requête> in <expression> def : <déclaration> = <requête>

Sari Meriem Contraintes UML 1ére Année Master GL

Initialisation et évolution des attributs (init, derive)

16

init permet de préciser la valeur initiale d’un attribut.

derive précise comment la valeur de ce type d’élément évolue.

Syntaxe: init : <requête> derive : <requête>

Exemple:

context Personne::marié : Booleaninit : false

context Personne::age : Integerderive : date_de_naissance - Date::current()

Sari Meriem Contraintes UML 1ére Année Master GL

Types et opérations utilisables dans OCL

17

I. Types et opérateurs prédéfinisII. Types du modèle UMLIII. Collections

1. Ensemble (Set)2. Ensemble ordonné (OrderedSet) 3. Sac (Bag)4. Séquence (Sequence) :

Sari Meriem Contraintes UML 1ére Année Master GL

Types et opérateurs prédéfinis

18Sari Meriem Contraintes UML 1ére Année Master GL

Types du modèle UML

19

Une contrainte OCL peut référencer une valeur de type énuméré.

Syntaxe: <nom_type_enuméré>::valeur

Exemple: la classe Personne possède un attribut genre de type Genre. On peut donc écrire la contrainte :

context Personneinv : genre = Genre::femme

Sari Meriem Contraintes UML 1ére Année Master GL

Collections

20

Il existe plusieurs sous-types du type abstrait Collection :

Ensemble (Set): collection non ordonnée d’éléments uniques.

Ensemble ordonné (OrderedSet): collection ordonnée d’éléments uniques.

Sac (Bag) :collection non ordonnée d’éléments identifiables (pouvant comporter des doublons).

Séquence (Sequence): collection ordonnée d’éléments identifiables.

Sari Meriem Contraintes UML 1ére Année Master GL

Accès aux attributs et aux opérations (self)

21

L’objet désigné par le contexte est également accessible par l’expression self.

Syntaxe: self.<propriété>

Exemple: dans le contexte de la classe Compte, on peut utiliser les expressions suivantes :

solde self.solde getSolde() self.getSolde() débiter(1000) self.débiter(1000)

Sari Meriem Contraintes UML 1ére Année Master GL

Opération sur les classes

22

Toutes les opérations que nous avons décrites jusqu’ici s’appliquaient sur des instances de classe.

OCL dispose d’une opération prédéfinie sur les classes, les interfaces et les énumérations qui retourne l’ensemble de toutes les instances.

Exemple:

Personne.allInstances()

Sari Meriem Contraintes UML 1ére Année Master GL

Opérations sur les collections

23

OCL a un grand nombre d'opérations prédéfinies sur les collections.

Syntaxe: collection->operation

collection->collect(elem | expr) Retourne la collection des valeurs obtenues par application de expr aux éléments de collection. collection->select(elem | expression) Retourne le sous ensemble des éléments pour lesquels expression est vrai. collection->reject(elem | expression) Retourne le sous ensemble des éléments sauf lesquels que pour eux l’expression est vrai. collection->forAll(elem | expr) Retourne vrai si expr est vrai pour tous les éléments de collection.

Sari Meriem Contraintes UML 1ére Année Master GL

Opérations sur les collections

24

collection->exists(elem | expr) Retourne vrai si il existe au moins un élément de collection pour lequel expr est vrai.

Autre opérations:

isEmpty: vrai si self est vide. notEmpty: vrai si self n’est pas vide. size(): retourne le nombre d’éléments (la cardinalité) de self. count(elem):retourne le nombre d’occurrences de objet dans self. includes(elem): vrai si elem dans collection excludes(elem): vrai si self ne contient pas l’objet objet. sum(): etourne la somme des éléments de self.

Sari Meriem Contraintes UML 1ére Année Master GL

Héritage de contraintes

25

Partout où une instance d'une classe est attendue, une instance d'une sous classe peut lui être substituée.

C’est le concepte de Liskov’s Substitution Principle (LSP).

Sari Meriem Contraintes UML 1ére Année Master GL

Consequences de LSP

26

Pour les invariants:

Un invariant est toujours hérité par ses sous classes. Les sousclasses peuvent renforcer l'invariant.

Les preconditions et postconditions:

Une precondition peut être weakened (contravariance). Une postcondition peut être strengthened (covariance).

Sari Meriem Contraintes UML 1ére Année Master GL

Exemple

27Sari Meriem Contraintes UML 1ére Année Master GL

Exemple

28

Dans une société, le directeur est un employé, n’est pas un chômeur et doit avoir plus de 40 ans. De plus, une société possède exactement un directeur et au moins un employé.

context Société inv : self.directeur->size()=1 and not(self.directeur.chômeur) and self.directeur.age > 40 and self.employé->includes(self.directeur)

Une personne possède deux parents, l’un est une femme et l’autre un homme.

context Personne inv : parent->size()=2 implies ( parent->exists(genre=Genre::homme) and parent->exists(genre=Genre::femme) )

Sari Meriem Contraintes UML 1ére Année Master GL


Recommended