Programme du cours
Présentation du design
-
Rappel des notions fondamentales de la programmation OO et d’UML
-
Les enjeux de la conception : accroître la réutilisation sans freiner les évolutions
-
La réutilisation par l’héritage : avantages et inconvénients
Principes fondamentaux en conception objet
-
La stratégie d’évolution avec le principe d’ouverture/fermeture (OCP)
-
Une réutilisation efficace par l’héritage et les interfaces : le principe de substitution de Liskov (LSP)
Principes d’organisation en packages
-
Le package comme unité de conception avec les principes d’équivalence livraison/réutilisation (REP) et de réutilisation commune (CRP)
-
Le découpage des packages grâce au principe de fermeture commune (CCP)
-
L’organisation entre package : principes des dépendances acycliques (ADP) et de relation dépendance/stabilité (SDP)
Principes de construction des classes
-
La gestion raisonnée des dépendances avec l’inversion de dépendance (DIP)
-
La réduction de la complexité apparente par la séparation des interfaces (ISP)
-
La répartition des responsabilités avec le principe de GRASP
Principes des Design Patterns
-
Origine et portée des patterns
-
Les design patterns comme réponse aux problèmes techniques
Les patterns fondateurs de Gamma et Gof
-
Le catalogue de patterns de la "bande des quatre"
-
Isoler la création des objets de leur utilisation avec les patterns créateurs : fabrique, singleton et prototype
-
Affiner l’affectation des responsabilités grâce aux patterns comportementaux : chaîne de responsabilité, patron de méthode et observateur
-
Améliorer l’organisation des classes avec les patterns de structure : adaptateur, façade et composite
Les patterns JavaEE (J2EE)
-
Rappel sur l’architecture JavaEE
-
Adapter les patterns à l’architecture multi-tiers
-
Optimiser une architecture distribuée avec le Transfer Object et le Session Façade
-
Améliorer l’évolutivité des couches avec le Data Access Object et le Business Delegate
-
Structurer la couche présentation grâce au MVC (Model-View-Controller) : Front Controller et Composite View