Professional Documents
Culture Documents
Cours Patron Partie1
Cours Patron Partie1
Patron de conception
Lazhar HAMEL
MR/MP GL
Institut Supérieur d’Informatique et de Mathématiques de
Monastir – Université de Monastir
Contact : Lazhar HAMEL
e-mail : lazhar.hamel@isimm.rnu.tn
Bureau : N°23
I. Introduction
• Cycle de vie d’un logiciel
Analyse ○ Conception
• Macroscopique
• Microscopique ou détaillée
Maintenance
Conception
Implémentation
○ Maintenance
• Corrective: correction des erreurs résiduels
Test • Evolutive: intégrer de nouvelles
fonctionnalité dans le logiciel
Utilisation
1
22/10/2022
I. Introduction
La conception d’un logiciel : un art difficile
○ Une conception réutilisable, extensible et efficace (complexité
linéaire non exponentielle) est une activité extrêmement
difficile.
○ Concepteur:
□ Novice
□ Expert
○ Un concepteur novice hésite entre les différents variantes:
Classe abstraite/ classe effective, relation de héritage/ relation
client/serveur.
○ Un concepteur expert trouve tout de suite la solution
○ Quel est le secret?
□ L’expérience
Objectifs
○ Modularité
Facilité de gestion (technologie objet)
○ Cohésion
Degré avec lequel les tâches réalisées par un seul module
sont fonctionnellement reliées
Une forte cohésion est une bonne qualité
○ Couplage
Degré d’interaction entre les modules dans le système
Un couplage'‘lâche’’ est une bonne qualité
○ Réutilisabilité
Bibliothèques, frameworks (cadres)
2
22/10/2022
Cohésion : "mauvais"
exemple
Cohésion : « bon»
exemple
3
22/10/2022
Couplage : exemple
Principes de
conception (1)
4
22/10/2022
Principes de
conception (2)
AINSI :
○ les classes clients ou les objets sont indépendants des classes des
objets qu’ils utilisent aussi longtemps que les objets respectent
l’interface qu’ils attendent
○ les classes clients ou les objets sont indépendants des classes qui
implémentent l’interface
Principes de
conception (3)
10
5
22/10/2022
I. Introduction
○ L’implémentation :
□ Est une activité répétitive : choses semblables mais
non identiques
□ Solution : des algorithmes fondamentaux et des
structures de données fondamentales.
○ Conception :
□ Répétition : choses semblables mais non
identiques
□ Solution : solution conceptuelle proposées sont
connues sous le nom : Patron de conception [1]
= des modèles de conception
= des microarchitectures logicielles
= Design Pattern.
[1] « Design Patterns » Catalogue de modèle de conception réutilisable ( 1995 version Anglaise,
version française (traduction) 1990). Ce cours va présenter quelques patterns issue de ce livre. Ces
patterns sont connues sous le nom Patterns de E.Gamma ou encore Patterns de GoF( bandes de
quatres).
11
I. Introduction
○ Référence de base :
« Design Patterns : Catalogue de modèle de conception
réutilisable »
12
6
22/10/2022
Introduction et classification
13
13
Introduction et classification
14
14
7
22/10/2022
Introduction et classification
Définition:
Coad [Coad92] – Une abstraction d’un doublet, triplet ou d’un
ensemble de classes qui peut être réutilisé encore et encore pour le
développement d’applications
Appleton [Appleton97] – Une règle tripartite exprimant une relation
entre un certain contexte, un certain problème qui apparaît
répétitivement dans ce contexte et une certaine configuration
logicielle qui permet la résolution de ce problème
Aarsten [Aarsten96] – Un groupe d’objets coopérants liés par des
relations et des règles qui expriment les liens entre un contexte, un
problème de conception et sa solution
15
15
Définitions
Documentation d’une expérience éprouvée de conception
• Identification et spécification d ’abstractions qui sont au dessus
du niveau des simples classes, instances
• Vocabulaire commun et aide à la compréhension de principes
de conception
• Moyen de documentation de logiciels
• Aide à la construction de logiciels répondant à des propriétés
précises, de logiciels complexes et hétérogènes
• Traductions : patrons de conception, schémas de conception
16
16
8
22/10/2022
Historique
17
17
Catégories
Architectural Patterns
– schémas d’organisation structurelle de logiciels (pipes, filters, brokers,
blackboard, MVC, …)
• Design Patterns
– caractéristiques clés d’une structure de conception commune à plusieurs
applications,
– Portée plus limitée que les « architectural patterns »
• Idioms ou coding patterns
– solution liée à un langage particulier
• Anti-patterns
– mauvaise solution ou comment sortir d ’une mauvaise solution
• Organizational patterns
– Schémas d’organisation de tout ce qui entoure le développement d’un
logiciel (humains)
18
18
9
22/10/2022
Introduction et classification
Propriétés:
Un bon modèle de conception possède les caractéristiques suivantes :
Il résout un problème de conception récurrent.
La solution proposée n’est pas évidente
La solution proposée doit être élégante et utile.
19
19
Introduction et classification
Description des modèles de conception :
Tous les modèles de conception de E.Gamma sont décrits selon le même canevas (format
unique) un tel canevas comporte plusieurs rubriques :
intention,
motivation,
indication d’utilisateurs,
structure…
20
20
10
22/10/2022
Introduction et classification
21
21
22
22
11
22/10/2022
Fabrication
Fabrique abstraite
Prototype
Singleton
Monteur
23
23
24
24
12
22/10/2022
25
25
26
26
13
22/10/2022
27
27
Structure
28
28
14
22/10/2022
Constituants :
Singleton: La classe singleton offre une opération classe instance () permettant
d’accéder à la seule instance (objet).
Collaboration : Le client doit passer par l’interface instance pour accéder à la seule
instance de la classe singleton.
29
29
Exercice:
Enoncé : Utiliser le patron singleton pour implémenter en java une variable globale (objet
partagé : par exemple un compteur de type entier)
30
30
15
22/10/2022
Solution :
Faire des correspondances :
compteur-> singleton
Connaissances concrètes :
Cpt
Incrémenter
Décrémenter
Réinitialiser
Valeur
31
31
32
32
16
22/10/2022
33
33
34
34
17
22/10/2022
Class test{
public static void main(String args[]){
Compteur.instance().incrementer();
Compteur.instance().incrementer();
Compteur.instance().incrementer();
Compteur.instance().decrementer();
System.out.println(‘’ valeur = ‘’+ compteur.instance().valeur()) ; }
}
35
35
36
36
18