UNIVRESITE MOHAMED KHIDER BISKRA Faculté des sciences exactes et sciences de la nature et de la vie Département d Informatique 2 ème Année Licence Mme MOHAMMEDI Amira Mohammedi.amira@gmail.com 2011/ 2012
Envoi de message Le seul mode de communication entre deux objets revient à la possibilité pour le premier de lancer une méthode sur le second Pour cela il faut qu une méthode du premier contient un appel à une méthode du deuxième. On appellera ce mécanisme de communication un «envoie de message» du premier objet vers le second. 2
Association de classes Pour qu un objet a1 de la classe A puisse envoyer un message à un autre objet b1 de la classe B, il doit être informé dans le code de la classe A sur le type de l objet b1. La connaissance de la classe B devient une donnée structurelle de la classe A. La classe B est le type d un attribut de la classe A. 3
Association de classes Class A { private: B b1; // la classe B type un attribut de la classe A } public: void jetravaillepoura() { b1.jetravaillepourb(); } Class B { private: public: void jetravaillepourb() {} } 4
Envoie de message 5
Association de classes A - +jetravaillepoura() :void B - +jetravaillepourb() :void 6
Types d associations de classes Il existe deux type d association de classes: Agrégation A - + B - + Composition A - + B - + 7
Agrégation a1 ne garde qu une référence ou adresse de b1 la destruction de l objet a1 ne détruit pas l objet b1 Exemple class A { B *pb1; }; a1 pb1 b1 8
Composition c est une relation plus forte que l agrégation. La destruction de l objet a1 détruit forcément l objet b1. Exemple class A { B b1; a1 b1 }; 9
Exemple agrégation/composition Une université est composée de plusieurs facultés, chaque faculté est un agrégat de plusieurs professeurs. La destruction de l'université implique la destruction des facultés qui la composent, alors que la destruction d'une faculté n'implique pas la destruction des professeurs liés à cette faculté par une relation d'agrégation. class Professeur {}; class Faculte {private: // Agrégation Professeur* enseignants[5];... }; class Universite {private: // Composition... }; facultes fac[20]; 10
Dépendance de classes C est une relation moins persistante que l association. Quand une méthode de la classe A admet comme paramètre un objet de la classe B. Ou construit un objet local. La relation entre les deux objets est temporaire (le temps de l exécution de la méthode). class A {private: // Dépendance public: void jetravaillepoura(b b1) {b1.jetravaillepourb();} // ou void jetravaillepoura() {B b1; b1.jetravaillepourb();}... }; class B {private: public: void jetravaillepourb() {}}; 11
Dépendance de classes A - +jetravaillepoura(): void B - +jetravaillepourb(): void 12
Réaction en chaîne de messages Tout processus d exécution OO consiste essentiellement en une succession d envois de messages en cascade, d objets en objet. 13
Exemple 14
Exercice 1 Ecrivez le code C++ des deux classes Voiture et Moteur, telles que, si on démarre la voiture, le moteur tourne. Quelle relation trouve-t-on entre ces deux classes? Justifiez. Ecrivez les constructeurs des deux classes. 15
Exercice 2 Considérez les deux classes suivantes : Interrupteur et Lampe, telles que, quand l interrupteur est allumé, la lampe s allume aussitôt. Réalisez le code C++ permettant cette interaction. Quelles relation entre classes peut-on identifier ici? Justifiez. Ecrivez les constructeurs des deux classes. 16