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

62
1 GPA789 Analyse et conception orientées obj GPA789 Analyse et conception orientées obj GPA789 Analyse et GPA789 Analyse et conception orientées objet conception orientées objet Professeur: Tony Wong, Ph.D., ing. Professeur: Tony Wong, Ph.D., ing. Chapitre 9 Chapitre 9 Conception orientée objet et Conception orientée objet et implantation implantation U n ive rsité du Q uébec É co le d e te c h n o lo g ie s u p érieu re D épa rtem en t d e nie d e la p ro d u ctio n a u tom atisée

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

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

1

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

GPA789 Analyse et conception GPA789 Analyse et conception orientées objetorientées objet

Professeur: Tony Wong, Ph.D., ing.Professeur: Tony Wong, Ph.D., ing.

Chapitre 9Chapitre 9

Conception orientée objet et implantationConception orientée objet et implantation

Université du Québec

École de technologie supérieureDépartem ent de génie de la production autom atisée

Page 2: 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 objetGPA789 Analyse et conception orientées objet

Conception orientée objet (1)Conception orientée objet (1)

• L’objectif principal de la conception orientée L’objectif principal de la conception orientée

objet est de déterminer le « objet est de déterminer le « comment fairecomment faire ». ».

• La conception orientée objet consiste à La conception orientée objet consiste à

apporter une solution informatique aux apporter une solution informatique aux

questions et problèmes dégagés lors de questions et problèmes dégagés lors de

l’analyse orientée objet.l’analyse orientée objet.

• Il faut donc penser en termes de solutions Il faut donc penser en termes de solutions

informatiques et de leurs implantations.informatiques et de leurs implantations.

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

3

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Conception orientée objet (2)Conception orientée objet (2)

• La conception orientée objet, tout comme La conception orientée objet, tout comme

l’analyse orientée objet, n’est pas un travail l’analyse orientée objet, n’est pas un travail

algorithmique.algorithmique.

• Cependant, il existe un ensemble d’activités Cependant, il existe un ensemble d’activités

reliées à la conception qui peuvent nous reliées à la conception qui peuvent nous

guider dans le travail. Attention! La liste des guider dans le travail. Attention! La liste des

activités présentées ici ne sont pas données activités présentées ici ne sont pas données

en ordre. De plus, certaines activités peuvent en ordre. De plus, certaines activités peuvent

être réalisées en parallèle.être réalisées en parallèle.

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

4

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Conception orientée objet (3)Conception orientée objet (3)

– Expliciter la séquence des événements dans Expliciter la séquence des événements dans

les diagrammes d’interactions.les diagrammes d’interactions.

b: Bi

f: Fi

: ListeBtn

: Panneau

a: Ascenseur

c: Contrôleur

: Statut

c1.1: Arrêt()

c2: Arrêt()

c1.3: ChangerStatut()

c1.2: Parcoure()

c3: Arrêt()

c5: Offline()

c4: Offline()

h: Horloge

c1.4: Arrêt()

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

5

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Conception orientée objet (4)Conception orientée objet (4)

– Ajouter les messages reliés à la création et à Ajouter les messages reliés à la création et à

la destruction des objets dans les la destruction des objets dans les

diagrammes d’interaction.diagrammes d’interaction.

– Ajouter la direction de navigation aux Ajouter la direction de navigation aux

relations entre les classes.relations entre les classes.

– Ajouter les relations de dépendance dans les Ajouter les relations de dépendance dans les

diagrammes de classesdiagrammes de classes

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

6

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Conception orientée objet (5)Conception orientée objet (5)

– Identification des attributs et opérations Identification des attributs et opérations

manquantes.manquantes.• Ajouter les variables membres et les fonctions Ajouter les variables membres et les fonctions

membres nécessaires aux algorithmes à implanter.membres nécessaires aux algorithmes à implanter.

– Identification des classes collection.Identification des classes collection.• Ajouter des classes collection (liste, vecteur, etc.) Ajouter des classes collection (liste, vecteur, etc.)

pour tenir compte de la multiplicité des objets.pour tenir compte de la multiplicité des objets.

• Utiliser des classes paramétrisées pour entreposer Utiliser des classes paramétrisées pour entreposer

des objets de type quelconque.des objets de type quelconque.

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

7

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Conception orientée objet (6)Conception orientée objet (6)

– Spécification des types et visibilité.Spécification des types et visibilité.• Spécifier les types concrets (selon le langage de Spécifier les types concrets (selon le langage de

programmation à utiliser).programmation à utiliser).• Déterminer le niveau d’accès des variables Déterminer le niveau d’accès des variables

membres et des fonctions membres (membres et des fonctions membres (publicpublic, , protectedprotected, , privateprivate).).

– Spécification des contraintes.Spécification des contraintes.

• Indiquer les contraintes sur les valeurs des Indiquer les contraintes sur les valeurs des variables membres.variables membres.

– Les valeurs limites, leur quantité, etc.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.Leur pré-condition et leur post-condition.

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

8

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Conception orientée objet (7)Conception orientée objet (7)

– Établir les algorithmes.Établir les algorithmes.• Pour chacune des fonctions membres importantes:Pour chacune des fonctions membres importantes:

– Écrire l’algorithme en pseudo-code en respectant sa pré-Écrire l’algorithme en pseudo-code en respectant sa pré-condition et sa post-condition.condition et sa post-condition.

