La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 9 Conception orientée objet et implantation.

Présentations similaires


Présentation au sujet: "GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 9 Conception orientée objet et implantation."— Transcription de la présentation:

1 GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 9 Conception orientée objet et implantation

2 GPA789 Analyse et conception orientées objet 2 Conception orientée objet (1) Lobjectif principal de la conception orientée objet est de déterminer le « comment faire ».Lobjectif principal de la conception orientée objet est de déterminer le « comment faire ». La conception orientée objet consiste à apporter une solution informatique aux questions et problèmes dégagés lors de lanalyse orientée objet.La conception orientée objet consiste à apporter une solution informatique aux questions et problèmes dégagés lors de lanalyse orientée objet. Il faut donc penser en termes de solutions informatiques et de leurs implantations.Il faut donc penser en termes de solutions informatiques et de leurs implantations.

3 GPA789 Analyse et conception orientées objet 3 Conception orientée objet (2) La conception orientée objet, tout comme lanalyse orientée objet, nest pas un travail algorithmique.La conception orientée objet, tout comme lanalyse orientée objet, nest pas un travail algorithmique. Cependant, il existe un ensemble dactivités reliées à la conception qui peuvent nous guider dans le travail. Attention! La liste des activités présentées ici ne sont pas données en ordre. De plus, certaines activités peuvent être réalisées en parallèle.Cependant, il existe un ensemble dactivités reliées à la conception qui peuvent nous guider dans le travail. Attention! La liste des activités présentées ici ne sont pas données en ordre. De plus, certaines activités peuvent être réalisées en parallèle.

4 GPA789 Analyse et conception orientées objet 4 Conception orientée objet (3) –Expliciter la séquence des événements dans les diagrammes dinteractions.

5 GPA789 Analyse et conception orientées objet 5 Conception orientée objet (4) –Ajouter les messages reliés à la création et à la destruction des objets dans les diagrammes dinteraction. –Ajouter la direction de navigation aux relations entre les classes. –Ajouter les relations de dépendance dans les diagrammes de classes

6 GPA789 Analyse et conception orientées objet 6 Conception orientée objet (5) –Identification des attributs et opérations manquantes. Ajouter les variables membres et les fonctions membres nécessaires aux algorithmes à implanter.Ajouter les variables membres et les fonctions membres nécessaires aux algorithmes à implanter. –Identification des classes collection. Ajouter des classes collection (liste, vecteur, etc.) pour tenir compte de la multiplicité des objets.Ajouter des classes collection (liste, vecteur, etc.) pour tenir compte de la multiplicité des objets. Utiliser des classes paramétrisées pour entreposer des objets de type quelconque.Utiliser des classes paramétrisées pour entreposer des objets de type quelconque.

7 GPA789 Analyse et conception orientées objet 7 Conception orientée objet (6) –Spécification des types et visibilité. Spécifier les types concrets (selon le langage de programmation à utiliser).Spécifier les types concrets (selon le langage de programmation à utiliser). Déterminer le niveau daccès des variables membres et des fonctions membres ( public, protected, private ).Déterminer le niveau daccès des variables membres et des fonctions membres ( public, protected, private ). –Spécification des contraintes. Indiquer les contraintes sur les valeurs des variables membres.Indiquer les contraintes sur les valeurs des variables membres. –Les valeurs limites, leur quantité, etc. Indiquer les contraintes sur les fonctions membresIndiquer les contraintes sur les fonctions membres –Leur pré-condition et leur post-condition.

8 GPA789 Analyse et conception orientées objet 8 Conception orientée objet (7) –Établir les algorithmes. Pour chacune des fonctions membres importantes:Pour chacune des fonctions membres importantes: –Écrire lalgorithme en pseudo-code en respectant sa pré- condition et sa post-condition. –Assurer le respect des contraintes appliquées aux variables membres. –Souvent les algorithmes à appliqués sont suggérer dans le contrat des opérations (créé lors de lanalyse orientée objet). –Le pseudo-code est traduit en instructions de programmation lors de limplantation du logiciel. –Lobjectif principal de cette activité est de rendre compréhensible lalgorithme à implanter aux programmeurs.

