algorithmique et programmation 2 : agrégation et … · 2013-04-17 · agrégation : définition...

23
Algorithmique et Algorithmique et Programmation 2 : Programmation 2 : Agrégation et Agrégation et Composition Composition

Upload: dangthien

Post on 10-Sep-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Algorithmique et Algorithmique et Programmation 2 : Programmation 2 :

Agrégation et Agrégation et CompositionComposition

Page 2: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Classes en C++ : Classes en C++ : AssociationsAssociations

Les classes peuvent être reliées Les classes peuvent être reliées structurellement par des relations. En structurellement par des relations. En particulier, les relations:particulier, les relations:

L' agrégationL' agrégationLa compositionLa compositionL'héritageL'héritage

Page 3: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Agrégation : DéfinitionAgrégation : Définition

L'L'agrégationagrégation permet de définir qu'un permet de définir qu'un objet est l'assemblage d'un ou de objet est l'assemblage d'un ou de plusieurs plusieurs sous-objetssous-objets..

Page 4: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Agrégation : RemarquesAgrégation : Remarques

En En POOPOO : : L'objet L'objet contientcontient les sous-objetsles sous-objetsL'Objet L'Objet communiquecommunique lui même lui même avec les sous-objetsavec les sous-objets

Page 5: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Agrégation : RèglesAgrégation : Règles à à suivresuivre

Les sous-objets doivent avoir une Les sous-objets doivent avoir une relation structurelle ou relation structurelle ou fonctionnelle avec l'objet dont ils fonctionnelle avec l'objet dont ils sont les constituants.sont les constituants.

Ex : un clavier fait partie d'un Ex : un clavier fait partie d'un ordinateurordinateur

Page 6: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Agrégation : RèglesAgrégation : Règles à à suivresuivre

Il faut que la relation d'agrégation respecte Il faut que la relation d'agrégation respecte les contraintes suivantes :les contraintes suivantes :

Antisymétrie :Antisymétrie : sisi un objet A fait partie un objet A fait partie d'un objet B, d'un objet B, alorsalors B ne fait pas partie B ne fait pas partie d'un objet A (même indirectement)d'un objet A (même indirectement)

Transitivité :Transitivité : sisi un objet A fait partie un objet A fait partie d'un objet B, et que B fait partie d'un d'un objet B, et que B fait partie d'un objet C, objet C, alorsalors A doit faire partie d'un A doit faire partie d'un objet C. Sinon cela signifie que les objet C. Sinon cela signifie que les champs sémantiques des objets sont mal champs sémantiques des objets sont mal définis.définis.

Page 7: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Agrégation : UMLAgrégation : UML

En UML, on note l'agrégation En UML, on note l'agrégation dans les diagrammes de classes dans les diagrammes de classes avec une relation avec une relation non-symétrique terminée sur non-symétrique terminée sur coté agrégeant par le symbole coté agrégeant par le symbole ◊◊..

Ex : si une compagnie possède Ex : si une compagnie possède un certain nombre d'employés, un certain nombre d'employés, on notera :on notera :

Page 8: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Agrégation et Agrégation et CompositionComposition

La La compositioncomposition est un cas particulier est un cas particulier d'agrégation qui implique une dépendance d'agrégation qui implique une dépendance plus forte de l'objet agrégé dans l'objet plus forte de l'objet agrégé dans l'objet agrégeant.agrégeant.

Un objet peut être Un objet peut être agrégéagrégé (partagé) par (partagé) par plusieurs objets, mais ne peut être plusieurs objets, mais ne peut être composécomposé que par que par unun objet unique. objet unique.

Notion de durée de vie Notion de durée de vie : en général les : en général les objets qui composent un objet A sont objets qui composent un objet A sont détruits en même temps que A.détruits en même temps que A.

Page 9: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Composition : UMLComposition : UML

En UML, on utilise la même En UML, on utilise la même notation pour la notation pour la compositioncomposition que pour l'agrégation, sauf que que pour l'agrégation, sauf que la pointe la pointe ◊ ◊ est noircie enest noircie en ⧫..

