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

Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts.

Présentations similaires


Présentation au sujet: "Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts."— Transcription de la présentation:

1 Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts non algorithmiques mais objets !

2 Héritage et composition les relations entre objets : une voituremoteur une voiturevéhicule une voitureconducteurs a un est un a des (pas dans le sens 'possède') composition héritage association

3 Héritage et composition à chaque relation son implémentation composition : la classe A comporte un objet de classe B si objet de classe B partagé par plusieurs objets de classe A : pointeur vers objet de classe B membre static

4 Composition class moteur {// ici on trouve du code bien écrit}; class voiture { private : char *marque; moteur m; }; tout comme une struct peut contenir une struct ou moteur *m; ou static moteur m;

5 Liste d'initialisation pour le constructeur de la classe contenante : class voiture { private : char *marque; moteur m; public : voiture(moteur mm, char*ma) { m=mm; // intialisation de la marque } }; ce code d'initialisation n'est pas du code 'efficace' voiture(moteur mm, char *ma):m(mm) { // code autre que des affectations systématiques }

6 Liste d'initialisation valable pour les types de base (int et consorts) class foo{// que du bon code}; class bar { private : foo f; int i; char c; public : bar(foo pff, int pii, char pcc):f(pff),i(pii),c(pcc) {} ~bar() {} // autres fonctions membres };

7 Héritage syntaxe class classe : dérivation classe[, dérivation classe,…] { // code de la classe }; la classe ainsi définie hérite des classes listées

8 Héritage dérivation : indique l'accessibilité entre classes principe : une classe B héritant de A contient tous les membres de A un objet de classe B contient un sous-objet de classe A exemple avec Dev

9 Héritage privé dérivation : public, private, protected héritage private (par défaut) : public protected private inacessibles dans la classe de basedans la classe dérivée

10 Héritage privé rôle de l'héritage privé class A : private B { // code de A }; A est une sorte de B, mais les utilisateurs n'ont pas à le savoir. A offre une interface qui lui est propre. exemple avec Dev

11 Héritage protégé héritage protected : public protected private protected inacessibles dans la classe de basedans la classe dérivée membres protected accessibles aux classes dérivées

12 Héritage public héritage public : public protected private dans la classe de basedans la classe dérivée type de dérivation très utilisé public protected private

13 Redéfinition de fonction class D : public B {}; D est-un B "en mieux" les fonctions de B : D doit les proposer c'est le cas ! D d; d.f(); // ok si f() est définie dans B !

14 Redéfinition de fonction D peut implémenter f(); mais D::f() masque B::f() pas appel aux deux ! appel explicite possible exemple avec Dev

15 Troncature d'objet si D est un B alors… D d; B b; b=d; //? B *ptr; ptr=&d; // ??? ptr->f(); //??? effets exemple avec Dev

16 Polymorphisme déclaration d'un tableau de B contenant donc des objets de classe B, des objets de classe D… définition ? B tablo[100]; ou B *tablo; tablo = new B[42];

17 Polymorphisme problèmes : la troncature ! D d; tablo[2]= d; // ok mais troncature donc tableau de pointeurs : B* tablo[100]; B[0] = new B; B[1] = new D; utilise les types statiques des objets ! exemple avec Dev

18 Polymorphisme possibilité de déterminer le type dynamique de l'objet : forcer le compilateur à le traiter. mot clef virtual dans la définition de la fonction au niveau de la classe de base.

19 Fonctions virtual contraintes sur les fonctions virtuelles redéfinies (appelons la f() ): f() retourne T* f() retourne T& f() retourne T rédéfinion de f() : (une sorte de T)* rédéfinion de f() : (une sorte de T)& rédéfinion de f() : T

20 Classe abstraite abstraction / taxonomie / concept super classe pas instanciable rôle d'interface, de modèle obligation de dériver des classes

21 Classe abstraite instrument de musiqueorchestre instrument à cordeinstrument à vent cuivresbois pianovioloncontrebasse tubatrompettehautbois 1 *

22 Classe abstraite interface de instrument ? jouer(); class instrument { public : virtual void jouer(note)=0; } fonction virtuelle pure : ne peut être appelée doit être redéfinie par les classes dérivées exemple avec Dev

23 Classe abstraite quid des classes abstraites intermédiaires ? ne doivent pas redéfinir les fonctions virtuelles car classes abstraites peuvent ajouter des informations d'interface non instantiables !

24 Retour sur virtual exemple de redéfinition class figure { public: virtual void dessiner()=0; virtual figure *symetrique(droite)=0; }; class triangle { public : void dessiner(){//le code//} figure *symetrique(droite d){//du code} };


Télécharger ppt "Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts."

Présentations similaires


Annonces Google