introduction aux notations uml et ocl -...

48
Introduction aux notations UML et OCL

Upload: dinhkien

Post on 11-Sep-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Introduction aux notations UML et OCL

diagramme de cas d’utilisationuse case diagram

le système

<<actor>>SIExterneNomActeur

Nom du cas d’utilisation

Nom du cas d’utilisation

Préparer un cours

« include »

Enseigner un cours

« include »

Enseigner un cours par correspondance

« extend »

Professeur

Points d’extension :exposé énoncé exercicerendu de devoir

Description du cas d’utilisation Enseigner un cours

date : 10/09/03auteur : E. Renauxversion : v.0.6acteur principal : Professeuracteurs secondaires : Etudiant

Préconditionil y a plus de trois étudiants présents

Scénario nominal1. Le professeur s ’identifie au système2. Le système authentifie le professeur3. ...

Scénarios alternatifsA1. Titre du scénario alternatifcommence à l ’étape 2 du scénario nominal ...A1.1. Le …...

Exceptions...

Postconditionil y a autant d ’étudiants qu ’au début du cours :-)

exigences non fonctionnellesle cours doit durer 1h30

Etudiant

Réalisation du cas d’utilisation"préparer un cours"

Diagramme de cas d ’utilisation du système machin

Diagramme d’activité des courses

diagramme d’activitésactivity diagram

Entrerdans

magasin

Editer ticket Ouvrir tiroir

Payer

Y a t ’il encore des articles ?

Choisir une caisseScanner article

[oui][non]Poser articles sur

tapis

client agent de caisse

[encore un achat dans la liste]

[courses terminées]

Sélectionner un produit

Sortie dumagasin

diagramme de classes

<<stereotype>>NomClasseAbstraitefrom nomPaquetage

- attributPrivate : Type= valeur# attributProtected : Type+ attributPublic

- operationPrivate(argument1:Type, …) : TypeRetour

# operationProtected+ operationPublique

NomSousClasse

operation()

NomClasse

<<interface>>NomInterface

operation1()operation2()

ClasseCliente

operation1()operation2()

ClasseAClasseBnomAssociation

role1 role2

ClasseTout

ClassePartie

ClassePartie2

1..3

ClasseAClasseB

NomClasseAssociation

operation()

note

<<realize>>

1 0..*

Classe1 Classe2qualifier

class diagram

UneClasse

operationDeClasse()

attributDeClasse

ClientData

ManagerIhmClient

unPaquetage

Diagramme de classe du système

diagramme de séquencesequence diagram

infoPaul:ClientData

<<entity>>:BaseVente:ManagerV

ente

jeanClaude:Commerci

al

formulaire:IhmVendeu

r

Diagramme de séquence du scénario nominal du cas d’utilisation "réaliser une vente"

saisir identifiant saisieId(id)verifierId(id)

demande info clientlireListeClients(id)

demande fiche client

creerClient(nom)lireFicheClient(nom)

saisir vente

saisirVente(produit,quantite,prix)

environnement du système système

temps

detruire()

algo récursif

diagramme d’étatsstatechart diagram

Diagramme d’états d’une caisse

scanner un article(codebarre)[valide]/ajouter liste articles

scanner un article(codebarre)[invalide]

/bip erreur

demander total

Courses payée/ vider liste articles

/liste vide

Attente scan

Attente paiement

insérer clé

retirer clé

Clé insérée

diagramme de composantscomponent diagram

Appli cliente

boiteOutil.dll

Base de donnée

centrale

Diagramme de composant du système

diagramme de déploiementdeployment diagram

PC

Client

serveur central

données

ServeurApplication

serveur Web

internet

Firewall

ethernet banque

Windows NT

Linux

Limites d'UML

OCLObject Constraint Language

d’après CSCI3007 Component Based Development

Plan

� Qu’est-ce qu’une contrainte?� OCL Concepts� OCL Concepts avancés

Definition

� “Une contrainte est la restriction de une ou plusieurs valeurs d’un modèle UML.”

Différents types de contraintes

� Invariant de Classe � une contrainte qui doit être satisfaite par toutesles instances de la classe

� Precondition d’une operation � une contrainte qui doit toujours être true avantl’execution de l’ operation

� Postcondition d’une operation � une contrainte qui doit toujours être true après l’execution de l’ operation

Pourquoi?

