Introduction à l héritage en C++



Documents pareils
C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Introduction à C++ et à wxwidgets

et Programmation Objet

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Quelques éléments de compilation en C et makefiles

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Le langage C++ (partie I)

Généralités sur le Langage Java et éléments syntaxiques.

Claude Delannoy. 3 e édition C++

Plan Pédagogique du cours

1.6- Génération de nombres aléatoires

Cours 1: Java et les objets

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

INFO-F-105 Language de programmation I Séance VI

Langage Java. Classe de première SI

Département Automatisation et Informatisation Année Programmation en C++ Institut des Sciences et Techniques de l Ingénieur d Angers

Programmation C++ (débutant)/instructions for, while et do...while

Programmation en C/C++

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

UE C avancé cours 1: introduction et révisions

Introduction au langage C

Programmation stochastique

Objets et Programmation. origine des langages orientés-objet

Systeme d'exploitation

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Programmer en JAVA. par Tama

COMPARAISONDESLANGAGESC, C++, JAVA ET

Programmation en Java IUT GEII (MC-II1) 1

Chap III : Les tableaux

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Cours d Algorithmique et de Langage C v 3.0

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Introduction au pricing d option en finance

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Programmation Orientée Objets Le Langage JAVA

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

as Architecture des Systèmes d Information

C++ : PROGRAMMATION-OBJET

TP1 : Initiation à Java et Eclipse

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Avertissement : Ce cours suppose la connaissance et la maîtrise du langage C CONTENU DU COURS BIBLIOGRAPHIE

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Programmation par les Objets en Java

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

GOL502 Industries de services

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Initiation à JAVA et à la programmation objet.

Programmation impérative

IRL : Simulation distribuée pour les systèmes embarqués

Les structures. Chapitre 3

Héritage presque multiple en Java (1/2)

INITIATION AU LANGAGE JAVA

ALGORITHMIQUE ET PROGRAMMATION En C

Introduction à l algorithmique et à la programmation M1102 CM n 3

Programmation Orientée Objet application au langage Java Version Novembre 2007

Rappels Entrées -Sorties

TD/TP PAC - Programmation n 3

Programmation en langage C Eléments de syntaxe

Cours de C/C++ par la pratique. Hugues Talbot

Support de cours et TD Programmation Orientée Objet

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Cours Langage C/C++ Programmation modulaire

Une introduction à Java

Chapitre 2. Classes et objets

Le prototype de la fonction main()

Informatique I. Sciences et Technologies du Vivant (Semestre 1)

Cours d initiation à la programmation en C++ Johann Cuenin

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004


Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Programmation Objet Java Correction

Modéliser ses fenêtres avec Qt Designer

Modéliser ses fenêtres avec Qt Designer

UE Programmation Impérative Licence 2ème Année

Algorithmique et Programmation, IMA

Notions fondamentales du langage C# Version 1.0

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

TP, première séquence d exercices.

Traduction des Langages : Le Compilateur Micro Java

Programmation Orientée Objet

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

UML. Diagrammes de classes (suite) Delphine Longuet.

Transcription:

Algorithmique/Langage 1ère année Introduction à l héritage en C++ Yacine BELLIK IUT d Orsay Yacine.Bellik@iut-orsay.fr 1 Bibliographie Ce cours est basé sur le livre suivant : Programmer en C++, 5ème édition mise à jour, Claude Delannoy, Editions Eyrolles Yacine.Bellik@iut-orsay.fr 2 1

Qu'est ce que l'héritage? L'héritage consiste, à partir d'une classe existante A, à définir une nouvelle classe B. La classe existante A est appelée classe mère, ou classe de base. La nouvelle classe B est appelé classe fille ou classe dérivée. On dit que la classe B dérive ou hérite de la classe A. Une classe fille hérite automatiquement des données et méthodes de sa classe mère sans avoir à les réécrire. Une classe mère peut avoir plusieurs classes filles. Une classe fille peut elle même servir de classe mère pour une autre classe fille. On parle d héritage simple, quand une classe fille hérite d une seule classe mère. On parle d héritage multiple, quand une classe fille hérite simultanément de plusieurs classes mères. Yacine.Bellik@iut-orsay.fr 3 Exemple Classe Véhicule Classe DeuxRoues Classe QuatreRoues Classe Vélo Classe Moto Classe Fourgonnette Classe Voiture Yacine.Bellik@iut-orsay.fr 4 2

