Académique Documents
Professionnel Documents
Culture Documents
DESIGN PATTERNS
Modèles de conception
réutilisables
D’après le catalogue d’Erich Gamma, Richard Helm, Ralph
Johnson et John Vlissides (1995).
Réalisation du diagramme de
classes à l’aide du plugin
Omondo UML pour Eclipse.
NomPaquetage1::NomPaquetage2::Nom de classe
<<stéréotype>>
Ex : <<signal>>, <<exception>>,
Nom de classe <<thread>> ; <<utilitaire>>
« Réalise »
ou
Utilisateur (
Nom de classe classe, …)
Cardinalités
• Composition
– Cas particulier d’agrégation avec un couplage + fort (losange
noir).
• Généralisation/Héritage
– Relation de classification entre un élément + général et un
élément + spécifique (triangle).
Contrôleur non
représenté ici
Modèle
Conseils :
• Programmer une interface plutôt qu’une implémentation.
• Utiliser des classes abstraites en C++, interfaces en Java pour
définir des interfaces communes à un ensemble de classes.
• Déclarer les variables et paramètres comme des instances de la
classe abstraite plutôt que comme instances de classes
particulières.
– Conséquence : les classes clientes et les objets sont indépendants des
classes qui implémentent l’interface.
• Modèle ‘PUSH’ : le sujet envoie aux observateurs une info détaillée sur les modifs
(suppose par conséquent que sujet sait ce qui les intéresse ou qu’il envoie toutes
les modifs, via par ex. un objet).
• Modèle ‘PULL’ : le sujet notifie simplement puis les observateurs réclament les
détails (GetState()). (plus souple mais peut être moins efficace).
ApplicationWindow
• Indications d’utilisation :
– procuration virtuelle (Cf. images),
– procuration à distance (espace d’@ ≠),
– procuration de protection,
– pointeurs intelligents (Smart Pointers).
‘g’
S0 S1 S2
• Quant l’automate est créé, il est sans état, les états initial et
courant sont NULL ; setStartState() permet de renseigner
l’état initial (s0) de l’automate ; start() positionne l’automate
sur cet état ; get_input() permet à l’automate de recevoir un
caractère (et donc parfois de changer d’état) ;
setCurrentState() permet de changer l’état courant de
l’automate. Dans les classes d’états, la méthode next()
permet de changer d’état courant quand le caractère reçu est
un caractère qui permet une transition.
class Context {
private:
Strategy * strategy;
public:
Context() { strategy = new ConcreteStrategyA(); }
void changeStrategy(const Strategy & newS) {if (strategy) delete strategy ; strategy = new Strategy(newS); }
void getResult() { strategy.runAlgorithm(); }
};
int main() {
Context * context = new Context();
context->getResult();
concreteStrategyB sB;
context->changeStrategy(sB);
context->getResult();
}
• Google !