UtiliserOCL

15

préciser un diagramme

VOL AVION

CargoVOLPassagerVOL

PassagerAvion CargoAvion11

0..*0..*11

0..*0..*

0..*0..*11vols

16

exemple: Ajouter des invariants

{context VOLinv: type = #cargo implies avion.type = #cargoinv: type = #passager implies avion.type = #passager}

10..*VOL AVION

type : enum of cargo, passager

type : enum of cargo, passager

vols

OCL?

� OCL est� un langage textuel pour décrire les contraintes dans UML

� Formel mais simple à utiliser � Non ambigüe� Sans effets de bord

Modèle Exemple

Airport

Flight

Passenger

Airline

*

**

*

$minAge: Integerage: IntegerneedsAssistance: Boolean

departTime: Time/arrivalTime: Timeduration : IntervalmaxNrPassengers: Integer

origin

desti-nation

name: String

name: String

{ordered}

arrivingFlights

departingFlights

CEO

0..1

flights

passengers

book(f : Flight)

0..1

airline

airline

context et self

� toute expression OCL est associée à un contexte spécifique� Ce contexte est souvent l'élément UML auquelcette contrainte est attachée

� Ce contexte peut être désigné dansl'expression par le mot clé ‘self’.� ‘self’ est implicite dans toute expression OCL � Équivalent à`this’ en Java

Notation� Les Contraintes peuvent figurer dans le modèle UML ou dans un document séparé.� L'expression:context Flight inv: self.duration < 4

� Est identique à:context Flight inv: duration < 4

� Et à:Flight

duration: Integer<<invariant>>duration < 4

Elements d'une expression OCL

� On peut utiliser:� Types de base: String, Boolean, Integer, Real.� Éléments du modèle UML

� attributs, et classes� Operations booléennes des classes query operations (sans effets de bord)

� Les associations du modèle UML� Y compris les noms de rôles

� conseil: utiliser des rôles dans UML pour simplifier OCL

Exemple: OCL types de base

context Compagnie inv:name.toLower = ‘klm’

context Passager inv:

age >= ((9.6 - 3.5)* 3.1).floor implies mature = true

Classes, Modèle et attributs

� attributs context VOL inv:

self.maxNrPassagers <= 1000

� Attributs de Classe context Passager inv:

age >= Passager.minAge

Exemple: operations

context Flight inv:self.departTime.difference(self.arrivalTime)

.equals(self.duration)Time

difference(t:Time):Intervalbefore(t: Time): Booleanplus(d : Interval) : Time

Interval

equals(i:Interval):BooleanInterval(d, h, m : Integer) :

Interval

midnight: Timemonth : Stringday : Integeryear : Integerhour : Integerminute : Integer

nrOfDays : IntegernrOfHours : IntegernrOfMinutes : Integer

Exemple: navigations

context Flightinv: origin <> destinationinv: origin.name = ‘Amsterdam’

context Flight inv: airline.name = ‘KLM’

Airport

Flight

*

*

departTime: Time/arrivalTime: Timeduration : IntervalmaxNrPassengers: Integer

origin

desti-nation

name: String

arrivingFlights

departingFlights

Classes Association

context Person inv:if employer.name = ‘Klasse Objecten’ then

job.type = #trainer

else

job.type = #programmer

endif

Person Company

Job

* 1employee employer

type : {trainer, programmer}

name : String

Collections dans OCL

� La plupart des navigations retournentdes collections d' elements

10..*Flight Airplane

type : enum of cargo, passenger

type : enum of cargo, passenger

flights

Trois Sous types de Collection

� Set: � arrivingFlights(dans le contexte Airport)� Non-ordonné, unique

� Bag: � arrivingFlights.duration (dans le contexte Airport)� Non-ordonné, non-unique

� Sequence: � passagers (dans le contexte Flight)� ordonné, non-unique

Collection : operations

� OCL a un grand nombre d'opérationsprédéfinies sur les collections.

� Syntax:� collection->operation

collect

� Syntaxe:collection->collect(elem : T | expr)collection->collect(elem | expr)collection->collect(expr)

� résumé:collection.expr

� L'opération collect retourne la collection des valeurs obtenues par application de expr aux éléments de collection

select

� Syntaxe:collection->select(elem : T | expression)collection->select(elem | expression)collection->select(expression)

� select retourne le sous ensemble des éléments pour lesquels expression esttrue

Exemple: collect context Airport inv:self.arrivingFlights -> collect(airLine) ->notEmpty

airp1

airp2

f1

f2

f3

f4

f5

airline1

airline2

airline3

departing flights

arriving flights

forAll

� Syntaxe:� collection->forAll(elem : T | expr)� collection->forAll(elem | expr)� collection->forAll(expr)

� True si expr est true pour tous les éléments de collection

Exemple: forAll context Airport inv:self.departingFlights->forAll(departTime.hour>6)

departing flights arriving flights

airp1

airp2

airline1

airline2

airline3

f5depart = 8

f1depart = 7

f4depart = 9

f2depart = 5

f3depart = 8

exists

� Syntaxe:collection->exists(elem : T | expr)collection->exists(elem | expr)collection->exists(expr)

� true si il existe au moins un élément de collection pour lequel expr est true.

Exemple: exists

context Airport inv:self.departingFlights->exists(departTime.hour<6)

departing flights arriving flights

airp1

airp2

airline1

airline2

airline3

f5depart = 8

f1depart = 7

f4depart = 9

f2depart = 5

f3depart = 8

Exemple: select context Airport inv:self.departingFlights->select(duration<4)->notEmpty

departing flightsarriving flights

airp1

airp2

airline1

airline2

airline3

f5duration = 2

f1duration = 2

f4duration = 5

f2duration = 5

f3duration = 3

Exemple : Iterate

� Exemple iterate:context Airline inv:flights->select(maxNrPassengers > 150)->notEmpty

� Est identique à:context Airline inv:flights->iterate (f : Flight;

answer : Set(Flight) = Set{ } |if f.maxNrPassengers > 150 then

answer->including(f)else

answer endif )->notEmpty

autres operations sur collection

� isEmpty� notEmpty� size� count(elem):occurences d'elem dans collection� includes(elem): true si elem dans collection� excludes(elem)� includesAll(coll)

Result et postcondition

� Exemple pre et postcondition

context Airline::servedAirports() : Set(Airport)

pre : -- none

post: result = flights.destination->asSet

Statechart

� L' operation oclInState retourne true sil'objet est dans l'état spécifié

open closed

context Bottle inv:self.oclInState(closed) implies filled = #full

Bottlefilled : enum {empty, half, full}

Variables Locales

� let definit des variables locales à unecontrainte:Let var : Type = <expression1> in

<expression2>

� Exemple:context Airport inv:Let supportedAirlines : Set (Airline) = self.arrivingFlights -> collect(airLine) in (supportedAirlines ->notEmpty) and (supportedAirlines ->size < 500)

heritage de contraintes

� Liskov’s Substitution Principle (LSP):

� “Partout où une instance d'une classe estattendue, une instance d'une sous classepeut lui être substituée”

heritage de contraintes

� Consequences de LSP pour les invariants:� un invariant est toujours hérité par ses sous classes.� Les sousclasses peuvent renforcer l'invariant.

� Consequences de LSP sur les preconditions et postconditions:� une precondition peut être weakened (contravariance)� une postcondition peut être strengthened (covariance)

OCL Tools� FREE parser from IBM

� http://www.software.ibm.com/ad/ocl� Cybernetics

� www.cybernetic.org� University of Dresden

� www-st.inf.tu-dresden.de/ocl/ � Boldsoft

� www.boldsoft.com� ICON computing

� www.iconcomp.com� Royal Dutch Navy� Others … …

Conclusions

� OCL invariants allow you to� model more precisely� remain implementation independent

� OCL pre- and postconditions allow you to� specify contracts (design by contract)� specify interfaces of components more precisely

� OCL usage tips� keep constraints simple� always combine natural language with OCL� use a tool to check your OCL

References

� [UML 1.3] OMG UML Specification v. 1.3, OMG doc# ad/06-08-99

� [UML 1.4] OMG UML Specification v. 1.4, UML Revision Task Force recommended final draft, OMG doc# ad/01-02-13.

� Web: � UML 1.4 RTF: www.celigent.com/omg/umlrtf� OMG UML Tutorials:

www.celigent.com/omg/umlrtf/tutorials.htm� UML 2.0 Working Group:

www.celigent.com/omg/adptf/wgs/uml2wg.htm� OMG UML Resources: www.omg.org/uml/

Infos