Utilité de l'héritage L héritage permet de réutiliser des classes existantes. L'héritage permet d'adapter des classes existantes à ses propres besoins. L'héritage permet de faire évoluer les classes sans avoir à les réécrire de A àz. L'héritage permet de modulariser les classes et de les spécialiser au fur et à mesure des besoins. L'héritage permet d'éviter de construire des classes de taille trop importante. Il n'est pas nécessaire de disposer du code source de la classe existante pour en faire dériver une classe fille. Il suffit simplement d'avoir le fichier de déclaration de la classe mère ( fichier.h) et son fichier objet (fichier.o ou fichier.lib). Yacine.Bellik@iut-orsay.fr 5 Exemple Soit la classe Point déclarée dans le fichier "Point.h" suivant: #ifndef _POINT_H_ #define _POINT_H_ class Point protected : int x,y; public : void initialiser (int abs,int ord); void deplacer (int dx,int dy); void afficher() const; #endif Nous verrons par la suite la signification de protected Yacine.Bellik@iut-orsay.fr 6 3

Fichier Point.C #include <iostream> #include "Point.h" using namespace std; void Point::initialiser (int abs, int ord) x=abs; y=ord; void Point::deplacer (int dx, int dy) x+=dx; y+=dy; void Point::afficher() const cout<<"je suis en "<<x<<" "<<y<<endl; Yacine.Bellik@iut-orsay.fr 7 Nouveaux besoins La classe Point traite des points dénués de couleur. Supposons qu'on ait besoin de traiter des points colorés. 2 solutions sont possibles : 1. Modifier la classe Point Ceci implique de disposer du fichier source "Point.C". Les programmes qui utilisaient la classe Point risquent de ne plus fonctionner si on les recompile avec la nouvelle version de la classe Point. 2. Dériver une nouvelle classe PointCol à partir de la classe Point Il n'est pas nécessaire de disposer du fichier source "Point.C". Il suffit de disposer du fichier "Point.h" et du fichier objet "Point.o". Les programmes qui exploitaient la classe Point continueront de fonctionner avec la même la classe Point. La 2ème solution est meilleure Yacine.Bellik@iut-orsay.fr 8 4

PointCol.h #ifndef _POINTCOL_H_ #define _POINTCOL_H_ #include "Point.h" class PointCol : public Point protected : int couleur; public : void colorer (int c); #endif Nous verrons par la suite la signification de protected Yacine.Bellik@iut-orsay.fr 9 PointCol.C #include "PointCol.h" void PointCol::colorer (int c) couleur=c; Yacine.Bellik@iut-orsay.fr 10 5

Prog.C #include "PointCol.h" void main() PointCol p; p.initialiser(10,20); p.colorer(5); p.afficher(); p.deplacer(2,4); p.afficher(); Je suis en 10 20 Je suis en 12 24 Yacine.Bellik@iut-orsay.fr 11 Compilation et édition de liens PointCol.h PointCol.C Prog.C Point.h Point.o PointCol.o Prog.o Exécutable Yacine.Bellik@iut-orsay.fr 12 6

affichercol Comment faire pour afficher aussi la couleur? 1ère solution : ajouter dans la classe PointCol une méthode affichercol void PointCol::afficherCol ( ) const cout<<"je suis en "<< x <<" "<< y <<endl; cout<<" et ma couleur est : "<<couleur<<endl; Yacine.Bellik@iut-orsay.fr 13 Utilisation des membres de la classe de base dans une classe dérivée On remarque que le premier traitement fait par affichercol (affichage des coordonnées) correspond au traitement fait par la méthode afficher de la classe Point Or on sait que la classe PointCol hérite des méthodes publiques de sa classe mère Point. On peut donc utiliser la méthode afficher dans la classe PointCol void PointCol::afficherCol () const afficher( ); cout<<" et ma couleur est : "<<couleur<<endl; Yacine.Bellik@iut-orsay.fr 14 7

initialisercol La même démarche peut être appliquée pour initialiser un point coloré void PointCol::initialiserCol (int abs, int ord, int coul) initialiser(abs,ord); couleur=coul; Yacine.Bellik@iut-orsay.fr 15 PointCol.h #ifndef _POINTCOL_H_ #define _POINTCOL_H_ #include "Point.h" class PointCol : public Point protected : int couleur; public : void colorer (int c) couleur=c; void affichercol ( ) const; void initialisercol (int,int,int); #endif Yacine.Bellik@iut-orsay.fr 16 8

PointCol.C #include <iostream> #include "PointCol.h" using namespace std; void PointCol::afficherCol () const afficher(); cout<<" et ma couleur est : "<<couleur<<endl; void PointCol::initialiserCol (int abs, int ord, int coul) initialiser(abs,ord); couleur=coul; Yacine.Bellik@iut-orsay.fr 17 Prog.C #include "PointCol.h" void main() PointCol p; p.initialisercol(10,20,5); p.affichercol(); p.afficher(); p.deplacer(2,4); p.affichercol(); p.colorer(2); p.affichercol(); Je suis en 10 20 et ma couleur est : 5 Je suis en 10 20 Je suis en 12 24 et ma couleur est : 5 Je suis en 12 24 et ma couleur est : 2 Yacine.Bellik@iut-orsay.fr 18 9