– Assurer le respect des contraintes appliquées aux Assurer le respect des contraintes appliquées aux variables membres.variables membres.

– Souvent les algorithmes à appliqués sont suggérer dans le Souvent les algorithmes à appliqués sont suggérer dans le contrat des opérations (créé lors de l’analyse orientée contrat des opérations (créé lors de l’analyse orientée objet).objet).

– Le pseudo-code est traduit en instructions de Le pseudo-code est traduit en instructions de programmation lors de l’implantation du logiciel.programmation lors de l’implantation du logiciel.

– L’objectif principal de cette activité est de rendre L’objectif principal de cette activité est de rendre compréhensible l’algorithme à implanter aux compréhensible l’algorithme à implanter aux programmeurs.programmeurs.

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

9

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Conception orientée objet (8)Conception orientée objet (8)

– Spécification des exceptionsSpécification des exceptions• Souvent les exceptions sont générées par la Souvent les exceptions sont générées par la

violationviolation::

– Des pré-conditions de fonctions membres.Des pré-conditions de fonctions membres.

– Des valeurs limites ou quantité de variables membres.Des valeurs limites ou quantité de variables membres.

– On indiquera la possibilité d’exception par une relation On indiquera la possibilité d’exception par une relation de dépendancede dépendance

Classe

<<exception>>DivParZero

E xp lica tion de lasign ifica tion de

l'exception

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

10

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Conception orientée objet (9)Conception orientée objet (9)

– Spécifier les éléments de l’interface graphiqueSpécifier les éléments de l’interface graphique• Il faut établir un modèle d’utilisation du logicielIl faut établir un modèle d’utilisation du logiciel

– Comment présenter à l’utilisateur les actions disponibles ?Comment présenter à l’utilisateur les actions disponibles ?

– Comment indiquer le chemin logique pour accomplir une Comment indiquer le chemin logique pour accomplir une tâche ?tâche ?

– Comment l’utilisateur peut-il enclencher une action ?Comment l’utilisateur peut-il enclencher une action ?

– Comment indiquer la progression d’une action enclenchée Comment indiquer la progression d’une action enclenchée ??

– Comment l’utilisateur peut-il arrêter prématurément Comment l’utilisateur peut-il arrêter prématurément l’action enclencher ?l’action enclencher ?

– Comment signaler la fin d’une action à l’utilisateur ?Comment signaler la fin d’une action à l’utilisateur ?

• Le modèle d’utilisation doit viser la simplicité.Le modèle d’utilisation doit viser la simplicité.

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

11

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Conception orientée objet (10)Conception orientée objet (10)

– Identification et ajustement des bibliothèquesIdentification et ajustement des bibliothèques• Choisir les bibliothèques nécessaires à l’implantation du Choisir les bibliothèques nécessaires à l’implantation du

logiciel (i.e. C++ standard Library, STL, Tools.h++, etc.).logiciel (i.e. C++ standard Library, STL, Tools.h++, etc.).• Décider s’il faut étendre les classes de ces bibliothèques.Décider s’il faut étendre les classes de ces bibliothèques.

– Exemple: Création d’une sous-classe spécialisée Exemple: Création d’une sous-classe spécialisée MatriceMatrice dérivée dérivée de de vectorvector pour faciliter le calcul matriciel. pour faciliter le calcul matriciel.

– Identification et ajustement du cadre de travailIdentification et ajustement du cadre de travail• Choisir le cadre de travail nécessaire à l’implantation du Choisir le cadre de travail nécessaire à l’implantation du

logiciel (i.e. MFC, Visual Component, Fox Toolkit, etc.).logiciel (i.e. MFC, Visual Component, Fox Toolkit, etc.).• Décider s’il faut étendre les classes du cadre de travail.Décider s’il faut étendre les classes du cadre de travail.

– Exemple: Création d’une nouvelle sous-classes Exemple: Création d’une nouvelle sous-classes CGraphViewCGraphView dérivée de dérivée de CViewCView de MFC pour faciliter l’affichage des courbes. de MFC pour faciliter l’affichage des courbes.

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

12

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Conception orientée objet (11)Conception orientée objet (11)

– Réalisation des associationsRéalisation des associations• Le concept d’association n’existe pas dans les Le concept d’association n’existe pas dans les

langages de programmation orientée objet.langages de programmation orientée objet.• En C++ on doit utiliser les variables membres En C++ on doit utiliser les variables membres

pour réaliser une association.pour réaliser une association.• Cas unidirectionnelCas unidirectionnel

A B

A

UnobjB : B

B

U ML

Im plantation

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

13

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Conception orientée objet (12)Conception orientée objet (12)

• Cas bidirectionnelCas bidirectionnel

– Consulter le chapitre 6 pour connaître la Consulter le chapitre 6 pour connaître la réalisation des relations (association, réalisation des relations (association, agrégation, composition, etc.) en C++.agrégation, composition, etc.) en C++.

A B

A

UnobjB : B

B

UML

Imp lantation

UnobjA : B

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

14

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (1)Implantation à l’aide 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 Écriture de la définition des classes diagrammes diagrammes des classes dégagées de la des classes dégagées de la conceptionconception..

• Écriture de la définition des méthodes (fonctions Écriture de la définition des méthodes (fonctions membres) membres) contrats d’opération, diagrammes de contrats d’opération, diagrammes de collaboration ou de séquence dégagées de la collaboration ou de séquence dégagées de la conceptionconception..

