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

Post on 10-Sep-2018

218 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Algorithmique et Algorithmique et Programmation 2 : Programmation 2 :

Agrégation et Agrégation et CompositionComposition

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

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..

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

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

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.

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 :

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.

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 :

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_;

...}

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

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?

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.

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

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

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)

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)

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

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;

}}

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

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);...}

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));...}

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

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

top related