Redéfinition des membres d une classe dérivée Conceptuellement, afficher et affichercol réalisent le même traitement : affichage il n est donc pas nécessaire d utiliser un nom différent pour les méthodes d affichage d un point monochrome et d un point coloré Utiliser l opérateur :: pour accéder à la méthode de la classe mère Yacine.Bellik@iut-orsay.fr 19 PointCol.h #ifndef _POINTCOL_H_ #define _POINTCOL_H_ #include "Point.h" class PointCol : public Point protected : int couleur; public : void colorer (int c) couleur=c; void afficher () const; void initialiser (int,int,int); #endif Yacine.Bellik@iut-orsay.fr 20 10

PointCol.C #include <iostream> #include "PointCol.h" using namespace std; void PointCol::afficher () const Point::afficher(); cout<<" et ma couleur est : "<<couleur<<endl; void PointCol::initialiser (int abs,int ord, int coul) Point::initialiser(abs,ord); couleur=coul; Yacine.Bellik@iut-orsay.fr 21 Prog.C #include "PointCol.h" void main() PointCol p; p.initialiser(10,20,5); p.afficher(); p.point::afficher(); p.deplacer(2,4); p.afficher(); p.colorer(2); p.afficher(); Je suis en 10 20 et ma couleur est : 5 Je suis en 10 20 Je suis en 12 24 et ma couleur est : 5 Je suis en 12 24 et ma couleur est : 2 Yacine.Bellik@iut-orsay.fr 22 11

Remarque class A class B : public A public : public : int a; float a; char b;...... B x; int i=x.a::a; float r=x.a; Le même principe s applique aux données membres. Yacine.Bellik@iut-orsay.fr 23 Les modificateurs d accès il existe en fait 3 modificateurs d accès private Les membres privés d une classe, ne peuvent être accédés que par les méthodes de cette même classe (et les fonctions amies) public Les membres publiques d une classe, peuvent être accédés par tout le monde (méthodes de cette même classe, méthodes d autres classes et fonctions externes, amies ou non amies) protected Les membres protégés d une classe ne peuvent être accédés que par les méthodes de cette même classe, les fonctions amies et les méthodes des classes directement dérivées. L accès par les méthodes des classes indirectement dérivées (une classe A qui hérite d une classe B qui hérite d une classe C) dépendra du type de Le même principe l héritage. s applique aux données membres. Yacine.Bellik@iut-orsay.fr 24 12

Les types d héritage 1. L héritage publique class PointCol : public Point... Les membres publiques de la classe mère restent publiques dans la classe fille. Les membres protégés de la classe mère restent protégés dans la classe fille. Les membres privés de la classe mère sont inaccessibles. Yacine.Bellik@iut-orsay.fr 25 L héritage publique Statut dans la Nouveau statut dans la classe fille L héritage classe mère publique Accès par les méthodes de la classe fille Accès par des entités externes Public Public Oui Oui Protected Protected Oui Non Les membres publiques de la classe mère restent publiques dans Private la classe fille. Private Non Non Les membres protégés de la classe mère restent protégés dans la classe fille. Entités externes : méthodes d autres classes ou fonctions externes Les membres (non amies) privés de la classe mère sont inaccessibles. Yacine.Bellik@iut-orsay.fr 26 13

Les types d héritage 2. L héritage protégé class PointCol : protected Point... Les membres publiques de la classe mère deviennent protégés dans la classe fille. Les membres protégés de la classe mère restent protégés dans la classe fille. Les membres privés de la classe mère sont inaccessibles. Yacine.Bellik@iut-orsay.fr 27 L héritage protégé Statut dans la classe mère Nouveau statut dans la classe fille Accès par les méthodes de la classe fille Accès par des entités externes Public Protected Oui Non Protected Protected Oui Non Private Private Non Non Yacine.Bellik@iut-orsay.fr 28 14

Les types d héritage 3. L héritage privé class PointCol : private Point... Les membres publiques de la classe mère deviennent privés dans la classe fille. Les membres protégés de la classe mère deviennent privés dans la classe fille. Les membres privés de la classe mère sont inaccessibles. Yacine.Bellik@iut-orsay.fr 29 L héritage privé L héritage publique Statut dans la classe mère Nouveau statut dans la classe fille Accès par les méthodes de la classe fille Accès par des entités externes Public Private Oui Non Protected Private Oui Non Les membres publiques de la classe mère restent publiques dans la classe fille. Les membres Private protégés Private de la classe Non mère restent Non protégés dans la classe fille. Les membres privés de la classe mère sont inaccessibles. Yacine.Bellik@iut-orsay.fr 30 15