9 GPA789 Analyse et conception orientées objet 9 Conception orientée objet (8) –Spécification des exceptions Souvent les exceptions sont générées par la violation:Souvent les exceptions sont générées par la violation: –Des pré-conditions de fonctions membres. –Des valeurs limites ou quantité de variables membres. –On indiquera la possibilité dexception par une relation de dépendance

10 GPA789 Analyse et conception orientées objet 10 Conception orientée objet (9) –Spécifier les éléments de linterface graphique Il faut établir un modèle dutilisation du logicielIl faut établir un modèle dutilisation du logiciel –Comment présenter à lutilisateur les actions disponibles ? –Comment indiquer le chemin logique pour accomplir une tâche ? –Comment lutilisateur peut-il enclencher une action ? –Comment indiquer la progression dune action enclenchée ? –Comment lutilisateur peut-il arrêter prématurément laction enclencher ? –Comment signaler la fin dune action à lutilisateur ? Le modèle dutilisation doit viser la simplicité.Le modèle dutilisation doit viser la simplicité.

11 GPA789 Analyse et conception orientées objet 11 Conception orientée objet (10) –Identification et ajustement des bibliothèques Choisir les bibliothèques nécessaires à limplantation du logiciel (i.e. C++ standard Library, STL, Tools.h++, etc.).Choisir les bibliothèques nécessaires à limplantation du logiciel (i.e. C++ standard Library, STL, Tools.h++, etc.). Décider sil faut étendre les classes de ces bibliothèques.Décider sil faut étendre les classes de ces bibliothèques. –Exemple: Création dune sous-classe spécialisée Matrice dérivée de vector pour faciliter le calcul matriciel. –Identification et ajustement du cadre de travail Choisir le cadre de travail nécessaire à limplantation du logiciel (i.e. MFC, Visual Component, Fox Toolkit, etc.).Choisir le cadre de travail nécessaire à limplantation du logiciel (i.e. MFC, Visual Component, Fox Toolkit, etc.). Décider sil faut étendre les classes du cadre de travail.Décider sil faut étendre les classes du cadre de travail. –Exemple: Création dune nouvelle sous-classes CGraphView dérivée de CView de MFC pour faciliter laffichage des courbes.

12 GPA789 Analyse et conception orientées objet 12 Conception orientée objet (11) –Réalisation des associations Le concept dassociation nexiste pas dans les langages de programmation orientée objet.Le concept dassociation nexiste pas dans les langages de programmation orientée objet. En C++ on doit utiliser les variables membres pour réaliser une association.En C++ on doit utiliser les variables membres pour réaliser une association. Cas unidirectionnelCas unidirectionnel

13 GPA789 Analyse et conception orientées objet 13 Conception orientée objet (12) Cas bidirectionnelCas bidirectionnel –Consulter le chapitre 6 pour connaître la réalisation des relations (association, agrégation, composition, etc.) en C++.

14 GPA789 Analyse et conception orientées objet 14 Implantation à laide de C++ (1) Transformation de la conception en code:Transformation de la conception en code: Écrire la définition des classes.Écrire la définition des classes. Écrire la définition des méthodes (fonctions membres).Écrire la définition des méthodes (fonctions membres). Écriture de la définition des classes diagrammes des classes dégagées de la conception.Écriture de la définition des classes diagrammes des classes dégagées de la conception. Écriture de la définition des méthodes (fonctions membres) contrats dopération, diagrammes de collaboration ou de séquence dégagées de la conception.Écriture de la définition des méthodes (fonctions membres) contrats dopération, diagrammes de collaboration ou de séquence dégagées de la conception. Il faut ajouter les constructeurs et le destructeur aux classes !!Il faut ajouter les constructeurs et le destructeur aux classes !!

15 GPA789 Analyse et conception orientées objet 15 Implantation à laide de C++ (2) Déterminer le nombre de constructeurs dune classe selon les critères suivants:Déterminer le nombre de constructeurs dune classe selon les critères suivants: –Énumérer les différentes façons un objet dune classe peut être créé. Ex: La création dun objet de type NombreComplexe peut être réalisée de trois manières différentes:Ex: La création dun objet de type NombreComplexe peut être réalisée de trois manières différentes: 1. On spécifie la partie réelle et la partie imaginaire 2. On spécifie la partie réelle seulement 3. On spécifie la partie imaginaire seulement On peut donner deux constructeurs pour tenir compte de ces situations de création:On peut donner deux constructeurs pour tenir compte de ces situations de création: –NombreComplexe(float rel,float imag=0) Cas 1, 2. –NombreComplexe(float imag) Cas 3.