Ex : Un Bâtiment se compose Ex : Un Bâtiment se compose d'un certain nombre de Salles :d'un certain nombre de Salles :

Page 10: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Composition en C++Composition en C++

En C++En C++Composition : Utiliser un objet Composition : Utiliser un objet comme attribut d'un autre. Par comme attribut d'un autre. Par exemple une voiture est exemple une voiture est composée de 4 roues (une composée de 4 roues (une roue appartient à une seule roue appartient à une seule voiture)voiture)

class Roue {class Roue {

public:public:

......

private:private:

... ...

};};

class Voiture {

public:

...

private:

Roue roueAvantGauche_;

Roue roueAvantDroite_;

Roue roueArriereGauche_;

Roue roueArriereDroite_;

...}

Page 11: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

CompositionComposition Si un objet A est un attribut de l’objet B, le Si un objet A est un attribut de l’objet B, le

constructeur de l’objet A sera appelé avant constructeur de l’objet A sera appelé avant celui de l’objet B.celui de l’objet B.

Si vous réfléchissez bien, ceci est logique: Si vous réfléchissez bien, ceci est logique: pour construire une voiture, il faut d’abord pour construire une voiture, il faut d’abord construire ses composantes, comme le construire ses composantes, comme le moteur et les roues.moteur et les roues.

On dit que A et B sont reliés par une relation On dit que A et B sont reliés par une relation de composition, c’est­à­dire que B est de composition, c’est­à­dire que B est composé de Acomposé de A

Il s’agit d’une relation forte: si B est détruit, Il s’agit d’une relation forte: si B est détruit, A disparaît aussiA disparaît aussi

Page 12: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Composition en C++ : Composition en C++ : Exemple (1)Exemple (1)

Créer les uniquement les Créer les uniquement les interfacesinterfaces des classes des classes permettant de modéliser une trottinette (sachant permettant de modéliser une trottinette (sachant qu'une trottinette est composée de 2 roues qu'une trottinette est composée de 2 roues inchangeables : si on jette la trottinette on ne inchangeables : si on jette la trottinette on ne peut pas récupérer les roues)peut pas récupérer les roues) 2 classes. lesquelles?2 classes. lesquelles? Qui compose qui?Qui compose qui? Les méthodes?Les méthodes? Les attributs?Les attributs?

Page 13: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Construction d'un objet Construction d'un objet compositecomposite

Si une classe X se Si une classe X se composecompose de de sous-objets, alors l'instanciation d'un sous-objets, alors l'instanciation d'un objet de type X provoque objet de type X provoque d'abordd'abord l'instanciation des sous-objets de X (et l'instanciation des sous-objets de X (et donc des sous-objets des sous-objets de donc des sous-objets des sous-objets de X, etc).X, etc).

Il est possible deIl est possible de définir quels sont les définir quels sont les constructeurs appelésconstructeurs appelés pour chacun pour chacun des sous-objets avec la notation «des sous-objets avec la notation « :  : » » dans le corps des constructeurs de X.dans le corps des constructeurs de X.

Page 14: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Construction d'un objet Construction d'un objet composite : Exemplecomposite : Exemple

Pour une Trottinette, on Pour une Trottinette, on pourrait écrire :pourrait écrire :

Page 15: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Agrégation/Composition Agrégation/Composition en C++: Remarqueen C++: Remarque

Si l'on ne connait pas à l'avance le nombre Si l'on ne connait pas à l'avance le nombre d'objets agrégés/composés, on ne peut d'objets agrégés/composés, on ne peut définir un définir un attribut de taille variableattribut de taille variable en en C++. On utilisera donc : C++. On utilisera donc : Soit un Soit un pointeurpointeur pour faire de pour faire de

l'allocation dynamiquel'allocation dynamique Soit un Soit un attributattribut conteneur conteneur (par ex. un (par ex. un

liste, un vecteur, etc,... cf STL)liste, un vecteur, etc,... cf STL)

Page 16: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Destruction d'un objet Destruction d'un objet compositecomposite

