Héritage et composition

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Erratum C Surcharge For(int x=0; … 2.
Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
Langages objet Définitions Traduction des méthodes en C++
F. Voisin : Introduction à Java 1 Introduction à Java - lhéritage - Frédéric VOISIN FIIFO - « Remise à Niveau »
C.
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
PHP5 poo.
Leçon 3 : Héritage IUP 2 Génie Informatique
Chapitre III Héritage (début)
Programmation orientée objet
Langage Oriente Objet Cours 4.
COURS DE PROGRAMMATION ORIENTEE OBJET :
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
C++ : classes Introduction aux Langages Orientés Objets
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Classes abstraites et Interfaces
POO : Objets et classes (Rappels)
Langage Oriente Objet Cours 2.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Structures de données IFT-2000
Structures de données IFT-10541
Introduction au paradigme orienté-objet (suite)
Design Pattern: Decorator
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Types de données abstrait et mécanismes d'encapsulation
Langages orientés objets
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Cours 4 Héritage (suite).
COURS DE PROGRAMMATION ORIENTEE OBJET :
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
INF1101 Algorithmes et structures de données
Structures de données IFT-2000 Abder Alikacem L’héritage en C++ Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Travaux Pratiques Représentation des connaissances
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Copyright © SUPINFO. All rights reserved La Programmation Orientée Objet en C# 2.0.
La notion de type revisitée en POO
ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 285 Cours de Programmation Web : PHP Chapitre 5 : Orienté objet en PHP.
11/04/ L'héritage Cours 7 Cours 7.
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
PHP objet Jérôme CUTRONA 10:13:27 Programmation Web
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Les surcharges d'opérateurs
Le polymorphisme.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Les classes Introduction aux Langages Orientés Objets
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
pour les programmeurs en C++ Java 2 Part 1 3 Histoire de Java Projet de connexion des machines: 1991 Le nom Java a été introduit dans un café Développé.
Retour sur les interfaces Les méthodes définies dans une interface sont des méthodes qui doivent absolument être implémentées par une ou des sous-classes.
Transcription de la présentation:

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 !

Héritage et composition les relations entre objets : une voiture moteur une voiture véhicule une voiture conducteurs a un composition est un héritage a des (pas dans le sens 'possède') association

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

Composition tout comme une struct peut contenir une struct 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;

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

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

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

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

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

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

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

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

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 !

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

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

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

Polymorphisme problèmes : la troncature ! donc tableau de pointeurs : 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

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.

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

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

Classe abstraite * 1 instrument de musique orchestre instrument à corde instrument à vent cuivres bois piano violon contrebasse tuba trompette hautbois

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

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 !

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}