16 GPA789 Analyse et conception orientées objet 16 Implantation à laide de C++ (3) –Ajouter explicitement un constructeur par défaut à chacune des classes Un constructeur par défaut est celui qui naccepte pas de paramètre ou tous les paramètres possèdent une valeur par défaut.Un constructeur par défaut est celui qui naccepte pas de paramètre ou tous les paramètres possèdent une valeur par défaut. Ex: NombreCompexe(); ou NombreComplexe(float rel=0, float imag=0);Ex: NombreCompexe(); ou NombreComplexe(float rel=0, float imag=0); Il est utilisé dans la situation suivante:Il est utilisé dans la situation suivante: NombreComplexe cmplx; Si ce constructeur nest pas défini explicitement dans le code, le compilateur va en générer un pour nous.Si ce constructeur nest pas défini explicitement dans le code, le compilateur va en générer un pour nous. Mais le constructeur par défaut généré par le compilateur ne fait rien !!! Donc, soyez prudent.Mais le constructeur par défaut généré par le compilateur ne fait rien !!! Donc, soyez prudent.

17 GPA789 Analyse et conception orientées objet 17 Implantation à laide de C++ (4) –Constructeur par défaut (suite) Si on veut empêcher la création dun objet par son constructeur par défaut le définir dans la section privée de la déclaration.Si on veut empêcher la création dun objet par son constructeur par défaut le définir dans la section privée de la déclaration. ::: private: NombreComplexe() { } ::: }; De cette façon, lutilisation accidentelle du constructeur par défaut produira une erreur de compilation.De cette façon, lutilisation accidentelle du constructeur par défaut produira une erreur de compilation.

18 GPA789 Analyse et conception orientées objet 18 Implantation à laide de C++ (5) –Ajouter explicitement un constructeur de copie à chacune des classes Un constructeur de copie est celui qui accepte une référence à la classe elle-même.Un constructeur de copie est celui qui accepte une référence à la classe elle-même. Ex: NombreCompexe(const NombreComplexe& c);Ex: NombreCompexe(const NombreComplexe& c); Il est utilisé dans les situations suivantes:Il est utilisé dans les situations suivantes: NombreComplexe cmplx; // constructeur par défaut NombreComplexe cmplx2 = cmplx; // de copie NombreComplexe cmplx3(cmplx); // de copie Si ce constructeur nest pas défini explicitement dans le code, le compilateur va en générer un pour nous.Si ce constructeur nest pas défini explicitement dans le code, le compilateur va en générer un pour nous.

19 GPA789 Analyse et conception orientées objet 19 Implantation à laide de C++ (6) –Constructeur de copie (suite) Mais la capacité du constructeur de copie généré par le compilateur est limitée.Mais la capacité du constructeur de copie généré par le compilateur est limitée. Il ne peut que copier les variables membres par leur valeur.Il ne peut que copier les variables membres par leur valeur. Lespace réservé par lallocation dynamique nest pas copié seulement le contenu du pointeur est copié pas le contenu de ladresse pointée !!Lespace réservé par lallocation dynamique nest pas copié seulement le contenu du pointeur est copié pas le contenu de ladresse pointée !! Donc, il est plus prudent de toujours déclarer le constructeur de copie explicitement.Donc, il est plus prudent de toujours déclarer le constructeur de copie explicitement.

20 GPA789 Analyse et conception orientées objet 20 Implantation à laide de C++ (7) –Ajouter explicitement la surcharge de lopérateur == à chacune des classes La plupart des classes de collection au type paramétrisé (liste, vecteur, tableau, etc.) exigent des éléments possédant lopérateur ==.La plupart des classes de collection au type paramétrisé (liste, vecteur, tableau, etc.) exigent des éléments possédant lopérateur ==. Autrement dit, pour pouvoir placer un objet dans une liste, lobjet doit posséder lopérateur ==. Cet opérateur est utilisé par les classes collection dune manière interne.Autrement dit, pour pouvoir placer un objet dans une liste, lobjet doit posséder lopérateur ==. Cet opérateur est utilisé par les classes collection dune manière interne. Puisque les types de base possède déjà cet opérateur (on peut comparer des int, des float, etc.), cette exigence nest pas apparente.Puisque les types de base possède déjà cet opérateur (on peut comparer des int, des float, etc.), cette exigence nest pas apparente.