• Il faut ajouter les constructeurs et le destructeur Il faut ajouter les constructeurs et le destructeur aux classes !!aux classes !!

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

15

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (2)Implantation à l’aide de C++ (2)

• Déterminer le nombre de constructeurs d’une Déterminer le nombre de constructeurs d’une classe selon les critères suivants:classe selon les critères suivants:– Énumérer les différentes façons un objet d’une Énumérer les différentes façons un objet d’une

classe peut être créé.classe peut être créé.• Ex: La création d’un objet de type Ex: La création d’un objet de type NombreComplexeNombreComplexe peut peut

être réalisée de trois manières différentes:être réalisée de trois manières différentes:1. On spécifie la partie réelle et la partie imaginaire1. On spécifie la partie réelle et la partie imaginaire

2. On spécifie la partie réelle seulement2. On spécifie la partie réelle seulement

3. On spécifie la partie imaginaire seulement3. On spécifie la partie imaginaire seulement

• On peut donner deux constructeurs pour tenir compte On peut donner deux constructeurs pour tenir compte de ces situations de création:de ces situations de création:– NombreComplexe(float rel,float imag=0)NombreComplexe(float rel,float imag=0) Cas 1, 2. Cas 1, 2.– NombreComplexe(float imag)NombreComplexe(float imag) Cas 3. Cas 3.

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

16

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (3)Implantation à l’aide de C++ (3)

– Ajouter explicitement un constructeur par défaut Ajouter explicitement un constructeur par défaut à chacune des classesà chacune des classes• Un constructeur par défaut est celui qui n’accepte pas Un constructeur par défaut est celui qui n’accepte pas

de paramètre ou tous les paramètres possèdent une de paramètre ou tous les paramètres possèdent une valeur par défaut.valeur par défaut.

• Ex: Ex: NombreCompexe();NombreCompexe(); ou ou NombreComplexe(float NombreComplexe(float rel=0, float imag=0);rel=0, float imag=0);

• Il est utilisé dans la situation suivante:Il est utilisé dans la situation suivante:NombreComplexe cmplx;NombreComplexe cmplx;

• Si ce constructeur n’est pas défini explicitement dans le Si ce constructeur n’est pas défini explicitement dans le code, le compilateur va en générer un pour nous.code, le compilateur va en générer un pour nous.

• Mais le constructeur par défaut généré par le Mais le constructeur par défaut généré par le compilateur ne fait rien !!! Donc, soyez prudent.compilateur ne fait rien !!! Donc, soyez prudent.

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

17

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (4)Implantation à l’aide de C++ (4)

– Constructeur par défaut (suite)Constructeur par défaut (suite)• Si on veut empêcher la création d’un objet par son Si on veut empêcher la création d’un objet par son

constructeur par défaut constructeur par défaut le définir dans la section le définir dans la section privée de la déclaration.privée de la déclaration.:: :: ::

private:private:

NombreComplexe() { }NombreComplexe() { }

:: :: ::

};};

• De cette façon, l’utilisation accidentelle du De cette façon, l’utilisation accidentelle du constructeur par défaut produira une erreur de constructeur par défaut produira une erreur de compilation.compilation.

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

18

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (5)Implantation à l’aide de C++ (5)

– Ajouter explicitement un constructeur de Ajouter explicitement un constructeur de copie à chacune des classescopie à chacune des classes• Un constructeur de copie est celui qui accepte une Un constructeur de copie est celui qui accepte une

référence à la classe elle-même.référence à la classe elle-même.• Ex: Ex: NombreCompexe(const NombreComplexe& c);NombreCompexe(const NombreComplexe& c);• Il est utilisé dans les situations suivantes:Il est utilisé dans les situations suivantes:

NombreComplexe cmplx; // constructeur par défautNombreComplexe cmplx; // constructeur par défaut

NombreComplexe cmplx2 = cmplx; // de copieNombreComplexe cmplx2 = cmplx; // de copie

NombreComplexe cmplx3(cmplx); // de copieNombreComplexe cmplx3(cmplx); // de copie

• Si ce constructeur n’est pas défini explicitement Si ce constructeur n’est pas défini explicitement dans le code, le compilateur va en générer un dans le code, le compilateur va en générer un pour nous.pour nous.

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

19

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (6)Implantation à l’aide de C++ (6)

– Constructeur de copie (suite)Constructeur de copie (suite)• Mais la capacité du constructeur de copie généré Mais la capacité du constructeur de copie généré

par le compilateur est limitée.par le compilateur est limitée.• Il ne peut que copier les variables membres par Il ne peut que copier les variables membres par

leur valeur.leur valeur.• L’espace réservé par l’allocation dynamique n’est L’espace réservé par l’allocation dynamique n’est

pas copié pas copié seulement le contenu du pointeur est seulement le contenu du pointeur est copié pas le contenu de l’adresse pointée !!copié pas le contenu de l’adresse pointée !!

• Donc, il est plus prudent de toujours déclarer le Donc, il est plus prudent de toujours déclarer le constructeur de copie explicitement.constructeur de copie explicitement.

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

20

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (7)Implantation à l’aide de C++ (7)

– Ajouter explicitement la surcharge de Ajouter explicitement la surcharge de l’opérateur == à chacune des classesl’opérateur == à chacune des classes