Lors de la Lors de la destructiondestruction d'un objet de d'un objet de classe X contenant des sous-objets, le classe X contenant des sous-objets, le destructeur de cet objet est destructeur de cet objet est d'abordd'abord appelé, appelé, puispuis les destructeurs de ses les destructeurs de ses sous-objets sont appelés (en général sous-objets sont appelés (en général dans l'ordre de définition)dans l'ordre de définition)

Page 17: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

AgrégationAgrégation

L’agrégation consiste essentiellement en une L’agrégation consiste essentiellement en une utilisation d’un objet comme faisant partie utilisation d’un objet comme faisant partie d’un autre objetd’un autre objet

Contrairement à la composition, où l’objet Contrairement à la composition, où l’objet inclus disparaît si l’objet englobant est inclus disparaît si l’objet englobant est détruit, dans une agrégation cet objet ne détruit, dans une agrégation cet objet ne disparaît pasdisparaît pas

La manière habituelle d’implémenter La manière habituelle d’implémenter l’agrégation en C++ est par l’utilisation de l’agrégation en C++ est par l’utilisation de pointeurspointeurs

Page 18: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Agrégation C++Agrégation C++

class Serviceclass Service

{{

......

private:private:

string nom_;string nom_;

Employe* Employe* receptionniste_;receptionniste_;

}}

Constructeur :Constructeur :

Service::Service(string nom)Service::Service(string nom)

: nom_(nom),: nom_(nom),

receptionniste_(NULL)receptionniste_(NULL)

{{

}}

Méthode pour associer le réceptionniste:Méthode pour associer le réceptionniste:

Service::set_receptionniste(Employe* employe)Service::set_receptionniste(Employe* employe)

{{

receptionniste_ = employe;receptionniste_ = employe;

}}

Page 19: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Agrégation C++Agrégation C++

•Pour qu’un objet de la classe Service soit réellement intéressant, il nous faut une méthode pour lui associer un employé comme réceptionniste

•Ceci suppose qu’un objet dynamique de la classe Employe a déjà été créé auparavant et que la méthode fera pointer son pointeur sur cet objet

Page 20: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Agrégation C++Agrégation C++

Dans la fonction Principale :

int main(){... Service expedition("Expeditions");Employe* michel = new Employe("Michel Gagnon", 50000.0);expedition.set_receptionniste(michel);...}

Page 21: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Agrégation C++Agrégation C++

On pourrait aussi utiliser un paramètre supplémentairedans le constructeur:

Service::Service(string nom, Employe* employe): nom_(nom), receptionniste_(employe){}int main(){...Service expedition("Expeditions",new Employe("Michel Gagnon", 50000.0));...}

Page 22: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Construction/Destruction Construction/Destruction d'un objet composite : d'un objet composite :

ExerciceExerciceComplétez l'interface et le corps des classes Complétez l'interface et le corps des classes Roue et Trottinette. Vérifiez quels Roue et Trottinette. Vérifiez quels constructeurs sont appelés. Vérifiez l'ordre de constructeurs sont appelés. Vérifiez l'ordre de destruction des objets. destruction des objets.

cc

Roue

- float my_diametre

+ Roue()+ Roue(float diametre)+ Roue(const Roue &r)+ ~Roue()+ void setDiametre(float diametre)+ float getDiametre() const

Trottinette

- Roue my_roue_avant- Roue my_roue_arriere

+ Trottinette()+ Trottinette(float diametre_avant, float diametre_arriere)+ ~Trottinette()+ void changerRoueAvant(Roue r)+ void changerRoueArriere(Roue r)+ Roue getRoueAvant() const+ Roue getRoueArriere() const

Page 23: Algorithmique et Programmation 2 : Agrégation et … · 2013-04-17 · Agrégation : Définition L'agrégation permet de définir qu'un objet est l'assemblage d'un ou de plusieurs

Agrégation/Composition Agrégation/Composition en C++ : Exercice (2)en C++ : Exercice (2)

Concevez les classes nécessaires à la modélisation d'une entreprise, un siège social et de ses employés

• Un siège social = une ville • Un employé = un nom•Une entreprise = 1 siège social et un nombre >=0 d'employés•Une compagnie peut recruter un employer•Si on lui demande, un employé donnera son nom et dira qu'il est content de travailler