Upload
dinhkien
View
218
Download
0
Embed Size (px)
Citation preview
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
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
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.