21 GPA789 Analyse et conception orientées objet 21 Implantation à laide de C++ (8) –Surcharge de lopérateur == (suite) Pour éviter les problèmes de compilation, on doit surcharger systématiquement les classes importantes de notre conception.Pour éviter les problèmes de compilation, on doit surcharger systématiquement les classes importantes de notre conception. class NombreComplexe { public: ::: bool operator ==(const NombreComplexe& c) const { // réaliser la compariason entre lobjet reçu { // réaliser la compariason entre lobjet reçu // c et cet objet // c et cet objet } ::: };

22 GPA789 Analyse et conception orientées objet 22 Implantation à laide de C++ (9) Implanter les fonctions membres dune classe:Implanter les fonctions membres dune classe: 1. Les fonctions membres « get/set » La protection des données consiste à placer les variables membres dans la section protected et private.La protection des données consiste à placer les variables membres dans la section protected et private. Laccès des variables protégées et privées par le monde extérieur (les autres objets du programme) seffectuera à laide des fonctions membres set/get.Laccès des variables protégées et privées par le monde extérieur (les autres objets du programme) seffectuera à laide des fonctions membres set/get.

23 GPA789 Analyse et conception orientées objet 23 Implantation à laide de C++ (10) 2. Les fonctions membres « affaires » Les fonctions membres affaires réalisent le comportement explicite, les tâches à accomplir de lobjet.Les fonctions membres affaires réalisent le comportement explicite, les tâches à accomplir de lobjet. Elles sont normalement accessibles par dautres objets. Donc, elles sont souvent déclarées dans la section publique de la classe. Les fonctions membres affaires sont celles indiquées dans les diagrammes de classes, les diagrammes de collaboration (de séquence).Les fonctions membres affaires sont celles indiquées dans les diagrammes de classes, les diagrammes de collaboration (de séquence).

24 GPA789 Analyse et conception orientées objet 24 Implantation à laide de C++ (11) 3. Les fonctions membres « internes » Les fonctions membres internes aident à la réalisation du comportement de lobjet.Les fonctions membres internes aident à la réalisation du comportement de lobjet. Souvent lalgorithme dune fonction membre est trop complexe à réaliser directement. On distribue la tâche à plusieurs fonctions membres (diviser pour régner).Souvent lalgorithme dune fonction membre est trop complexe à réaliser directement. On distribue la tâche à plusieurs fonctions membres (diviser pour régner). Les fonctions membres internes ne sont pas accessibles à lextérieur de lobjet.Les fonctions membres internes ne sont pas accessibles à lextérieur de lobjet. Elles sont donc déclarées dans la section protégée et/ou privée de la classe.Elles sont donc déclarées dans la section protégée et/ou privée de la classe. Les fonctions membres internes ne sont pas destinées à être utilisées par le monde extérieur.Les fonctions membres internes ne sont pas destinées à être utilisées par le monde extérieur.

25 GPA789 Analyse et conception orientées objet 25 Implantation à laide de C++ (12) Noubliez pas dinclure les classes collection dans limplantation.Noubliez pas dinclure les classes collection dans limplantation. Noubliez pas dinclure les signaux dexception dans limplantation.Noubliez pas dinclure les signaux dexception dans limplantation. –Il faut donc instaurer la gestion des exceptions par try - catch. Réaliser les messages envoyés entre les objets par des appels de fonctions membres de ces objets.Réaliser les messages envoyés entre les objets par des appels de fonctions membres de ces objets. –Utiliser les diagrammes de collaboration et/ou de séquence pour vous guider dans cette tâche.

26 GPA789 Analyse et conception orientées objet 26 Implantation à laide de C++ (13) Réaliser les messages envoyés (suite)Réaliser les messages envoyés (suite) –Remplacer les événements générés par lutilisateur par des messages de linterface graphique. –Autrement dit, lutilisateur communique avec le logiciel via linterface graphique. –Donc, le logiciel nadresse pas directement lutilisateur mais bien son interface graphique. –Si la portabilité du code est important, créer des agents intermédiaires pour isoler le logiciel de linterface graphique.

27 GPA789 Analyse et conception orientées objet 27 Implantation à laide de C++ (14) Utiliser les diagrammes détats pour aider à la programmation et à la validation du logiciel.Utiliser les diagrammes détats pour aider à la programmation et à la validation du logiciel. –Les diagrammes détats indiquent le déroulement logique du logiciel en fonction des événements générés (en provenance de linterface graphique et des objets). –Ces diagrammes donnent les grandes étapes du logiciel.

28 GPA789 Analyse et conception orientées objet 28 Modèles de conception (1) Application des patrons de conception.Application des patrons de conception. –Des éléments de conception préfabriqués. –Applicable dans des situations générales. –Ce concept existe dans toutes les disciplines de lingénierie: Redresseur double alternance Circuit à deux vitesses

29 GPA789 Analyse et conception orientées objet 29 Modèles de conception (2) –Patrons de conception facilitent la réutilisation. –Ils rendent lapplication plus robuste. –Réduisent le temps de conception. Lidentification des patrons de conception:Lidentification des patrons de conception: –Le nom du patron –Le contexte dapplication –La solution apportée –Le diagramme explicatif

30 GPA789 Analyse et conception orientées objet 30 Modèles de conception (3) Patron « ÉTAT »Patron « ÉTAT » Situation:Situation: –Le comportement dun objet est dépendant de son état. L application de la logique conditionnelle (les if - then - else) est trop complexe ou nest pas désirable. Solution:Solution: –Créer une classe (objet-état) pour chaque état qui influence le comportement de lobjet (objet- contexte).

31 GPA789 Analyse et conception orientées objet 31 Modèles de conception (4) Patron « ÉTAT »Patron « ÉTAT » Solution (suite):Solution (suite): –Utiliser le polymorphisme et assigner les méthodes à chacun des objets-états pour gérer le comportement de l objet-contexte. –Lorsque l objet-contexte reçoit un message qui change son état, le transmettre aux objets-états.

32 GPA789 Analyse et conception orientées objet 32 Modèles de conception (5) Patron « ÉTAT »Patron « ÉTAT » Diagramme:Diagramme:

33 GPA789 Analyse et conception orientées objet 33 Modèles de conception (6) Patron « ÉTAT »Patron « ÉTAT » Exemple:Exemple:

34 GPA789 Analyse et conception orientées objet 34 Modèles de conception (7) Patron « FAÇADE »Patron « FAÇADE » Situation:Situation: –Un système existant possède une interface qui est complète et complexe. Nous désirons utiliser uniquement un sous-ensemble des capacités linterface. Ou encore, nous désirons lutiliser dune façon particulière. Solution:Solution: –Créer une classe qui possède linterface requise. –Fait en sorte que l interface de la classe utilise les fonctionnalités désirées du système existant.

35 GPA789 Analyse et conception orientées objet 35 Modèles de conception (8) Patron « FAÇADE »Patron « FAÇADE » Diagramme:Diagramme:

36 GPA789 Analyse et conception orientées objet 36 Modèles de conception (9) Patron « ADAPTEUR »Patron « ADAPTEUR » Situation:Situation: –Une classe cible contient les bonnes données et le bon comportement. Cependant, elle dispose dune interface incompatible ou inconvénient à utiliser. Solution:Solution: –Créer une classe adapteur. –Envelopper linterface de la classe cible par celle de la classe adapteur.

37 GPA789 Analyse et conception orientées objet 37 Modèles de conception (10) Patron « ADAPTEUR »Patron « ADAPTEUR » Diagramme:Diagramme: Exemple:Exemple:

38 GPA789 Analyse et conception orientées objet 38 Modèles de conception (11) Patron « PONT »Patron « PONT » Situation:Situation: –Il est nécessaire de séparer le model de son implantation. Permettre lévolution indépendante de ces deux facettes. En dautres mots, découpler l ensemble des objets dimplantation de lensemble des objets qui les utilisent. Solution:Solution: –Créer deux hiérarchies de classes. –Une hiérarchie représente le modèle et le raffinement du modèle.

39 GPA789 Analyse et conception orientées objet 39 Modèles de conception (12) Patron « PONT »Patron « PONT » Solution (suite):Solution (suite): –Lautre hiérarchie représente limplantation du modèle et de son raffinement. –Joindre les deux hiérarchies par la composition ou lagrégation.

40 GPA789 Analyse et conception orientées objet 40 Modèles de conception (13) Patron « PONT »Patron « PONT » Diagramme:Diagramme:

41 GPA789 Analyse et conception orientées objet 41 Modèles de conception (14) Patron « PONT »Patron « PONT » Exemple:Exemple:

42 GPA789 Analyse et conception orientées objet 42 Modèles de conception (15) Patron « MANUFACTURE ABSTRAITE »Patron « MANUFACTURE ABSTRAITE » Situation:Situation: –Un ensemble ou une famille dobjets sont à créer. On ne veut pas utiliser la construction switch - case pour réaliser cette tâche. –Une longue liste de switch - case nest pas très orientée objet et la logique de création des objets (paramètres initiaux, dépendance, etc.) est difficile à maintenir et à modifier.

43 GPA789 Analyse et conception orientées objet 43 Modèles de conception (16) Patron « MANUFACTURE ABSTRAITE »Patron « MANUFACTURE ABSTRAITE » Solution:Solution: –Créer une classe manufacture par famille dobjets à créer. Donc, autant de manufactures que de familles dobjets. –Doter la classe manufacture la logique et linterface nécessaire pour créer les objets de la même famille. –Le client crée les objets désirés par lintermédiaire des classes manufactures. –Le client ne doit créer les objets désirés directement.

44 GPA789 Analyse et conception orientées objet 44 Modèles de conception (17) Patron « MANUFACTURE ABSTRAITE »Patron « MANUFACTURE ABSTRAITE » Diagramme:Diagramme:

45 GPA789 Analyse et conception orientées objet 45 Modèles de conception (18) Patron « SINGLETON »Patron « SINGLETON » Situation:Situation: –La classe ClasseA na quune seule instance. –On ne permet pas linstanciation de plus dun objet de ClasseA. –On veut un mécanisme automatique qui force les programmeurs à ne créer quune seule instance de ce type.

46 GPA789 Analyse et conception orientées objet 46 Modèles de conception (19) Patron « SINGLETON »Patron « SINGLETON » Solution:Solution: class Editeur { private: static Editeur *Instance; Editeur() { } public: static Editeur *getInstanceEditeur() { return (Instance==0)?new Editeur : Instance; } };

47 GPA789 Analyse et conception orientées objet 47 Modèles de conception (20) Patron « SINGLETON »Patron « SINGLETON » Solution:Solution: –Pour utiliser la classe Editeur ainsi conçue: Régler la valeur initiale de Editeur::Instance à zéro au début du programme ou dans un fichier.hRégler la valeur initiale de Editeur::Instance à zéro au début du programme ou dans un fichier.h Editeur *Editeur::Instance = 0; Obtenir une instance de Editeur parObtenir une instance de Editeur par Editeur *ed1 = Editeur::getInstanceEditeur(); Editeur *ed2 = Editeur::getInstanceEditeur(); À de la structure de la classe (singleton), ed1 est identique à ed2. On ne peut pas créer une instance de Editeur parOn ne peut pas créer une instance de Editeur par Editeur *mauvais1 = new Editeur; Editeur mauvais2;

48 GPA789 Analyse et conception orientées objet 48 Modèles de conception (21) Patron « OBSERVATEUR »Patron « OBSERVATEUR » Situation:Situation: –Un événement survient et nous devons notifier un ensemble dobjets de larrivée de cet événement. Solution: –Créer une classe Distributeur qui est au courant des événements dans le système. –Chaque objet désireux de recevoir la notification des événements reçus doit senregistrer auprès de Distributeur. Les objets qui reçoivent la notification des événements sont des observateurs.

49 GPA789 Analyse et conception orientées objet 49 Modèles de conception (22) Patron « OBSERVATEUR »Patron « OBSERVATEUR » DiagrammeDiagramme:

50 GPA789 Analyse et conception orientées objet 50 Modèles de conception (23) Patron « OBSERVATEUR »Patron « OBSERVATEUR » Situation:Situation: –Un événement survient et nous devons notifier un ensemble dobjets de larrivée de cet événement. Solution: –Créer une classe Distributeur qui est au courant des événements dans le système. –Chaque objet désireux de recevoir la notification des événements reçus doit senregistrer auprès de Distributeur. Les objets qui reçoivent la notification des événements sont des observateurs.

51 GPA789 Analyse et conception orientées objet 51 Modèles de conception (24) Patron « DÉCORATEUR »Patron « DÉCORATEUR » Situation: –Un objet dispose dun nombre de fonctions. Il est souhaité de pouvoir ajouter de nouvelles fonctionnalités à lobjet et ce, dynamiquement pendant lexécution du programme. Solution:Solution: –Créer une classe abstraite qui représente à la fois la classe originale et les nouvelles fonctions à ajouter.

52 GPA789 Analyse et conception orientées objet 52 Modèles de conception (25) Patron « DÉCORATEUR »Patron « DÉCORATEUR » Solution (suite):Solution (suite): –La classe originale (celle où lon désire ajouter de nouvelles fonctionnalités) est appelée la composante abstraite. –Les classes renfermant les nouvelles fonctions sont appelées les décorateurs. –Instancier les objets appropriés à partir de la composante abstraite.

53 GPA789 Analyse et conception orientées objet 53 Modèles de conception (26) Patron « DÉCORATEUR »Patron « DÉCORATEUR » Diagramme:Diagramme:

54 GPA789 Analyse et conception orientées objet 54 Modèles de conception (27) Patron « DÉCORATEUR »Patron « DÉCORATEUR » Exemple:Exemple:

55 GPA789 Analyse et conception orientées objet 55 Modèles de conception (28) Patron « DÉCORATEUR »Patron « DÉCORATEUR » Ainsi,Ainsi, Entête::ImprimeBillet() Imprime len-tête puis exécute Décorateur::ImprimeBillet(). PiedPage::ImprimeBillet() Exécute Décorateur::ImprimeBillet() puis imprime le pied de page. Décorateur::ImprimeBillet() exécute comp->ImprimeBillet() si comp existe.

56 GPA789 Analyse et conception orientées objet 56 Modèles de conception (29) Patron « DÉCORATEUR »Patron « DÉCORATEUR » Exemple:Exemple: Composante *c = new Entete(new PiedPage(new Billet()));

57 GPA789 Analyse et conception orientées objet 57 Modèles de conception (30) Patron « DÉCORATEUR »Patron « DÉCORATEUR » –En exécutant c-> ImprimeBillet() :

58 GPA789 Analyse et conception orientées objet 58 Modèles de conception (31).// La classe Composante abstraite nest pas montrée.//.// Classe Composante concrète.class Billet : public Composante {.public:.void ImprimeBillet() { // imprimer le billet }.};..// Classe Décorateur abstrait.class Decorateur : public Composante {.private:.Composante *comp;.public:.Decorateur(Composante *c) { comp = c; }.virtual void ImprimeBillet() {.if (comp != 0).comp->ImprimeBillet();.}.};

59 GPA789 Analyse et conception orientées objet 59 // Classe Entete est un décorateur concret.class Entete : public Decorateur {.private:.void ImprimeEntete() { // Imprime le texte de lentête }.public:.void ImprimeBillet() {.// 1) Imprimer Entete.ImprimeEntete();.// 2) Imprimer le billet.Decorateur::ImprimeBillet();.}.};. Modèles de conception (32)

60 GPA789 Analyse et conception orientées objet 60.// Classe PiedPage est un décorateur concret.class PiedPage : public Decorateur {.private:.void ImprimePiedPage() { // Imprime le texte pied de page }.public:.void ImprimeBillet() {.// 1) Imprimer le billet.Decorateur::ImprimeBillet();.// 2) Imprimer le pied de page ici.ImprimePiedPage();..}.};. Modèles de conception (33)

61 GPA789 Analyse et conception orientées objet 61.// Voici comment on peut utiliser la composante concrète.Composante *c;.c = new Entete( new PiedPage( new Billet())); // Wow !!.c->ImprimeBillet(); Modèles de conception (34)

62 GPA789 Analyse et conception orientées objet 62 Fin du chapitre 9 Étudier les patrons de conception présentés.Étudier les patrons de conception présentés. Relever les activités nécessaires à la création du modèle de conception.Relever les activités nécessaires à la création du modèle de conception. Appliquer les remarques concernant la phase dimplantation.Appliquer les remarques concernant la phase dimplantation. Noubliez pas: C++ est bien plus que du C.


Télécharger ppt "GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 9 Conception orientée objet et implantation."

Présentations similaires


Annonces Google