Langages objet Définitions Traduction des méthodes en C++

Slides:



Advertisements
Présentations similaires
Spécialisation/généralisation Héritage Polymorphisme.
Advertisements

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.
C.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
PHP5 poo.
Leçon 3 : Héritage IUP 2 Génie Informatique
Programmation par Objets et Java
Chapitre III Héritage (début)
Programmation orientée objet
Langage Oriente Objet Cours 4.
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.
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
Langage Oriente Objet Cours 2.
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
Introduction au paradigme orienté-objet (suite)
Traduction dirigée par la syntaxe
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
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é.
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
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.
C++ : variables Déclaration de variables
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.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 3 Polymorphisme I.
Héritage et composition
Travaux Pratiques Représentation des connaissances
JavaScript Nécessaire Web.
La notion de type revisitée en POO
La Modélisation Orientée Objet Concevoir un programme : modélisation du problème à résoudre Notion de programme : machine de Turing Pouvoir d’expression.
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.
Créer des packages.
12/04/ Le polymorphisme Cours 8 Cours 8.
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Réaliser par: Sadok Amel Cheboui hassiba
PHP objet Jérôme CUTRONA 10:13:27 Programmation Web
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les types composés Les enregistrements.
Les surcharges d'opérateurs
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
ISBN Chapitre 10 L'implémentation des sous- programmes.
Cours du 5 novembre.
Les classes Introduction aux Langages Orientés Objets
 Formulaires HTML : traiter les entrées utilisateur
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
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:

Langages objet Définitions Traduction des méthodes en C++ Polymorphisme, affectation et héritage Accès aux attributs Accès aux méthodes Tables virtuelles Héritage multiple

Attributs : données sur un objet Méthodes : fonctions sur un objet Définitions Objets : regroupent les structures de données et les opérations Attributs : données sur un objet Méthodes : fonctions sur un objet Classe : type d'objets Héritage : relation entre une classe et ou sous-classe ou classe dérivée (moins d'objets, plus d'informations)

Hiérarchie d'héritage Les objets des classes dérivées ont les attributs et méthodes de la classe de base, plus d'autres graphicalObject translate scale closedGraphical area polyline length

Traduction des méthodes en C++ Nom : scale__15graphicalObject Paramètres : on ajoute graphicalObject & this Appel : l'objet sur lequel on appelle la méthode devient 1er paramètre Corps de la méthode On accède aux attributs et méthodes de l'objet par l'intermédiaire de this. m__5a__1a : m__5a dans a ou m dans a__1a ?

Polymorphisme et héritage a := b La syntaxe garantit que b peut être vu comme un a Un type dérivé peut être vu comme le type de base (on perd les informations spécifiques au type dérivé) Le type statique de a est déduit de la déclaration Le type propre ou type dynamique de a est connu seulement à l'exécution Certaines opérations dépendent du type propre (méthodes virtuelles)

Polymorphisme et héritage Paramètres des fonctions rectangle dist(point a) ; dist(b) // b peut être vu comme un a Valeur de retour rectangle dist(point a) { // ... return c ; } // c peut être vu comme un rectangle

Accès aux attributs Les attributs définis dans la classe de base conservent la même adresse relative dans les classes dérivées. Cette adresse est connue à la compilation. Attributs de la classe de base Attributs supplémentaires

Méthodes virtuelles ou dynamiques Méthodes statiques Peuvent être héritées mais non redéfinies Méthodes virtuelles ou dynamiques On peut les redéfinir lors d'un héritage Exemple. Dans la classe polyline, la méthode scale provoque un changement d'échelle. class rectangle : public polyline { double side1_length, side2_length ; } Il faut redéfinir scale pour qu'elle change les deux longueurs des côtés. Pour cela, la méthode scale doit avoir été définie virtual dans la classe de base

Sélection des méthodes Sélection statique : par le type statique Sélection dynamique La sélection de la méthode à appeler dépend du type propre de l'objet, connu seulement à l'exécution L'objet a un lien vers un descripteur de classe Le descripteur de classe a les liens vers le code des méthodes virtuelles (table virtuelle)

Tables virtuelles graphicalObject polyline rectangle L'adresse relative des liens est la même pour la définition de base et pour les redéfinitions Le contenu du lien est l'adresse du code de la méthode. Il dépend du type propre translate_GO scale_GO translate_PL scale_PL length_PL translate_PL scale_RA length_RA

Traduction d'un appel Traduction : image.scale(factor) Traduction : vt=*image; vm=vt[2]; (*vm)(image, factor) ; Le compilateur relie les noms des méthodes virtuelles (scale) aux adresses relatives dans la table virtuelle (2)

Construction des tables virtuelles graphicalObject polyline rectangle On copie la table virtuelle de la classe de base On remplace les méthodes redéfinies par l'adresse du nouveau code On ajoute les nouvelles méthodes virtuelles translate_GO scale_GO translate_PL scale_PL length_PL translate_PL scale_RA length_RA

Coût de la sélection dynamique - pour chaque objet, le pointeur vers la table virtuelle - pour chaque classe, la table virtuelle - à chaque appel de méthode, 1 indirection + 1 accès dans la table

Héritage multiple Une classe peut avoir plusieurs classes mères La hiérarchie d'héritage est un graphe acyclique, non un arbre graphicalObject translate scale closedGraphical area polyline length rectangle area

Conflits de noms Héritage répété si deux classes mères utilisent le même nom pour des attributs ou méthodes En C++, les conflits sont résolus par un préfixe de résolution de portée Héritage répété Une classe dérivée hérite d'une autre classe plusieurs fois, directement ou indirectement En C++, la classe mère est instanciée plusieurs fois dans la classe dérivée (la même méthode héritée plusieurs fois est utilisée pour des objectifs différents)

Compilation de l'héritage multiple Pour chaque classe mère, le compilateur doit pouvoir voir l'objet comme un objet de la classe mère myPolyline = myRectangle ; le compilateur crée une vue polyline de myRectangle classe mère 1 classe mère 2 attributs supplémentaires