Académique Documents
Professionnel Documents
Culture Documents
Gerson Suny
IRIN - Universit de Nantes
Introduction
UML - Langage de modlisation unifi
Standard de lOMG (Object Management Group)
Une notation (syntaxe concrte)
Un mta-modle (syntaxe abstraite)
Ce nest pas une mthode (pas de
processus de dveloppement)
Un peu dhistoire
Un peu dhistoire
Les annes 80-90:
Diffrents langage de modlisation
Diffrentes interprtations des
constructeurs de modlisation
Peu doutils, pas adapts
Pas dchange de modles
4
Objectifs dUML
Proposer un langage visuel de
modlisation, indpendant de
limplmentation et du processus de
dveloppement
Objectifs dUML
Intgrer des concepts de haut niveau:
Composants, Patrons de conception
(Patterns), Cadres dapplications
(Framewoks)
Encourager loutillage
UML et le processus de
dveloppement
Analyse et conception
UML: une mme notation, deux niveaux
dabstraction diffrents
10
Partie I - Structure
Partie II - Comportement
11
Partie I - Structure
12
Diagrammes Structurels
Classes
Objets
Composants
Dploiement
Structures composite
13
Diagramme de classes
Classificateurs, attributs et oprations
Associations
Gnralisation
Dpendances
Paquetages
14
Classificateurs
15
Rappel: objet
Encapsulation dun tat et dun
ensemble doprations (qui
sappliquent cet tat)
16
Rappel: classe
Description du comportement et des
proprits communs un ensemble
dobjets
17
Notation
Sans dtails
Analyse
Conception
Proprits groupes
selon leur visibilit
HTML Page
HTML Page
title : String
size : Integer
render()
save()
HTML Page
HTML Page
+ title : String
+ /size : Integer
~ version : Integer
# contents : String
- visibility : Boolean = true
- tags : String [1..*]
+ render()
+ save()
- optimize()
public
title : String
/size : Integer
package
version : Integer
protected
contents : String
private
visibility : Boolean = true
tags : String [1..*]
public
render()
save()
private
optimize()
18
Attributs
Caractristique structurelle type dun
classificateur, qui spcifie la structure
des instances de ce classificateur
19
Attributs
Syntaxe: [visibility][/]name[:type][multiplicity]
[=default][{property-string}]
Proprits:
{readOnly}, {union}, {subset <p>}, {redefines <p>},
{ordered}, {bag}, {seq}, {composite}
Visibilit: [+,~,#,-]
Peuvent tre souligns (attributs de classe)
20
Opration
Caractristique comportementale dun
classificateur qui spcifie le nom, les
21
Opration
Syntaxe: [visibility]name (parameter-list)property-string
parameter: [direction]name : type-expression
[multiplicity] = default-value [property-string]
Proprits?
22
Exercice I
Implmentation dune
classe:
Ecrire, en un langage
objets, la classe
HTML Page
+ title : String {readOnly}
+ /size : Integer
~ version : Integer
# contents : String
- visibility : Boolean = true
- tags : String [1..5]
+ render()
+ save()
- optimize()
23
Solution
Choisir une stratgie dimplmentation
Cette stratgie donnera une smantique
aux classes modlises
24
feature {NONE}
title : STRING
version : INTEGER
contents : STRING
visibility : BOOLEAN
tags : LINKED_LIST[STRING]
25
Solution (2/4)
feature {ANY}
make is
do
visibility := true
create tags.make
end -- make
set_title(s : STRING) is
once
title := s;
end; -- set_title
get_title : STRING is
do
Result := title
end -- get_title
get_size : INTEGER is
do
Result := contents.count
end -- get_size
26
Solution (3/4)
feature {HTML_PAGE, HTML_DOCUMENT}
set_version(i: INTEGER) is
do
version := i
end -- set_version
get_version : INTEGER is
do
Result := version
end -- get_version
feature {HTML_PAGE}
set_contents(s: STRING) is
do
contents := s
end -- set_contents
La visibilit des
get_contents : STRING is
do
Result := contents
end -- get_contents
27
feature {NONE}
Solution (4/4)
set_visibility(b: BOOLEAN) is
do
visibility := b
end -- set_visibility
get_visibility : BOOLEAN is
do
Result := visibility
end -- get_visibility
add_tag(s : STRING) is
require
not_void: s /= Void
max: tags.count < 5
do
tags.add_last(s)
end -- add_tag
remove_tag(s : STRING) is
do
tags.remove(tags.index_of(s))
Cration des
mthodes dajout
et suppression
ensure
exists: tags.occurrences(s) == 0
end
end -- HTML_PAGE
28
Problmes
Comment respecter les cardinalits?
La vrification de la cardinalit
29
Exercice II
Pour la prochaine sance:
Proposer une solution de vrification
de la cardinalit infrieure
30
Remarque importante
UML nest pas un C++ visuel
ni Java, Eiffel, Smalltalk, Python,
31
Conseil de modlisation
Un modle UML nest pas la copie
conforme du code source
32
Autres classificateurs
Classes abstraites
Datatypes
Interfaces
Classes paramtres
33
Classes abstraites
Encapsulent un
comportement commun
Etudiant
Ne possdent pas
dinstances
Possdent des
Etudiant
{abstract}
oprations abstraites
34
Classes abstraites
deferred en Eiffel
abstract en Java
pure virtual en C++
mthodes ^self shouldNotImplement en
Smalltalk
35
Datatypes
Type, dont:
les valeurs nont
pas didentit
dataType
Date
day : Integer
month : Integer
year : Integer
36
Datatypes
Enumeration
Types primitives:
enumeration
Temperature
Cold
Hot
Boolean, Integer,
UnlimitedNatural,
String
37
Interfaces
Une dclaration dun
Interface
Serializable
+ read()
+ write
Exporter
write()
ensemble cohrent
doprations
HTML Page
title : String
size : Integer
render()
save()
tre implmente ou
demande
HTML Page
title : String
size : Integer
render()
save()
Exporter
write()
Serializable
38
Classes paramtres
Indispensable pour les classes
conteneurs (e.g. Listes)
Vecteur
item : T
taille : int
ajouter()
supprimer()
(templates)
<<bind>> <Point>
Polygone
39
Exercice III
Ecrire, en un langage
dataType
Date
day : Integer
month : Integer
year : Integer
objets, les
datatypes Date et
Temperature
enumeration
Temperature
Cold
Hot
40
Solution
Encore une fois, il nexiste pas de
solution unique
41
Solution (1/2)
Utiliser une
expanded class
Utiliser once
do
out := new_image.twin;
end -- set_image
end -- TEMPERATURE
42
Solution (2/2)
expanded class DATE
creation
make,
from_string
feature -- Creation
make(d : INTEGER, m : INTEGER, y : INTEGER) is
-- Creation and initialization
do
day := d
month := m
year := y
end -- make
from_string(s : STRING) is
-- Creation and initialization from a STRING
do
-- My students will complete this
end -- from_string
43
Solution (3/2)
feature {ANY}
add_days(d : INTEGER) : DATE is
do
create Result.make(day+d, month, year)
end --add_days
feature {NONE} -- Private
day : INTEGER;
month : INTEGER;
year : INTEGER;
invariant
not day > 31
not month > 12
end -- UML_MULTIPLICITY
44
Conseil de modlisation
Une classe qui ne possde que des
45
Associations
46
Rappel: association
Une association entre deux classes
47
Rappel: association
feature {VISITOR}
accept(v: VISITOR) is
do
v.visitExemple(Current)
end -- set_contents
Un lien
dutilisation,
temporaire, nest
pas une
association
48
Notation
Nom
HTMLPage
container
Rles
Cardinalits
Possde
Direction de lecture
1 contents
Navigabilit
HTMLFolder
49
Cardinalits - Notation
Exacte : 1
Plusieurs (0 n): *
Optionnelle: 0,1
Spcifie: 1, 2, 4
Intervalle: 1-10
50
51
52
Association rflexive
Liaison entre objets de la mme classe
Personne
enfant
*
0..2
parent
54
Association n-aire
Association entre plus de deux classes
Interprtation confuse des cardinalits
enseignement
Enseignant
1..*
Matire
1..*
Classe
55
Association qualifie
Banque
compte
0..1
Personne
56
Association-classe
Aussi appele classe de liaison
Etudiant
Matire
Note
valeur : int
op()
op()
57
Agrgation
Notion de tout et partie
Partage et composite
Voiture
4,6
Roue
1
Chassis
58
Exercice IV
User
name : String
outForCoffee()
Implmenter les
classes et la classe-
authorization on
*
station
profile
Workstation
name : String
shutdown()
Authorization
priority
shell
association
5 minutes
59
Solution
Patterns utiliss:
Itrateur: parcours de lassociation
Fabrique abstraite: cration des liens
Singleton: une fabrique unique
60
class USER
inherit
GENERAL
create make
La classe USER
feature {ANY}
make is
do
create station.make;
end -- make
Implmentation
dun liste
dautorisations
Implmentation
dune fabrique
(presque un
singleton)
61
class
inherit
WORKSTATION
GENERAL
create make
feature {ANY} -- Creation.
make is
do
create profile.make
Workstation
end -- make
Utilisation dun
itrateur
62
Authorization (1/2)
class AUTHORIZATION
feature {ITERATOR_ON_AUTHORIZATION_LIST}
set_priority(p : STRING) is
do
priority := p
end -- set_priority
set_shell(s : STRING) is
do
shell := s
end -- set_shell
get_priority : STRING is
do
Result := priority
end -- get_priority
get_shell : STRING is
do
Result := shell
end -- get_shell
get_profile : USER is
do
Result := profile
end -- get_profile
get_station : WORKSTATION is
do
Result := station
end -- get_station
(...)
Mthodes daccs
aux attributs et
63
Authorization (2/2)
(...)
feature {AUTHORIZATION_FACTORY}
set_profile(p : USER) is
do
profile := p
end -- set_profile
set_station(s : WORKSTATION) is
do
station := s
end -- set_station
feature {NONE}
priority : STRING
shell : STRING
profile : USER
station : WORKSTATION
end -- AUTHORIZATION
64
Itrateurs (1/3)
Indexing
Project: "Eiffel/OS X//iterator_on_authorization_list"
File: "iterator_on_authorization_list.e"
Description: "Implements... ."
Author: "Gerson Suny"
Copyright: " 2003 __MyCompanyName__"
Version: 1.0
Date: "Mon Sep 29 2003"
Keywords: iterator_on_authorization_list
class
inherit
ITERATOR_ON_AUTHORIZATION_LIST
ITERATOR_ON_LINKED_LIST[AUTHORIZATION]
redefine
make
create
make
Utilisation des
ressources du
langage
(itrateurs Eiffel)
65
Itrateurs (2/3)
(...)
feature {USER, WORKSTATION} -- Interface.
set_priority(p : STRING) is
do
current_item.set_priority(p)
end -- set_priority
set_shell(s : STRING) is
do
current_item.set_shell(s)
end -- set_shell
get_priority : STRING is
do
Result := current_item.get_priority
end -- get_priority
get_shell : STRING is
do
Result := current_item.get_shell
end -- get_shell
get_profile : USER is
do
Result := current_item.get_profile
end -- get_profile
get_station : WORKSTATION is
do
Result := current_item.get_station
end -- get_station
end -- ITERATOR_ON_AUTHORIZATION_LIST
Accs aux
attributs de la
classe-association
Accs aux
lments lis
66
Itrateurs (3/3)
class
inherit
Spcialisation de
ITERATOR_ON_USER_STATION_LIST
ITERATOR_ON_AUTHORIZATION_LIST
create
make
feature {ANY} -- Creation.
feature {USER}
shutdown is
do
Current.get_station.shutdown
end -- shutdown
feature {NONE} -- Implementation.
end -- ITERATOR_ON_USER_STATION_LIST
litrateur sur la
classe-association
Accs aux mthodes
de la classe
Workstation par
dlgation (respect de
la loi de Demeter)
67
Discussion
Litrateur peut-il garder la mme
interface pour des cardinalits
diffrentes?
68
Remarque importante
69
Exercice V
Pour la prochaine sance:
Proposer une implmentation
70
Conseil de modlisation
La cohrence dans linterprtation dun
modle est essentielle.
71
Conseil de modlisation
Pour rsumer:
Un ensemble de rectangles et de
flches nest pas forcment un
modle de conception
72
Gnralisation
73
Gnralisation
Hritage, caractristique des langages
objets
74
Notation
Relation est une sorte de, est
remplaable par
Etudiant
{abstract}
Etudiant de
Matrise
Etudiant
Etudiant de
DESS
Etudiant de
Matrise
Etudiant de
DESS
75
Generalization Set
Personne
{complete, disjoint}
{incomplete, disjoint}
Etudiant
Homme
Femme
Gnralisation
Attributs
Oprations
Associations
Contrats, tats, etc. (mais cela, nous
verrons plus tard)
77
Attributs
Un attribut qui a le
Personne
nom : String
secu : Integer
naissance : Date
Personne
id {redefines nom}
naissance : Integer
78
Oprations
Une opration peu tre
redfinie si:
Dpartement
virer (e : Etudiant)
Le type de chaque
Dpartement d'info
virer (e : EtudiantInfo)
correspondant
79
Associations
appartient
Etudiant
Etudiant de
Matrise
Dpartement
Etudiant de
DESS
80
Associations
Il est possible de spcialiser une
association
Etudiant en
informatique
appartient
appartient
{redefined appartient}
Dpartement
Dpartement
d'info
81
Exercice VI
Pour la prochaine sance, proposer une
solution dimplmentation pour:
82
Dpendances
Relation entre deux lments (client et
fournisseur)
Abstraction
Permission
Ralisation
Substitution
83
Abstraction (1/2)
Entre lments de diffrents niveaux
smantiques
derive : lments drivs, pas forcment
du mme type
refine : raffinement entre modles
trace : (aussi) - utilis pour marquer les
changements entre modles.
84
Abstraction (2/2)
type
Personne
refine
Personne
Impl
85
Intrt de labstraction
Outillage de mthodes de
86
Permission
Etudiant
+ nom
- cartable
permit
Professeur
87
Ralisation
Relation entre deux ensembles
dlments, de spcification et
dimplmentation
Substitution
Relation entre classificateurs. Les
instances du fournisseur peuvent
remplacer celles du client
Etudiant
+ nom
- cartable
substitute
Espion
89
Usage
call : dpendance entre oprations
(o classes)
90
Usage (2/2)
91
Intrt de lusage
Reprsentation des associations non
permanentes
92
Strotypes
Principal mcanisme dextension dUML
Permet lextension (ou plutt la
93
Notation
Peuvent introduire:
une nouvelle
notation
des contraintes
dutilisation
persistent
Personne
nom : String
secu : Integer
naissance : Date
persistent
Personne
nom : String
secu : Integer
naissance : Date
Personne
nom : String
secu : Integer
naissance : Date
Personne
linterprtation dun
modle
94
95
Notes
Complments de modlisation
un lment ou un diagramme
Peuvent tre strotypes
Dpartement d'info
virer (e : EtudiantInfo)
Le dpartement d'informatique
ne peut virer que les tudiants
d'informatique
96
Profils
Mcanisme dextension, permettant
97
Conseil de modlisation
Un modle est fait pour tre compris!
Utilisez les notes, les strotypes et les
tiquette pour mieux lexpliquer.
98
Paquetage (1/3)
99
Paquetage (2/3)
Utilis pour structurer une application
Il se compose de classes et dautres
paquetages
100
Paquetage (3/3)
101
Notation
Types
Vues externe et
interne
Types
datatype
Date
102
Dpendances entre
paquetages
Gestion
access
import
Types
103
Fusion de paquetages
Une fusion dfinie la manire dont un
paquetage tend un autre
104
Notation
Enumerations
My Types
merge
Vue externe
merge
Types
105
Notation
My Types
Vue interne
datatype
Types::Date
datatype
Date
106
Diagrammes Structurels
Classes
Objets
Composants
Dploiement
Structures composite
107
Diagramme dinstances
Reprsentation dobjets, de liens et de
valeurs.
108
Notation
Similaire celle dune classe
Le nom de linstance et celui de la classe
sont souligns et spars par :
Les deux noms sont facultatifs
Arnaud : Etudiant
adresse = "13 r du pont"
age : Integer = 38
appartient
: Dpartement
nom = "Informatique"
109
Diagrammes Structurels
Classes
Objets
Composants
Dploiement
Structures composite
110
Diagramme de composants
Composant
Connecteur
Artefact
Port
111
Composant
Partie remplaable dun systme
Son comportement est spcifi par des
interfaces requises et fournies
112
Notation
Interfaces requises et
component
Dictionnaire
provided interfaces
Synonymes
Antonymes
required interfaces
Texte structur
fournies
Synonymes
component
Dictionnaire
Texte structur
Antonymes
113
Port
Point dinteraction
entre un composant
(ou classificateur) et
son environnement
Antonymes
Synonymes
component
Dictionnaire
La nature de ces
interactions est
114
Connecteur
Dictionnaire
:Index
Liaison entre un
Antonymes
Texte structur
:Langue
et la ralisation
Assemblage,
dlgation
Texte structur
component
:Texte
component
:Dictionnaire
Texte structur
115
Diagrammes Structurels
Classes
Objets
Composants
Dploiement
Structures composite
116
Diagramme de dploiement
117
Artefact
Spcification dune pice physique
118
Artefact
Un artefact est un classificateur: il
possdes des proprits et des
oprations
119
Notation
artifact
Order.jar
Strotypes
standards: source,
executable
artifact
Order.jar
120
Noeud
121
Notation
Connexion, instances
Zope
1..4
:Zope
ZODB
deploy
CMF
:Zope
artifact
Plone
artifact
CMF
122
Chemin de communication
123
Spcification de
dploiement
artifact
Order.jar
deployment spec
description.xml
124
Diagrammes Structurels
Classes
Objets
Composants
Dploiement
Structures composite
125
Structures composite
Structures internes
Collaborations
126
Structures internes
127
Notation
Triangle
Proprits
:Point [3]
:Color
Instances
Rfrences
Triangle
make(c : Color)
:Triangle
create
b:Point
c:Point
a:Point
blue:Color
128
Collaborations
Spcification de la structure dun
ensemble dlments (rles) qui
ralisent une tache commune
129
Notation (1/3)
Rle: rle dune classe
participant une
collaboration
Observer
/Observer:Dependent
/Subject:Model
Connecteur: lien
permettant la
communication entre
deux classes
130
Notation (2/3)
Les proprits dfinies par les
Observer
Dependent
update()
Subject
Model
notify()
addDependent()
131
Notation (3/3)
Occurrence dune collaboration
Fentre
Donne
Observer
Subject
:Observer
132