• La plupart des classes de collection au type La plupart des classes de collection au type paramétrisé (liste, vecteur, tableau, etc.) exigent paramétrisé (liste, vecteur, tableau, etc.) exigent des éléments possédant l’opérateur ==.des éléments possédant l’opérateur ==.

• Autrement dit, pour pouvoir placer un objet dans Autrement dit, pour pouvoir placer un objet dans une liste, l’objet doit posséder l’opérateur ==. Cet une liste, l’objet doit posséder l’opérateur ==. Cet opérateur est utilisé par les classes collection opérateur est utilisé par les classes collection d’une manière interne.d’une manière interne.

• Puisque les types de base possède déjà cet Puisque les types de base possède déjà cet opérateur (on peut comparer des int, des float, opérateur (on peut comparer des int, des float, etc.), cette exigence n’est pas apparente.etc.), cette exigence n’est pas apparente.

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

21

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (8)Implantation à l’aide de C++ (8)– Surcharge de l’opérateur == (suite)Surcharge de l’opérateur == (suite)

• Pour éviter les problèmes de compilation, on doit Pour éviter les problèmes de compilation, on doit surcharger systématiquement les classes surcharger systématiquement les classes importantes de notre conception.importantes de notre conception.

class NombreComplexe {class NombreComplexe {

public:public:

:: :: ::

bool operator ==(const NombreComplexe& c) constbool operator ==(const NombreComplexe& c) const

{ // réaliser la compariason entre l’objet reçu{ // réaliser la compariason entre l’objet reçu

// c et cet objet// c et cet objet

}}

:: :: ::

};};

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

22

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (9)Implantation à l’aide de C++ (9)

• Implanter les fonctions membres d’une Implanter les fonctions membres d’une classe:classe:1. Les fonctions membres « get/set »1. Les fonctions membres « get/set »

• La protection des données consiste à placer les La protection des données consiste à placer les variables membres dans la section variables membres dans la section protectedprotected et et privateprivate..

• L’accès des variables protégées et privées par le L’accès des variables protégées et privées par le monde extérieur (les autres objets du programme) monde extérieur (les autres objets du programme) s’effectuera à l’aide des fonctions membres s’effectuera à l’aide des fonctions membres set/get.set/get.

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

23

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (10)Implantation à l’aide de C++ (10)

2. Les fonctions membres « affaires »2. Les fonctions membres « affaires »• Les fonctions membres affaires réalisent le Les fonctions membres affaires réalisent le

comportement explicite, les tâches à accomplir de comportement explicite, les tâches à accomplir de l’objet.l’objet.

Elles sont normalement accessibles par d’autres Elles sont normalement accessibles par d’autres objets. Donc, elles sont souvent déclarées dans la objets. Donc, elles sont souvent déclarées dans la section publique de la classe.section publique de la classe.

• Les fonctions membres affaires sont celles Les fonctions membres affaires sont celles indiquées dans les diagrammes de classes, les indiquées dans les diagrammes de classes, les diagrammes de collaboration (de séquence).diagrammes de collaboration (de séquence).

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

24

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (11)Implantation à l’aide de C++ (11)

3. Les fonctions membres « internes »3. Les fonctions membres « internes »• Les fonctions membres internes aident à la réalisation Les fonctions membres internes aident à la réalisation

du comportement de l’objet.du comportement de l’objet.• Souvent l’algorithme d’une fonction membre est trop Souvent l’algorithme d’une fonction membre est trop

complexe à réaliser directement. On distribue la tâche complexe à réaliser directement. On distribue la tâche à plusieurs fonctions membres (diviser pour régner).à plusieurs fonctions membres (diviser pour régner).

• Les fonctions membres internes ne sont pas Les fonctions membres internes ne sont pas accessibles à l’extérieur de l’objet.accessibles à l’extérieur de l’objet.

• Elles sont donc déclarées dans la section protégée Elles sont donc déclarées dans la section protégée et/ou privée de la classe.et/ou privée de la classe.

• Les fonctions membres internes ne sont pas destinées Les fonctions membres internes ne sont pas destinées à être utilisées par le monde extérieur.à être utilisées par le monde extérieur.

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

25

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (12)Implantation à l’aide de C++ (12)

• N’oubliez pas d’inclure les classes collection N’oubliez pas d’inclure les classes collection dans l’implantation.dans l’implantation.

• N’oubliez pas d’inclure les signaux d’exception N’oubliez pas d’inclure les signaux d’exception dans l’implantation.dans l’implantation.– Il faut donc instaurer la gestion des exceptions Il faut donc instaurer la gestion des exceptions

par par trytry - - catchcatch..• Réaliser les messages envoyés entre les objets Réaliser les messages envoyés entre les objets

par des appels de fonctions membres de ces par des appels de fonctions membres de ces objets.objets.

– Utiliser les diagrammes de collaboration et/ou de Utiliser les diagrammes de collaboration et/ou de séquence pour vous guider dans cette tâche. séquence pour vous guider dans cette tâche.

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

26

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (13)Implantation à l’aide 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 Remplacer les événements générés par

l’utilisateur par des messages de l’interface l’utilisateur par des messages de l’interface graphique.graphique.

– Autrement dit, l’utilisateur communique avec le Autrement dit, l’utilisateur communique avec le logiciel via l’interface graphique.logiciel via l’interface graphique.

