Documente Academic
Documente Profesional
Documente Cultură
développement logiciel
UML UML
UML
© D. Ribouchon
§1 1
Objectifs du cours:
UML au service du projet
§1 2
1
Les spécificités d'un
"Système d'information"
§1 3
Plan du cours
Déclinaison SI
• Introduction
• Prise en main: COO UML/POO et processus de développement
• Spécifier les exigences du système
– Comprendre le métier
– Spécifier les exigences
• Concevoir le système
– Définir la plateforme technique Exercices et
– Concevoir le code source étude de cas
– Concevoir les composants déployables
• Pour aller plus loin
© D. Ribouchon
§1 4
2
Les spécificités d'un
"Système embarqué"
§1 5
3
Plan du cours
Déclinaison système embarqué
• Introduction
• Prise en main: COO UML/POO, processus de développement
• Conception du logiciel
§1 7
1- Introduction
© D. Ribouchon
4
Objectifs d'un projet de
développement de système
§1 9
§1 10
5
Une des clés: travailler avec méthode
§1 11
11/28
©
Conception Tests
Vision développeur, (et def. tests int.) d'intégration
interne
Codage
(et TU)
D. Ribouchon
§1 12
12/28
©
6
La gestion de projet
§1 13
13/28
©
Processus en V en cascade:
Une étape = finaliser une activité
d'ingénierie
Exigences Tests
(et def. tests de
de qual.) qualification
Conception
Tests
(et def. tests
d'intégration
d'int.)
Codage
(et TU)
§1 14
7
Processus en cascade: l’effet « Tunnel »
Démarrage ? ?
Enoncé des
besoins
Dé
vel
o ppe
me
nt
Déploiement
Maintenance
© D. Ribouchon
§1 15
Processus en V itératif/agile:
Une étape = effectuer le V sur un périmètre
réduit
§1 16
8
L'itératif réduit l'effet "tunnel" - Limitation
des risques
Démarrage
Étude
préliminaire
Incrément 1
Analyse
fonctionnelle
Conception
technique Déploiement
Incrément 2
Développement
Tests
Analyse
fonctionnelle
Conception
Déploiement
Incrément 3
technique
Développement
Tests
Analyse
fonctionnelle
Conception Incrément 4
technique Déploiement
Développement
Tests
Analyse
fonctionnelle
Conception
technique Déploiement
Développement
Tests
Maintenance
© D. Ribouchon
§1 17
§1 18
9
Définir les exigences du logiciel
§1 19
Concevoir le logiciel
• A minima:
– Définir la plateforme technique: architecture matérielle et
framework logiciel
– Décrire la structuration du code en unités de code source –
i.e. fichiers de code source
§1 20
10
Coder
• Fichier consultationCdes.php:
<html>
<head><title>Consultation Commandes></title></head>
<body>
<?php
if ($_SERVER['REQUEST_METHOD']== 'GET') {
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
Numéro de la commande:
<input type="texte" name="numeroCde" /> <br />
<input type="submit" name="Consulter commande" /> <br />
</form>
<?php
} elseif ($_SERVER['REQUEST_METHOD']== 'POST') {
$numero = $_POST['numeroCde'];
$montantHT = $lesCommandes[$numero]['montantHT'];
$montantTTC = $lesCommandes[$numero]['montantHT']+
$lesCommandes[$numero]['montantHT']* $tauxTaxes;
© D. Ribouchon
§1 printf (…………);} … 21
</html>
• A minima:
– Exécuter un scénario significatif (qui aura été défini au
moment de la spécification des exigences)
§1 22
11
Réflexions sur le cas – Le projet a-t-il
atteint ses objectifs?
• Qualité:
– Réponse aux besoins
– Maintenabilité et évolutivité
• Productivité:
– Court terme = développement de la première version du
logiciel, "from scratch"
– Moyen/long terme = maintenance et évolutions
© D. Ribouchon
§1 23
Améliorer la compréhension du
contexte métier
§1 24
12
Améliorer la conception du logiciel –
Structuration du code
§1 25
§1 26
13
Améliorer la conception du logiciel –
Réflexions sur le cas
§1 27
§1 28
14
Améliorer le processus de
développement?
• Affiner le processus?
• Utiliser le Unified Process?
• Quel processus dans le cas d'un système embarqué?
© D. Ribouchon
§1 29
0..1
- immatriculation
1 1..* 1 0..*
- couleur
§1 30
15
Introduction – Synthèse (1/2)
§1 31
Conception Tests
Vision développeur, (et def. tests int.) d'intégration
interne
Codage
(et TU)
© D. Ribouchon
§1 32
16
Plan du cours
(Déclinaison SI)
• Introduction
• Prise en main: COO UML/POO et processus de développement
• Spécifier les exigences du système
– Comprendre le métier
– Spécifier les exigences
• Concevoir le système
– Définir la plateforme technique
– Concevoir le code source
– Concevoir les composants déployables
• Pour aller plus loin
© D. Ribouchon
§1 33
Plan du cours
(Déclinaison système embarqué)
• Introduction
• Prise en main: COO UML/POO et processus de développement
• Exigences du système embarqué
– Sensibilisation à la modélisation du domaine
– Spécification des exigences du système
• Conception du système embarqué
• Conception du logiciel
• Pour aller plus loin
© D. Ribouchon
§1 34
17
Prise en main:
COO UML/POO et processus de
développement
© D. Ribouchon
§1 35
Plan du chapitre
• COO UML/POO
§1 36
18
Programmation structurée/OO
et conception UML
Tests de
Spécification
"niveau 2"
exigences
Commande
Tests
numero :int Conception
montantHT :float "niveau 1"
montantTTC :float
tauxTaxes :float
facturerTTC()
class Commande {
© D. Ribouchon
§1 38
19
Unité de code
§1 39
En C: Module C = fichier .c
• Fichier GestionCommandes.c:
typedef struct Commande {
float montantHT;
float montantTTC;
}
struct Commande lesCommandes [100];
float tauxTaxes;
void facturerCdeTTC(int numero){
lesCommandes[numero].montantTTC=
lesCommandes[numero].montantHT+
lesCommandes[numero].montantHT* tauxTaxes;
}
© D. Ribouchon
§1 40
20
En PHP: fichier .php
• GestionCommandes.php
$lesCommandes
$tauxTaxes
§1 41
§1 42
21
Occurrences des données et contexte
d'exécution des traitements
typedef struct Commande {
float montantHT;
GestionCommandes
float montantTTC;
numero :int
montantHT :float
}
montantTTC :float struct Commande lesCommandes [200];
tauxTaxes :float
float tauxTaxes;
facturerCdeTTC()
void facturerCdeTTC(int numero){
lesCommandes[numero].montantTTC=
lesCommandes[numero].montantHT+
lesCommandes[numero].montantHT* tauxTaxes;
§1 43
• En programmation procédurale:
void facturerCdeTTC(int numero){
lesCommandes[numero].montantTTC=
lesCommandes[numero].montantHT+
lesCommandes[numero].montantHT* tauxTaxes;
}
22
Objet en POO
cde131
numero = 131
montantHT = 10
montantTTC = 12
facturerTTC()
© D. Ribouchon
§1 45
cde131 :Commande
numero = 131
montantHT = 10
montantTTC = 12
facturerTTC()
numero :int
montantHT :float
montantTTC :float
tauxTaxes :float
© D. Ribouchon
§1 facturerTTC() 46
23
Classe et objet
Commande
• Dans la classe sont définis les types de données numero :int
et les traitements – au moment du codage montantHT :float
montantTTC :float
tauxTaxes :float
facturerTTC()
§1 47
Classe – Class
Définition UML
Commande
numero :int
montantHT :float
Classe représentées dans un montantTTC :float
diagramme de classes – Class Diagram tauxTaxes :float
facturerTTC()
© D. Ribouchon
§1 48
24
La notion de classe en conception logicielle
orientée objet
Commande
© D. Ribouchon
§1 49
Classe – Class
Illustration Java
Fichier Commande.java:
Commande
class Commande {
….
}
© D. Ribouchon
§1 50
25
Classe – Class
Illustration PHP
Fichier Commande.php:
Commande
class Commande {
….}
© D. Ribouchon
§1 51
Attribut – Attribute
Définition UML
Commande
numero :int
Attributs définis montantHT :float
montantTTC :float
dans la classe tauxTaxes :float
facturerTTC()
§1 52
26
Attribut – Attribute
Illustration Java
class Commande {
Commande
…
numero :int int numero;
montantHT :float float montantHT;
montantTTC :float float montantTTC;
tauxTaxes :float ….
}
facturerTTC()
© D. Ribouchon
§1 53
Attribut – Attribute
Illustration PHP
class Commande {
Commande
…
numero :int var $numero;
montantHT :float var $montantHT;
montantTTC :float var $montantTTC;
tauxTaxes :float ….
}
facturerTTC()
© D. Ribouchon
§1 54
27
Opération – Operation
Définition UML (1/2)
numero :int
montantHT :float
montantTTC :float
tauxTaxes :float
Opération facturerTTC()
§1 55
Opération – Operation
Définition UML (2/2)
Commande
numero :int
montantHT :float
montantTTC :float
tauxTaxes :float
§1 56
28
Opération – Operation
Illustration Java
class Commande {
Commande …
numero :int float montantHT;
montantHT :float float montantTTC;
montantTTC :float static float tauxTaxes;
tauxTaxes :float ….
facturerTTC()
void facturerTTC() {
this.montantTTC = this.montantHT +
this.montantHT * tauxTaxes;
}
…
}
© D. Ribouchon
§1 57
Opération – Operation
Illustration PHP
class Commande {
Commande …
numero :int var $montantHT;
montantHT :float var $montantTTC;
montantTTC :float static $tauxTaxes;
tauxTaxes :float ….
facturerTTC()
function facturerTTC() {
$this->montantTTC = $this->montantHT
$this->montantHT * $tauxTaxes;
}
…
}
© D. Ribouchon
§1 58
29
Objet – Object
Définition UML
cde131 :Commande
numero = 131
montantHT = 10
montantTTC = 12
facturerTTC()
§1 59
Objet – Object
Illustration Java
§1 60
30
Instanciation - Instantiation
Définition UML
cde131
creerCommande()
:Commande
2 instanciations cde312
creerCommande()
:Commande
montantHT = 10 montantHT = 20
montantTTC = 12 montantTTC = 24
§1 61
Instanciation- Instantiation
Illustration Java
§1 62
31
Instanciation- Instantiation
Illustration PHP
§1 63
Constructeur – Constructor
Définition UML
Commande
numero :int
montantHT :float
montantTTC :float
tauxTaxes :float
facturerTTC()
Constructeur Commande()
© D. Ribouchon
§1 64
32
Constructeur– Constructor
Illustration Java
class Commande {
…
int numero;
….
Commande() {
…
this.numero = …
…
}
…
}
© D. Ribouchon
§1 65
class Commande {
…
var $numero;
….
function __construct() {
…
$this->numero == …
…
}
…
}
© D. Ribouchon
§1 66
33
Communication entre objets – Message
Définition UML
Diagramme de séquence
– Sequence Diagram facturerTTC()
§1 67
class Titi {
…
Commande laCommande;
…
methodeX(){
…
laCommande.facturerTTC();
…..}
}
§1 68
34
Communication entre objets – Message
Illustration PHP
class Titi {
…
var $laCommande;
…
function methodeX(){
…
$laCommande->facturer();
…..}
}
§1 69
§1 70
35
Exercice
:? :Titi :Toto
reqX()
reqY(1)
(false)
()
§1 71
Destruction – Destruction
Définition UML
creerCommande() cde131
:Commande
(cde131)
facturerTTC()
()
detruire()
© D. Ribouchon
§1 72
36
Destruction – Destruction
Illustration Java
§1 73
Destruction – Destruction
Illustration PHP
class Commande {
…
function __destruct() {
…
}
…
}
§1 74
37
Notions échappant au
"paradigme objet pur"
§1 tauxTaxes=nouveauTaux;} 75
Commande
numero :int
montantHT :float
montantTTC :float
Attribut de classe tauxTaxes :float
facturerTTC()
© D. Ribouchon
§1 76
38
Attribut de classe – Class attribute
Illustration PHP
• Propriété statique:
§1 77
Commande
numero :int
montantHT :float
montantTTC :float
tauxTaxes :float
facturerTTC()
Opération de classe modifierTaux(nouveauTaux :float)
© D. Ribouchon
§1 78
39
Opération de classe – Class operation
Illustration PHP
class Titi {
• Appel de la méthode: …
Commande::modifier_taux(21);
…..
© D. Ribouchon
§1 } 79
Commande
Titi
numero :int
montantHT :float methodeX()
montantTTC :float
tauxTaxes :float
facturerTTC()
class Commande {
var $numero; class Titi {
var $montantHT; …
var $montantTTC; function methodeX(){
static $tauxTaxes; $laCommande = new Commande();
…. …
function facturerTTC() { $laCommande->montantHT =20;
$this->montantTTC = $this->montantHT + $laCommande->montantTTC =22;
$this->montantHT * $tauxTaxes; ….
} }
© D. Ribouchon
… §1 } 80
}
40
Avons-nous respecté nos bonnes pratiques
de conception? (2/2)
Commande
Titi
numero :int
montantHT :float
montantTTC :float methodeX()
tauxTaxes :float
© D. Ribouchon
facturerTTC()
§1 81
§1 82
41
Visibilité – Visibility
Définition UML
Commande
- numero :int
- montantHT :float
Visibilité privé - montantTTC :float
- tauxTaxes :float
§1 83
Visibilité – Visibility
Illustration Java
class Commande {
…
private int numero;
Commande
private float montantHT;
- numero :int
- montantHT :float ….
- montantTTC :float
- tauxTaxes :float
public void facturerTTC() {
…
+ facturerTTC()
+ modifierTaux(nouveauTaux :float) }
…
}
© D. Ribouchon
§1 84
42
Visibilité – Visibility
Illustration PHP
class Commande {
…
private $numero;
Commande
private $montantHT;
- numero :int
- montantHT :float ….
- montantTTC :float
- tauxTaxes :float
public function facturerTTC() {
…
+ facturerTTC()
+ modifierTaux(nouveauTaux :float) }
…
}
© D. Ribouchon
§1 85
Encapsulation – Accesseurs
Commande
- numero :int
- montantHT :float
- tauxTaxes :float
+ getNumero() :int
+ getMontantHT() :float
+ getTauxTaxes() :float
+ setNumero(numero :int)
+ setMontantHT(montant :float)
+ setTauxtaxe(taux :float)
© D. Ribouchon
§1 86
43
Exercice – le rectangle
44
Objets persistants/transitoires
(Persistent/Transient)
§1 89
§1 90
45
Plan du chapitre
• COO UML/POO
§1 91
Commande
facturerTTC()
class Commande {
Codage int numero;
float montantHT;
float montantTTC;
© D. Ribouchon
§1 92
46
Suivre un processus de développement
plus complet
"Besoins utilisateur"
Commande
facturerTTC()
class Commande {
Codage int numero;
float montantHT;
float montantTTC;
}
§1 93
§1 94
47
Quel processus de développement?
§1 95
§1 96
48
Les activités d'ingénierie
dans le Processus Unifié
"Besoins utilisateur"
Modélisation du
Déploiement
métier
Analyse
(= Préconception
optionnelle)
Vision développeur,
Tests
interne Conception
d'intégration
Implémentation
© D. Ribouchon
§1 97
Modélisation du Spécification
métier – des exigences –
Business modeling Requirements
Réalité décrite: Réalité décrite:
le système métier le système logiciel
(Processus métier Niveau d'abstraction:
Informations métier) vue externe
total: 304€
Calculer montant
Completer reparation
Obtenir autorisation
0..1 :SI garage
selection reparation()
...
§1 98
49
Conception
Réalité décrite:
système d'information
Niveau d'abstraction:
vue interne
Notations UML
PCClient Serv eurBDD
* 1
:Secretaire
demande de facturation()
traiterFacturation()
creerFacture()
© D. Ribouchon
© D. Ribouchon
ecran facture()
§1 99
"Besoins utilisateur"
Modélisation du
Déploiement
métier
Analyse
(= Préconception
optionnelle)
Vision développeur,
Tests
interne Conception
d'intégration
Implémentation
© D. Ribouchon
§1 100
50
Les rôles classiques au sein d'un projet :
Maîtrise d'ouvrage/Maîtrise d'œuvre
§1 101
"Besoins utilisateur"
Modélisation du
Déploiement
métier
Tests système
Vision utilisateur, Exigences
("de qualification")
externe
Analyse
(= Préconception
optionnelle)
Vision développeur, Tests
Conception
interne d'intégration
© D. Ribouchon
§1 Implémentation 102
51
Système de type
"système embarqué"
• Rappels:
– Dans ce contexte, on emploie le terme "système" pour
désigner un système composé d'éléments logiciels et
d'éléments matériels
§1 103
Besoins utilisateur
Ingénierie du
système
"englobant"
Exigences Qualification
du système du système
embarqué embarqué
Conception Intégration
du système du système
embarqué embarqué
Conception Intégration
du logiciel du logiciel
Implémentation
du logiciel
© D. Ribouchon
§1 104
• En parallèle de l'ingénierie du logiciel: l'ingénierie du HW
52
Les activités de la branche amont
Logiciel/SW
HW HW
Raccord. Raccord.
Poste poste ligne Ligne réseau
HW
Matrice de
com.
© D. Ribouchon
Logiciel/SW
HW HW
Raccord. Raccord.
Abonné Poste poste ligne Ligne réseau
HW
Matrice de
com.
Système téléphonique
§1 106
53
Les rôles classiques au sein d'un projet
"système embarqué"
Besoins utilisateur
Exigences Qualification
du système du système
embarqué embarqué
Architecte système
du système embarqué Conception
du système
Intégration
du système
embarqué embarqué
Conception Intégration
du logiciel du logiciel
Concepteur-développeur
du logiciel
© D. Ribouchon
Implémentation
du logiciel
§1 107
Projet Ascenseur –
Prise en main du projet
Besoins utilisateur
Ingénierie du
Système
"englobant"
Exigences Qualification
du système du système
embarqué embarqué
Conception Intégration
du système du système
embarqué embarqué
Conception Intégration
du logiciel du logiciel
© D. Ribouchon
§1 Implémentation
108
du logiciel
54
Plan du chapitre
• COO/POO et UML
§1 109
• Dernières versions:
– 2.4.1 (08/2011): www.omg.org/spec/UML/2.4.1
© D. Ribouchon
55
UML: formalisme de modélisation (2/2)
• Il définit:
– un ensemble de concepts, possédant une sémantique claire
– une "boîte à outils" de formalismes de modélisation
graphique: les diagrammes UML
§1 111
Les 13 diagrammes
56
Diagramme d'activité
Calculer montant
Obtenir autorisation
Payer
© D. Ribouchon
§1 113 113
Diagramme de classe
Facture
0..1
§1 114
57
Diagramme d'objets
:Facture
:Reparation
:Client :Voiture
:Reparation
© D. Ribouchon
§1 115
Prete
Env oyee
envoi
EnRelance Payee
paiement
© D. Ribouchon
§1 116
58
Diagramme de cas d'utilisation
Creer un dossier
Secretaire
Facturer
Systeme nomenclature
Saisir reparation
Mecanicien
© D. Ribouchon
§1 117
Diagramme de séquence
:Secretaire
demande de facturation()
traiterFacturation()
creerFacture()
ecran facture()
© D. Ribouchon
§1 118
59
Diagramme de package
© D. Ribouchon
§1 119
Diagramme de déploiement
* 1
© D. Ribouchon
§1 120
60
Diagramme de composants
GUI_JSP GestionReparation
ReparationServices
© D. Ribouchon
§1 121
Cabine
«HW» «HW»
«HW»
selecteur :BoutonVoyant entrainementCab :
porteCabine :Porte [1] [nbEtages] Entrainement [1]
«SW»
pilote :Pilote
© D. Ribouchon
§1 122
61
Diagramme de communication
:Secretaire
1.1: creerFacture()
:Facture
© D. Ribouchon
§1 123
Diagramme de timing
Lecteur optique
Verrouillee
EnAttente
verifier
Ouv erte
deverrouiller verouiller
Processeur
Inactif
EnVerification
actif
Actif
Porte
0 10 20 30 40 50 60 70 80 90 100
© D. Ribouchon
§1 124
62
Diagramme de vue d'ensemble des
interactions
ref ref
accepter admission refuser admission
sd Sequence Diagram
:Secretaire
demande de facturation()
traiterFacturation()
creerFacture()
ecran facture()
© D. Ribouchon
§1 125
0..1
§1 126
63
Une notion structurante: le package
Définition UML
§1 127
•
© D. Ribouchon
64
Spécialiser le formalisme UML
Stéréotype – Stereotype
Définition UML
Commande
«entity»
numero Commande
montantHT
montantTTC numero
montantHT
montantTTC
«java»
Commande
numero
© D. Ribouchon
montantHT
§1 montantTTC 129
«business entity»
Commande
<<business use case>>
numero
Acheter
montantHT
montantTTC <<business
actor>> Client
© D. Ribouchon
§1 130
65
Les différents types de profils
§1 132
66
Prise en main – Synthèse (2/2)
Bonnes pratiques de conception logicielle
§1 – … 133
Fin
Prise en main
© D. Ribouchon
§1 134
67
Plan du cours
Déclinaison SI
• Introduction
• Prise en main: COO UML/POO et processus de développement
• Spécifier les exigences du système
– Comprendre le métier
– Spécifier les exigences
• Concevoir le système
– Définir la plateforme technique
– Concevoir le code source
– Concevoir les composants déployables
• Pour aller plus loin
© D. Ribouchon
§1 135
"Besoins utilisateur"
Modélisation du
Déploiement
métier
Vision développeur,
Tests
interne Conception
d'intégration
Implémentation
© D. Ribouchon
§1 136
68
Plan du cours
Déclinaison système embarqué
• Introduction
• Prise en main: COO UML/POO, processus de développement
• Conception du logiciel
§1 137
Besoins utilisateur
Ingénierie du
Système
"englobant"
Exigences Qualification
du système du système
embarqué embarqué
Conception Intégration
du système du système
embarqué embarqué
Conception Intégration
du logiciel du logiciel
Implémentation
© D. Ribouchon
du logiciel
§1 138
69