Maîtriser les Patrons de Conception
Maîtriser les Patrons de Conception
Patrons de conception
Nicolas Delanoue
1/33
Introduction Conception Programmation Synthèse
Objectif du cours
Focalisation sur la conception : Bonnes pratiques & “Patron de
conception”.
Travaux pratiques
Exercices : conception, refactorying, patron de conception,
Principe : programme “mal conçu” à restructurer en
appliquant les modèles adaptés.
2/33
Introduction Conception Programmation Synthèse
Objectif du cours
Focalisation sur la conception : Bonnes pratiques & “Patron de
conception”.
Travaux pratiques
Exercices : conception, refactorying, patron de conception,
Principe : programme “mal conçu” à restructurer en
appliquant les modèles adaptés.
Références
E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design
Patterns : Elements of Reusable Object-Oriented Software,
1995,
Exemples en ligne (utilisés en TD) :
[Link]
2/33
Introduction Conception Programmation Synthèse
1 Introduction
Le quoi
Le comment
Identifier les contraintes
2 Conception
Généralités
GRASP
Patron d’architecture
Patrons de conception (du gang of four)
3 Programmation
4 Synthèse
3/33
Introduction Conception Programmation Synthèse
Le quoi
4/33
Introduction Conception Programmation Synthèse
Le quoi
4/33
Introduction Conception Programmation Synthèse
Le quoi
4/33
Introduction Conception Programmation Synthèse
Le quoi
4/33
Introduction Conception Programmation Synthèse
Le comment
5/33
Introduction Conception Programmation Synthèse
Le comment
5/33
Introduction Conception Programmation Synthèse
Le comment
5/33
Introduction Conception Programmation Synthèse
Le comment
5/33
Introduction Conception Programmation Synthèse
Le comment
5/33
Introduction Conception Programmation Synthèse
Le comment
5/33
Introduction Conception Programmation Synthèse
Le comment
5/33
Introduction Conception Programmation Synthèse
Le comment
5/33
Introduction Conception Programmation Synthèse
Evidemment
Communiquer, échanger pour converger vers la solution
“objectivement” adaptée.
6/33
Introduction Conception Programmation Synthèse
7/33
Introduction Conception Programmation Synthèse
7/33
Introduction Conception Programmation Synthèse
7/33
Introduction Conception Programmation Synthèse
8/33
Introduction Conception Programmation Synthèse
8/33
Introduction Conception Programmation Synthèse
8/33
Introduction Conception Programmation Synthèse
8/33
Introduction Conception Programmation Synthèse
8/33
Introduction Conception Programmation Synthèse
En conclusion,
Ces caractéristiques et contraintes peuvent impacter l’architecture
générale, détaillée et le code.
9/33
Introduction Conception Programmation Synthèse
1 Introduction
Le quoi
Le comment
Identifier les contraintes
2 Conception
Généralités
GRASP
Patron d’architecture
Patrons de conception (du gang of four)
3 Programmation
4 Synthèse
10/33
Introduction Conception Programmation Synthèse
Généralités
Définition
Une conception descendante consiste à d’abord effectuer la
conception haut niveau puis la conception bas niveau.
Définition
La conception haut-niveau repose sur la décomposition en
sous-systèmes logiques. Les packages/modules & classes ne sont
pas détaillées.
11/33
Introduction Conception Programmation Synthèse
Généralités
Définition
La conception bas-niveau se rapproche du code, elle est plus
détaillée. En général, on spécifie les interfaces en décrivant :
la signature des méthodes (nom et paramètres),
la portée des éléments, i.e. source des dépendances. On parle
de visibilité.
12/33
Introduction Conception Programmation Synthèse
Généralités
Définition
La conception bas-niveau se rapproche du code, elle est plus
détaillée. En général, on spécifie les interfaces en décrivant :
la signature des méthodes (nom et paramètres),
la portée des éléments, i.e. source des dépendances. On parle
de visibilité.
Avantages
Restructuration des modèles pour réduire la complexité. i.e.
réduction du nombre d’associations.
Intégration de classes complémentaires, e.g. intégration des
éléments de couplage avec composants off-the-shelf.
12/33
Introduction Conception Programmation Synthèse
Généralités
13/33
Introduction Conception Programmation Synthèse
Généralités
13/33
Introduction Conception Programmation Synthèse
Généralités
13/33
Introduction Conception Programmation Synthèse
Généralités
13/33
Introduction Conception Programmation Synthèse
Généralités
13/33
Introduction Conception Programmation Synthèse
Généralités
13/33
Introduction Conception Programmation Synthèse
Généralités
14/33
Introduction Conception Programmation Synthèse
GRASP
15/33
Introduction Conception Programmation Synthèse
GRASP
GRASP
17/33
Introduction Conception Programmation Synthèse
GRASP
Avant
Package A Package B
Classe B1
Classe A
Classe B2
Classe B3
18/33
Introduction Conception Programmation Synthèse
GRASP
Avant
Package A Package B
Classe B1
Classe A
Classe B2
Classe B3
Après
Package A Package B
Classe B1
Classe A
Classe B Classe B2
Classe B3
18/33
Introduction Conception Programmation Synthèse
GRASP
Mauvais exemple
Package A
Package C
Package B
Package D
19/33
Introduction Conception Programmation Synthèse
GRASP
Meilleur exemple
Package A
Package C
Package B
Package D
GRASP
21/33
Introduction Conception Programmation Synthèse
Patron d’architecture
Définition
Un modèle architectural (Architectural patterns) est une solution
générale réutilisable à un problème courant de l’architecture
logicielle dans un contexte donné.
Patron d’architecture
Layered pattern
Ce modèle peut être utilisé pour structurer des programmes
pouvant être décomposés en groupes de sous-tâches, chacune
d’elles étant à un niveau particulier d’abstraction. Chaque couche
fournit des services à la couche immédiatement supérieure.
Quelques exemples
Le modèle OSI, le package swing (java), application web (3-tiers).
unité de données couches
7 - Application
Donnée Point d'accès aux services réseau
Couches hautes
6 - Présentation
Donnée Conversion et chiffrement
des données
5 - Session
Donnée Communication Interhost
4 - Transport
Segment Connexion de bout en bout
et contrôle de flux (TCP)
Couches matérielles
3 - Réseau
Paquet Détermine le parcours
et l'adressage logique (IP)
2 - Liaison
Trame Adressage physique
(MAC et LLC)
1 - Physique
Bit Transmission binaire
numérique ou analogique
23/33
Introduction Conception Programmation Synthèse
Patron d’architecture
Layered pattern
Avantages :
Faible couplage (restreint aux couches adjacentes) : moindre
impact des modifications,
Couches facilement interchangeables, e.g. Wifi vs Fibre tout en
conservant IP,
Cas applications web :
L’accès à la base de données n’est pas direct
L’interface est changeable facilement sans modifier
l’application
La couche stockage (ou métier) est partageable entre
différentes applications
Inconvénients :
Risque de perte de performances par passage à travers des
couches multiples
24/33
Introduction Conception Programmation Synthèse
Patron d’architecture
Illustration
25/33
Introduction Conception Programmation Synthèse
Patron d’architecture
Illustration
Exemple
Le shell bash sous GNU/Linux.
25/33
Introduction Conception Programmation Synthèse
Patron d’architecture
Illustration
Exemple
Le shell bash sous GNU/Linux.
Bonus - Malus
Il facilite la construction de traitements complexes sur des flux de
données mais il est limité à des systèmes non interactifs.
25/33
Introduction Conception Programmation Synthèse
Définition
Un patron de conception est un arrangement caractéristique de
modules, reconnu comme bonne pratique en réponse à un
problème de conception d’un logiciel. Il décrit une solution
standard, utilisable dans la conception de différents logiciels.
26/33
Introduction Conception Programmation Synthèse
Définition
Un patron de conception est un arrangement caractéristique de
modules, reconnu comme bonne pratique en réponse à un
problème de conception d’un logiciel. Il décrit une solution
standard, utilisable dans la conception de différents logiciels.
26/33
Introduction Conception Programmation Synthèse
27/33
Introduction Conception Programmation Synthèse
27/33
Introduction Conception Programmation Synthèse
27/33
Introduction Conception Programmation Synthèse
Présentation standardisée
Chaque patron de conception est présentée de la même manière :
Nom
Description du problème à résoudre
Description de la solution
Conséquences (avantages / inconvénients)
28/33
Introduction Conception Programmation Synthèse
- singleton : Singleton
- Singleton()
+ getInstance() : Singleton
29/33
Introduction Conception Programmation Synthèse
30/33
Introduction Conception Programmation Synthèse
30/33
Introduction Conception Programmation Synthèse
30/33
Introduction Conception Programmation Synthèse
30/33
Introduction Conception Programmation Synthèse
Définitions
Modifications du système sans changement des fonctionnalité.
Modification du modèle : model transformation
Programmation à partir du modèle : forward engineering
Modification du code : refactorying
Modélisation à partir du programme : reverse engineering
30/33
Introduction Conception Programmation Synthèse
Bonnes pratiques
Avoir une notation homogène et parlante des variables :
PtrMaxFreq et PtrMinFreq : oui !
maximumFq et FrqyMin : non !
31/33
Introduction Conception Programmation Synthèse
Bonnes pratiques
Avoir une notation homogène et parlante des variables :
PtrMaxFreq et PtrMinFreq : oui !
maximumFq et FrqyMin : non !
penser aux assertions (sous-forme de pre/post conditions),
31/33
Introduction Conception Programmation Synthèse
Bonnes pratiques
Avoir une notation homogène et parlante des variables :
PtrMaxFreq et PtrMinFreq : oui !
maximumFq et FrqyMin : non !
penser aux assertions (sous-forme de pre/post conditions),
utiliser un débogueur,
31/33
Introduction Conception Programmation Synthèse
Bonnes pratiques
Avoir une notation homogène et parlante des variables :
PtrMaxFreq et PtrMinFreq : oui !
maximumFq et FrqyMin : non !
penser aux assertions (sous-forme de pre/post conditions),
utiliser un débogueur,
structures de contrôle : rester clair et structuré,
31/33
Introduction Conception Programmation Synthèse
Bonnes pratiques
Avoir une notation homogène et parlante des variables :
PtrMaxFreq et PtrMinFreq : oui !
maximumFq et FrqyMin : non !
penser aux assertions (sous-forme de pre/post conditions),
utiliser un débogueur,
structures de contrôle : rester clair et structuré,
limiter les tests imbriqués (e.g. if englobant récursivement des
if),
31/33
Introduction Conception Programmation Synthèse
Bonnes pratiques
Avoir une notation homogène et parlante des variables :
PtrMaxFreq et PtrMinFreq : oui !
maximumFq et FrqyMin : non !
penser aux assertions (sous-forme de pre/post conditions),
utiliser un débogueur,
structures de contrôle : rester clair et structuré,
limiter les tests imbriqués (e.g. if englobant récursivement des
if),
bannir les sauts (e.g. goto multiples),
31/33
Introduction Conception Programmation Synthèse
Bonnes pratiques
Avoir une notation homogène et parlante des variables :
PtrMaxFreq et PtrMinFreq : oui !
maximumFq et FrqyMin : non !
penser aux assertions (sous-forme de pre/post conditions),
utiliser un débogueur,
structures de contrôle : rester clair et structuré,
limiter les tests imbriqués (e.g. if englobant récursivement des
if),
bannir les sauts (e.g. goto multiples),
privilégier les appels récursifs : code plus lisible,
31/33
Introduction Conception Programmation Synthèse
Bonnes pratiques
Avoir une notation homogène et parlante des variables :
PtrMaxFreq et PtrMinFreq : oui !
maximumFq et FrqyMin : non !
penser aux assertions (sous-forme de pre/post conditions),
utiliser un débogueur,
structures de contrôle : rester clair et structuré,
limiter les tests imbriqués (e.g. if englobant récursivement des
if),
bannir les sauts (e.g. goto multiples),
privilégier les appels récursifs : code plus lisible,
présenter clairement (e.g. indentation des blocs de code),
31/33
Introduction Conception Programmation Synthèse
Bonnes pratiques
Avoir une notation homogène et parlante des variables :
PtrMaxFreq et PtrMinFreq : oui !
maximumFq et FrqyMin : non !
penser aux assertions (sous-forme de pre/post conditions),
utiliser un débogueur,
structures de contrôle : rester clair et structuré,
limiter les tests imbriqués (e.g. if englobant récursivement des
if),
bannir les sauts (e.g. goto multiples),
privilégier les appels récursifs : code plus lisible,
présenter clairement (e.g. indentation des blocs de code),
documenter : pour les autres mais aussi pour soi-même,
31/33
Introduction Conception Programmation Synthèse
Bonnes pratiques
Avoir une notation homogène et parlante des variables :
PtrMaxFreq et PtrMinFreq : oui !
maximumFq et FrqyMin : non !
penser aux assertions (sous-forme de pre/post conditions),
utiliser un débogueur,
structures de contrôle : rester clair et structuré,
limiter les tests imbriqués (e.g. if englobant récursivement des
if),
bannir les sauts (e.g. goto multiples),
privilégier les appels récursifs : code plus lisible,
présenter clairement (e.g. indentation des blocs de code),
documenter : pour les autres mais aussi pour soi-même,
insérer du pseudo-code
31/33
Introduction Conception Programmation Synthèse
Bonnes pratiques
Avoir une notation homogène et parlante des variables :
PtrMaxFreq et PtrMinFreq : oui !
maximumFq et FrqyMin : non !
penser aux assertions (sous-forme de pre/post conditions),
utiliser un débogueur,
structures de contrôle : rester clair et structuré,
limiter les tests imbriqués (e.g. if englobant récursivement des
if),
bannir les sauts (e.g. goto multiples),
privilégier les appels récursifs : code plus lisible,
présenter clairement (e.g. indentation des blocs de code),
documenter : pour les autres mais aussi pour soi-même,
insérer du pseudo-code
commenter les entrées-sorties, le fonctionnement général de
l’algorithme...
31/33
Introduction Conception Programmation Synthèse
32/33
Introduction Conception Programmation Synthèse
32/33
Introduction Conception Programmation Synthèse
32/33
Introduction Conception Programmation Synthèse
32/33
Introduction Conception Programmation Synthèse
32/33
Introduction Conception Programmation Synthèse
32/33
Introduction Conception Programmation Synthèse
32/33
Introduction Conception Programmation Synthèse
32/33
Introduction Conception Programmation Synthèse
Organisation temporelle
9 séances de travaux pratiques où on va décrouvrir quelques
patrons de conception,
1 évaluation finale pratique,
1 évaluation sur papier.
33/33
Introduction Conception Programmation Synthèse
Organisation temporelle
9 séances de travaux pratiques où on va décrouvrir quelques
patrons de conception,
1 évaluation finale pratique,
1 évaluation sur papier.
33/33