– Donc, le logiciel n’adresse pas directement Donc, le logiciel n’adresse pas directement l’utilisateur mais bien son interface graphique.l’utilisateur mais bien son interface graphique.

– Si la portabilité du code est important, créer des Si la portabilité du code est important, créer des agents intermédiaires pour isoler le logiciel de agents intermédiaires pour isoler le logiciel de l’interface graphique.l’interface graphique.

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

27

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Implantation à l’aide de C++ (14)Implantation à l’aide de C++ (14)

• Utiliser les diagrammes d’états pour aider à Utiliser les diagrammes d’états pour aider à la programmation et à la validation du la programmation et à la validation du logiciel.logiciel.– Les diagrammes d’états indiquent le Les diagrammes d’états indiquent le

déroulement logique du logiciel en fonction déroulement logique du logiciel en fonction des événements générés (en provenance de des événements générés (en provenance de l’interface graphique et des objets).l’interface graphique et des objets).

– Ces diagrammes donnent les Ces diagrammes donnent les grandes étapesgrandes étapes du logiciel.du logiciel.

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

28

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (1)Modèles de conception (1)• Application des patrons de conception.Application des patrons de conception.

– Des éléments de conception préfabriqués.Des éléments de conception préfabriqués.– Applicable dans des situations générales.Applicable dans des situations générales.– Ce concept existe dans toutes les disciplines Ce concept existe dans toutes les disciplines

de l’ingénierie: de l’ingénierie:

Redresseur double alternanceRedresseur double alternance

Circuit à deux Circuit à deux vitessesvitesses

+

-

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

29

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (2)Modèles de conception (2)– Patrons de conception facilitent la Patrons de conception facilitent la

réutilisation. réutilisation. – Ils rendent l’application plus robuste.Ils rendent l’application plus robuste.– Réduisent le temps de conception.Réduisent le temps de conception.

• L’identification des patrons de conception:L’identification des patrons de conception:– Le nom du patronLe nom du patron– Le contexte d’applicationLe contexte d’application– La solution apportéeLa solution apportée– Le diagramme explicatifLe diagramme explicatif

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

30

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (3)Modèles de conception (3)• Patron « ÉTAT » Patron « ÉTAT » • Situation:Situation:

– Le comportement d’un objet est dépendant Le comportement d’un objet est dépendant de son état. L ’application de la logique de son état. L ’application de la logique conditionnelle (les if - then - else) est trop conditionnelle (les if - then - else) est trop complexe ou n’est pas désirable.complexe ou n’est pas désirable.

• Solution:Solution:– Créer une classe (objet-état) pour chaque Créer une classe (objet-état) pour chaque

état qui influence le comportement de l’objet état qui influence le comportement de l’objet (objet-contexte).(objet-contexte).

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

31

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (4)Modèles de conception (4)• Patron « ÉTAT » Patron « ÉTAT » • Solution (suite):Solution (suite):

– Utiliser le polymorphisme et assigner les Utiliser le polymorphisme et assigner les méthodes à chacun des objets-états pour méthodes à chacun des objets-états pour gérer le comportement de l ’objet-contexte.gérer le comportement de l ’objet-contexte.

– Lorsque l ’objet-contexte reçoit un message Lorsque l ’objet-contexte reçoit un message qui change son état, le transmettre aux qui change son état, le transmettre aux objets-états.objets-états.

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

32

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (5)Modèles de conception (5)• Patron « ÉTAT » Patron « ÉTAT » • Diagramme:Diagramme: Contexte

Requête()

Etat

Gérer()

ComportementEtatA

Gérer()

ComportementEtatB

Gérer()

:Contexte1: Requê te

:ComportementEtatA

2.1: [eta t=eta tA] G érerEtatA

:ComportementEtatB

2.2: [eta t=eta tB] G érerEtatB

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

33

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (6)Modèles de conception (6)• Patron « ÉTAT » Patron « ÉTAT » • Exemple:Exemple:

ConnexionTCP

Ouvrir()Fermer(): : :

EtatTCP

Ouvrir()Fermer(): : :

TCPEtabli

Ouvrir()Fermer(): : :

TCPEcoute

Ouvrir()Fermer(): : :

TCPFermé

Ouvrir()Fermer(): : :

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

34

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (7)Modèles de conception (7)• Patron « FAÇADE » Patron « FAÇADE » • Situation:Situation:

– Un système existant possède une interface qui Un système existant possède une interface qui est complète et complexe. Nous désirons utiliser est complète et complexe. Nous désirons utiliser uniquement un sous-ensemble des capacités uniquement un sous-ensemble des capacités l’interface. Ou encore, nous désirons l’utiliser l’interface. Ou encore, nous désirons l’utiliser d’une façon particulière.d’une façon particulière.

• Solution:Solution:– Créer une classe qui possède l’interface requise.Créer une classe qui possède l’interface requise.– Fait en sorte que l ’interface de la classe utilise Fait en sorte que l ’interface de la classe utilise

les fonctionnalités désirées du système existant.les fonctionnalités désirées du système existant.

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

35

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (8)Modèles de conception (8)• Patron « FAÇADE » Patron « FAÇADE » • Diagramme:Diagramme:

G estio nnaire d el'anté-m ém o ire

P ilo te d u systèm ed e fi chiersP ilo te d e

