Chapitre 1
REUTILISATION CONCEPTUELLE
 
 
Précédent Suivant
 
Réutilisation conceptuelle
Motivations (1/2)
* Concevoir un système objet est difficile
* Beaucoup d'aspects à considérer
* Décomposition du système
* Factorisation du code
* Relations entre les composants
* Héritage, association, agrégation / composition, délégation
* Prévoir et intégrer dès la conception
* Réutilisation du code
* Evolutions / extensions possibles
==> Introduire de la réutilisabilité
Motivations (2/2)
* Bénéficier des bonnes pratiques de l'industrie
* Minimiser les risques dans la phase de développement
* Se référer à l'existant
* Reprendre des solutions éprouvées
* Permettre une réutilisation
* Au niveau implémentation
* Mêmes structures de données / algorithmes
==> Bibliothèques logicielles
* Au niveau conception
* Mêmes organisations des composants
==> Patrons de conception (ou "design patterns")
Réutilisation: niveaux d'abstraction
* A chaque nouvelle expérience, on peut réutiliser
* Sans outil particulier: réutilisation niveau par niveau
Réutilisation: analyse de domaine
* Profiter de plusieurs expériences du même domaine
Réutilisation: patrons de conception
* Problèmes de conception récurrents ==> Patrons de conception
* Solutions génériques réutilisables au niveau conception
Réutilisation: cadriciel (framework)
* Réutilisation au niveau implémentation ==> Bibliothèques logicielles
* Cadriciel = composants réutilisables (conception + implémentation)
Patrons de conception
* Définition
* Patron de conception = design pattern
* Un design pattern traite un problème de conception récurrent
* Il apporte une solution générale, indépendante du contexte
* En clair
* Description de l'organisation de classes et d'instances en interaction pour résoudre un problème de conception
* Solution générique de conception
* Doit être "élégante" et réutilisable
* Doit être testée et validée dans l'industrie logicielle
* Doit viser un gain en terme de génie logiciel
* Doit être indépendante du contexte
Référencement des design patterns (1/2)
* Tentatives de référencement des patrons de conception
* Livre fondateur (23 patrons)
* Design Patterns: Elements of Reusable Object-Oriented Software
* Gamma, Helm, Johnson, Vlissides
* Surnommés le "Gang of Four" (GoF)
* Addison-Wesley, 1994
* Patrons en environnement distribué (17 patrons)
* Pattern-Oriented Software Architecture:
Patterns for Concurrent and Networked Objects
* Schmidt, Stal, Rohnert, Buschmann
* Wiley, 2000
Référencement des design patterns (2/2)
* Mais ce ne sont pas les seuls patrons
* Patron MVC (Modèle-Vue-Contrôleur)
* Patrons GRASP
* Proposés par Craig Larman
* Plus conceptuels
* Communauté active
* De nouveaux patrons proposés régulièrement
* Démocratique: adoptés si utilisés et génériques
* Exemples
* Reversible Command (Undo)
* Lazy Initialization
* Liste plus exhaustive sur Wikipedia
* Dans sa version anglaise
Patrons de conception du GoF (1/3)
* Quatre éléments principaux définissent un patron
* Objectif
* Description de son utilité
* Problème / Motivation
* Quand appliquer le patron de conception
* Relations problématiques entre les classes
* Solution proposée
* Eléments impliqués
* Leurs relations
* Schémas conceptuels (e.g. diagrammes UML)
* Conséquences
* Compromis éventuels
* Qualité de la solution
Patrons de conception du GoF (2/3)
* Classification selon deux critères
* Cible: qui est concerné ?
* Les classes
* Relations d'héritage
* Aspect statique
* Les instances
* Relations de composition
* Aspect dynamique
* Objectif: que veut-on faire ?
* Création de composants ==> Patrons de création
* Assemblage de composants ==> Patrons de structure
* Comportement des composants ==> Patrons de comportement
Patrons de conception du GoF (3/3)
Principes généraux des design patterns
* Favoriser une bonne conception dès le départ
* "Petit mais costaud"
* Classes spécialisées
* Uniquement les méthodes essentielles
* "Chacun chez soi"
* Eviter les références explicites à d'autres objets
* Le moins de couplage possible
* "Quand on ne sait pas, on demande"
* Déléguer certaines tâches lorsque nécessaire
Mécanisme de délégation (1/2)
* Principe
* Rediriger un message vers un autre objet
* Utilise la composition: délégant vers délégué
* Intervient dans de nombreux patrons du GoF
* Peut être une alternative à l'héritage
* Plusieurs manières de rediriger
* Contrôle du message (e.g. Proxy)
* Changement de message (e.g. Adapter)
* Changement de délégué (e.g. Chain of Responsibility)
* Redéfinition du message (e.g. Decorator)
Mécanisme de délégation (2/2)