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.
- 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 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
- Les Design 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 : les patterns de création, de comportement, de structure.
- La refactorisation. Pourquoi refactoriser ?
- Modification de la présentation du code et de l'algorithmique des classes. Refonte de la conception.
Travaux pratiques
Exemple de conception, refactorisation et programmation avec des patterns GoF.
Architecture logicielle et 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
- Concevoir dans un processus itératif et incrémental.
- Le manifeste Agile. XP, Scrum.