Présentation du design
- Rappel des fondamentaux de la POO et d'UML. Les apports d'UML pour la conception. Les enjeux de la conception. Réutiliser sans freiner les évolutions.
- L'utilisation de l'héritage. Avantages et inconvénients.
Principes fondamentaux en conception objet
- Les principes d'ouverture/fermeture (OCP) et de substitution de Liskov (LSP).
- Concept de polymorphisme, de couplage faible et de forte cohésion.
- L'impact de la conception objet sur les projets.
Travaux pratiques
Découpage des responsabilités entre les classes.
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 GRASP.
Principes d'organisation en packages
- Le package : une unité de conception livraison/réutilisation (REP) et la réutilisation commune (CRP).
- Le découpage des packages. Le CCP.
- L'organisation entre packages.
Travaux pratiques
Construction et hiérarchisation des packages.
Développements pilotés par les tests
- Approche Test Driven Development (TDD) versus approche Model Driven Engineering (MDE).
- Ecriture des cas et de suites de tests.
Travaux pratiques
Attribution des responsabilités aux composants logiciels via l'approche TDD.
Principes des design patterns
- Techniques de conception d'une application objet.
- Les designs patterns pour réutiliser l'expérience.
- Périmètre, avantages et limites des Design Patterns.
- Répondre à des problèmes récurrents.
Les patterns fondateurs de Gamma et GOF
- Le catalogue de patterns. Les patterns de création d'objets (fabrique, singleton...), comportementaux (chaîne de responsabilités, observateur...), de structure (adaptateur, façade et composite).
Travaux pratiques
Exemple de conception et programmation avec des patterns GOF.
La refactorisation
- Pourquoi refactoriser ? Niveaux de refactorisation.
- Modification de la présentation du code et de l'algorithmique des classes. Refonte de la conception.
Travaux pratiques
Exemple de refactorisation et mise en pratique avec des patterns GOF.
Introduction à l'architecture logicielle et aux patterns architecturaux
- Des exigences à l'architecture.
- Styles architecturaux.
- Patterns de distribution (Client / Serveur Style, Data Bus Pattern, Blackboard, Repository).
- Patterns de conception de systèmes (MVC, Architecture en couches, Plug-in Style, Pipeline).
Processus de développement
- Organiser la conception dans un processus itératif et incrémental.
- Le manifeste agile. eXtreme Programming. SCRUM.