l'interface réseauA utres p ilo tes dem atériels d 'E / S

M o niteur(Sécurité)

G estio nnaired es p ro cessus

L P C

G estio nnaired e la

m ém o irev irtuelle

G estio nnaireG U I

P ilo tes d esco m p o santsgrap hiques

M icro -no yau m o d ifi é

H A L

M atériel d e l'o rd inateur

W indows N T E x ecutive M o d e d 'ex écutio n no yau

M o d e d 'ex écu tio n utilisateur

Interface d es serv ices systèm es

P O SIX W in3 2 O S/ 2 Sécurité

N T V D M

D O S

L P C(L o cal P ro ced ure C all) N T V D M

(N T V irtual D O S M achine)H A L(H ard w are A b stratio n L ev el)

F aç ad e

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

36

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (9)Modèles de conception (9)• Patron « ADAPTEUR » Patron « ADAPTEUR » • Situation:Situation:

– Une classe cible contient les bonnes données Une classe cible contient les bonnes données et le bon comportement. Cependant, elle et le bon comportement. Cependant, elle dispose d’une interface incompatible ou dispose d’une interface incompatible ou inconvénient à utiliser.inconvénient à utiliser.

• Solution:Solution:– Créer une classe Créer une classe adapteuradapteur..– Envelopper l’interface de la classe cible par Envelopper l’interface de la classe cible par

celle de la classe celle de la classe adapteuradapteur..

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

37

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (10)Modèles de conception (10)• Patron « ADAPTEUR » Patron « ADAPTEUR » • Diagramme:Diagramme:

• Exemple:Exemple:

Ser vi cesClie n t

Ad ap te ur

+ Opération( )

+ Opération( )

Clas s e Cib le

+ OpérationMaFaç on()

Class eCible->OpérationMaFaç on()

F i gu reClie nt

Re ctan g le

+ Des s ine(x 1, y 1, x2, y 2)

+ Des s ine(x 1, y 1, x2, y 2)

Fo r m e

+ Des s ineRec tangle(Rec t r)

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

38

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (11)Modèles de conception (11)• Patron « PONT » Patron « PONT » • Situation:Situation:

– Il est nécessaire de séparer le model de son Il est nécessaire de séparer le model de son implantation. Permettre l’évolution indépendante implantation. Permettre l’évolution indépendante de ces deux facettes. En d’autres mots, de ces deux facettes. En d’autres mots, découpler l ’ensemble des objets d’implantation découpler l ’ensemble des objets d’implantation de l’ensemble des objets qui les utilisent.de l’ensemble des objets qui les utilisent.

• Solution:Solution:– Créer deux hiérarchies de classes.Créer deux hiérarchies de classes.– Une hiérarchie représente le modèle et le Une hiérarchie représente le modèle et le

raffinement du modèle.raffinement du modèle.

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

39

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (12)Modèles de conception (12)• Patron « PONT » Patron « PONT » • Solution (suite):Solution (suite):

– L’autre hiérarchie représente l’implantation L’autre hiérarchie représente l’implantation du modèle et de son raffinement.du modèle et de son raffinement.

– Joindre les deux hiérarchies par la Joindre les deux hiérarchies par la composition ou l’agrégation. composition ou l’agrégation.

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

40

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (13)Modèles de conception (13)• Patron « PONT » Patron « PONT » • Diagramme:Diagramme:

Abstr a ct ionClie n t

Ab s tr actRaffin é e

+ Opération()

+ Opération()

Imp la n ta t ion

+ OpérationImpl( )

Im p lan tat io n A

+ OpérationImpl( )

Im plan tatio n B

+ OpérationImpl( )

Imp->OpérationImpl( )

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

41

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (14)Modèles de conception (14)• Patron « PONT » Patron « PONT » • Exemple:Exemple:

F i gureClie nt

Re ctan g le Ce r cle

+ Dess ine()

+ Dess ine() + Dess ine()

Tra ça ge

+ Des s ineLigne()+ Des s ineCerc le()

T r açag e GDI

+ Des s ineLigne()+ Des s ineCerc le()

T raçag e Op e n GL

+ Des s ineLigne()+ Des s ineCerc le()

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

42

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (15)Modèles de conception (15)• Patron « MANUFACTURE ABSTRAITE » Patron « MANUFACTURE ABSTRAITE » • Situation:Situation:

– Un ensemble ou une famille d’objets sont à Un ensemble ou une famille d’objets sont à créer. On ne veut pas utiliser la construction créer. On ne veut pas utiliser la construction switch - case pour réaliser cette tâche.switch - case pour réaliser cette tâche.

– Une longue liste de switch - case n’est pas Une longue liste de switch - case n’est pas très orientée objet et la logique de création très orientée objet et la logique de création des objets (paramètres initiaux, dépendance, des objets (paramètres initiaux, dépendance, etc.) est difficile à maintenir et à modifier.etc.) est difficile à maintenir et à modifier.

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

43

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (16)Modèles de conception (16)• Patron « MANUFACTURE ABSTRAITE » Patron « MANUFACTURE ABSTRAITE » • Solution:Solution:

– Créer une classe manufacture par famille d’objets à Créer une classe manufacture par famille d’objets à créer. Donc, autant de manufactures que de créer. Donc, autant de manufactures que de familles d’objets.familles d’objets.

– Doter la classe manufacture la logique et Doter la classe manufacture la logique et l’interface nécessaire pour créer les objets de la l’interface nécessaire pour créer les objets de la même famille.même famille.

– Le client crée les objets désirés par l’intermédiaire Le client crée les objets désirés par l’intermédiaire des classes manufactures.des classes manufactures.

– Le client ne doit créer les objets désirés Le client ne doit créer les objets désirés directement.directement.

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

44

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (17)Modèles de conception (17)• Patron « MANUFACTURE ABSTRAITE » Patron « MANUFACTURE ABSTRAITE » • Diagramme:Diagramme:

M a nufa ctu reClie nt

M anu factu re 1 M anu factu re 2

+ CréerProduitA ()+ CréerProduitB()

+ CréerProduitA () + CréerProduitB()

Pro d u itA Pr od u itB

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

45

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (1Modèles de conception (188))• Patron « Patron « SINGLETONSINGLETON »  » • Situation:Situation:

– La classe La classe ClasseAClasseA n’a qu’une seule instance n’a qu’une seule instance..– On ne permet pas l’instanciation de plus d’un On ne permet pas l’instanciation de plus d’un

objet de objet de ClasseAClasseA..– On veut un mécanisme automatique qui force On veut un mécanisme automatique qui force

les programmeurs à ne créer qu’une seule les programmeurs à ne créer qu’une seule instance de ce type.instance de ce type.

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

46

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (1Modèles de conception (199))• Patron « Patron « SINGLETONSINGLETON »  » • SolutionSolution::class Editeur {

private:

static Editeur *Instance;

Editeur() { }

public:

static Editeur *getInstanceEditeur() {

return (Instance==0)?new Editeur : Instance;

}

};

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

47

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (Modèles de conception (2020))• Patron « Patron « SINGLETONSINGLETON »  » • SolutionSolution::

– Pour utiliser la classe Pour utiliser la classe EditeurEditeur ainsi conçue: ainsi conçue:• Régler la valeur initiale de Régler la valeur initiale de Editeur::InstanceEditeur::Instance à zéro au à zéro au

début du programme ou dans un fichier .hdébut du programme ou dans un fichier .hEditeur *Editeur::Instance = 0;Editeur *Editeur::Instance = 0;

• Obtenir une instance de Obtenir une instance de EditeurEditeur par parEditeur *ed1 = Editeur::getInstanceEditeur();Editeur *ed1 = Editeur::getInstanceEditeur();

Editeur *ed2 = Editeur::getInstanceEditeur();Editeur *ed2 = Editeur::getInstanceEditeur();

À de la structure de la classe (singleton), À de la structure de la classe (singleton), ed1ed1 est identique à est identique à ed2ed2..

• On On ne peut pasne peut pas créer une instance de Editeur par créer une instance de Editeur parEditeur *mauvais1 = new Editeur;Editeur *mauvais1 = new Editeur;

Editeur mauvais2;Editeur mauvais2;

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

48

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (Modèles de conception (2121))• Patron « Patron « OBSERVATEUROBSERVATEUR »  » • Situation:Situation:

– Un événement survient et nous devons notifier un Un événement survient et nous devons notifier un ensemble d’objets de l’arrivée de cet événement.ensemble d’objets de l’arrivée de cet événement.

• Solution:– Créer une classe Créer une classe DistributeurDistributeur qui est au courant qui est au courant

des événements dans le système.des événements dans le système.– Chaque objet désireux de recevoir la notification Chaque objet désireux de recevoir la notification

des événements reçus doit s’enregistrer auprès de des événements reçus doit s’enregistrer auprès de DistributeurDistributeur. Les objets qui reçoivent la . Les objets qui reçoivent la notification des événements sont des notification des événements sont des observateursobservateurs..

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

49

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (Modèles de conception (2222))• Patron « Patron « OBSERVATEUROBSERVATEUR »  » • DiagrammeDiagramme:

Distributeur

+ A ttach(Observateur obs) : void+ Detach((Observateur obs) : void+ Notifier() : void

DistributeurConcret

+ Get_état() : ÉTAT+ Set_état(ÉTAT e) : void

- état_Distributeur : ÉTAT

Observateur

+ M iseAJour() : void

ObservateurConcret

+ M iseAJour() : void

- état_Observateur : ÉTAT

- Obs : list<Observateur>

forall o in Obs {o->MiseAjour();}

état_Observateur =distributeur_concret->Get_état();

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

50

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (Modèles de conception (2323))• Patron « Patron « OBSERVATEUROBSERVATEUR »  » • Situation:Situation:

– Un événement survient et nous devons notifier un Un événement survient et nous devons notifier un ensemble d’objets de l’arrivée de cet événement.ensemble d’objets de l’arrivée de cet événement.

• Solution:– Créer une classe Créer une classe DistributeurDistributeur qui est au courant qui est au courant

des événements dans le système.des événements dans le système.– Chaque objet désireux de recevoir la notification Chaque objet désireux de recevoir la notification

des événements reçus doit s’enregistrer auprès de des événements reçus doit s’enregistrer auprès de DistributeurDistributeur. Les objets qui reçoivent la . Les objets qui reçoivent la notification des événements sont des notification des événements sont des observateursobservateurs..

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

51

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (Modèles de conception (2424))• Patron « Patron « DÉCORATEURDÉCORATEUR »  » • Situation:

– Un objet dispose d’un nombre de fonctions. Il Un objet dispose d’un nombre de fonctions. Il est souhaité de pouvoir ajouter de nouvelles est souhaité de pouvoir ajouter de nouvelles fonctionnalités à l’objet et ce, dynamiquement fonctionnalités à l’objet et ce, dynamiquement pendant l’exécution du programme.pendant l’exécution du programme.

• Solution:Solution:– Créer une classe abstraite qui représente à la Créer une classe abstraite qui représente à la

fois la classe originale et les nouvelles fois la classe originale et les nouvelles fonctions à ajouter.fonctions à ajouter.

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

52

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (Modèles de conception (2525))• Patron « Patron « DÉCORATEURDÉCORATEUR »  » • Solution (suite):Solution (suite):

– La classe originale (celle où l’on désire La classe originale (celle où l’on désire ajouter de nouvelles fonctionnalités) est ajouter de nouvelles fonctionnalités) est appelée la appelée la composante abstraitecomposante abstraite..

– Les classes renfermant les nouvelles Les classes renfermant les nouvelles fonctions sont appelées les fonctions sont appelées les décorateursdécorateurs..

– Instancier les objets appropriés à partir de la Instancier les objets appropriés à partir de la composante abstraite.composante abstraite.

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

53

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (Modèles de conception (2626))• Patron « Patron « DÉCORATEURDÉCORATEUR »  » • Diagramme:Diagramme: Composante

+ Opération() : void

Com posanteConcrète

+ Opération() : void

Décorateur

+ Opération() : void

1

0..1

DécorateurConcret

+ Opération() : void+ NouvelleOpérationA() : Entier

DécorateurConcret

+ Opération() : void+ NouvelleOpérationB() : void

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

54

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (Modèles de conception (2727))• Patron « Patron « DÉCORATEURDÉCORATEUR »  » • Exemple:Exemple:

Composante

+ Im prim eBillet() : void

Billet

+ Im prim eBillet() : void

Décorateur

+ Im prim eBillet() : void

1

0..1

Entête

+ Im prim eBillet() : void- Im prim eEntete() : void

PiedPage

+ Im prim eBillet() : void- Im prim ePiedPage() : void

- com p : Com posante

ImprimeBillet() {Décorateur::ImprimeBillet();ImprimePiedPage();}

ImprimeBillet() {ImprimeEntete();Décorateur::ImprimeBillet();}

Client

ImprimeBillet() {if (comp != 0) comp->ImprimeBillet();}

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

55

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (Modèles de conception (2828))• Patron « Patron « DÉCORATEURDÉCORATEUR »  » • Ainsi,Ainsi,Entête::ImprimeBillet()Entête::ImprimeBillet() Imprime l’en-tête puis Imprime l’en-tête puis

exécute exécute Décorateur::ImprimeBillet()Décorateur::ImprimeBillet()..

PiedPage::ImprimeBillet()PiedPage::ImprimeBillet() Exécute Exécute Décorateur::ImprimeBillet()Décorateur::ImprimeBillet() puis imprime le pied puis imprime le pied de page.de page.

Décorateur::ImprimeBillet()Décorateur::ImprimeBillet() exécute exécute

comp->ImprimeBillet()comp->ImprimeBillet() si si compcomp existe. existe.

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

56

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (Modèles de conception (2929))• Patron « Patron « DÉCORATEURDÉCORATEUR »  » • Exemple:Exemple:Composante *c = new Entete(new PiedPage(new Billet()));Composante *c = new Entete(new PiedPage(new Billet()));

PiedPage

PiedPage( new Billet()) new Entete( new PiedPage( new Billet()));

Billet

Billet()

Entete

- com p = new B illet - com p = new P iedPage

O b jet résu ltan t

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

57

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (Modèles de conception (3030))• Patron « Patron « DÉCORATEURDÉCORATEUR »  »

– En exécutant c->En exécutant c->ImprimeBillet()ImprimeBillet() : :c->ImprimeBillet()

Entete::ImprimeBillet()

ImprimeEntete()

est en f ait

ex écute

comp->ImprimeBillet()p u is

PiedPage::ImprimeBillet()

est en f ait

ex écutecomp->ImprimeBillet()

Billet::ImprimeBillet()est en f ait

ImprimePiedPage()p u is

1

2

3

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

58

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Modèles de conception (Modèles de conception (3131)).// La classe Composante abstraite n’est 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();

. }

.};

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

59

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

// Classe Entete est un décorateur concret

.class Entete : public Decorateur {

.private:

. void ImprimeEntete() { // Imprime le texte de l’entête }

.public:

. void ImprimeBillet() {

. // 1) Imprimer Entete

. ImprimeEntete();

. // 2) Imprimer le billet

. Decorateur::ImprimeBillet();

. }

.};

.

Modèles de conception (Modèles de conception (3232))

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

60

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

.// 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 (Modèles de conception (3333))

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

61

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

.// 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 (Modèles de conception (3434))

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

62

GPA789 Analyse et conception orientées objetGPA789 Analyse et conception orientées objet

Fin du chapitre 9Fin 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 Relever les activités nécessaires à la

création du modèle de conception.création du modèle de conception.• Appliquer les remarques concernant la Appliquer les remarques concernant la

phase d’implantation.phase d’implantation.

N’oubliez pas: C++ est bien plus que du C.N’oubliez pas: C++ est bien plus que du C.