Programmation Orientée Objet

Slides:



Advertisements
Présentations similaires
Programmation Orienté Objet en C++
Advertisements

Cours n° 7 Standard Template Library II.
C++ 6ème cours Patrick Reuter maître de conférences
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.
1 Tableaux des objets C++ si on connaît le nombre dobjets nécessaires davance on peut utiliser des tableau dobjets dans les fonctions dusage class Personne.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Programmation Orientée Objet (POO)
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Les fonctions en Java Partie I Le type void. Dans cette rapide présentation, je vais expliquer :.à quoi servent les fonctions.à quoi faut-il penser avant.
Introduction à la POO: Les classes vs les objets
Connexion base de données
1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif.
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Un aéroport.
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
Langage Oriente Objet Cours 4.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Your Logo Here Larticle (larticle défini) fr3 Larticle (larticle défini) fr3 créé par Francine Shirvani.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
POO : Programmation Orientée Objet
Classes abstraites et Interfaces
POO : Objets et classes (Rappels)
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
Introduction au paradigme orienté-objet (suite)
1 PROTOTYPE PGC++ Vecteur_3D DÉFINITION. 2 class Vecteur_3D { private : float vx, vy, vz, vw; // Représentation en coordonnées homogènes. public : Vecteur_3D();
Design Pattern Memento. Principe : Enregistrer les changements d'états d'un objet Objectif : Pouvoir restituer les états précédents d'un objet.
Design Pattern: Decorator
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
COURS DE PROGRAMMATION ORIENTEE OBJET :
1 Fonction : surcharge de sélection La surcharge de sélection consiste à implanter plusieurs méthodes de même nom dans une même classe à condition que.
Introduction au C++ héritage / polymorphisme
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.
C++ : fonctions et opérateurs
CSI1502 Principes fondamentaux en conception des logiciels
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.
Une introduction à Java
Programmation Orienté Objet en C++ Ricard julien.
Introduction à la programmation orientée objet
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 3 Polymorphisme I.
AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Notion de fonction A partir d’un exemple Types de fonctions
La notion de type revisitée en POO
Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Tutorat en bio-informatique
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 3 – Classes et objets en Java Master 1 SIGLIS1 Java Lecteur - Chapitre 3 Classes et objets en Java.
Les opérateurs L’amitié Les opérateurs Introduction
Les surcharges d'opérateurs
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Conception de Programmes - IUT de Paris - 1ère année – Cours 6 - Les opérateurs L’amitié Les opérateurs –Introduction –Surcharge par fonction.
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O. et au.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Master 1 SIGLIS Java Lecteur Stéphane Tallard Correction du TD Chapitre 2.
Introduction à la Programmation Orientée Objet H.GATI.
Int 10. Int 6.
Transcription de la présentation:

Programmation Orientée Objet Héritage

Héritage

Exemple Dans l'avion Paris-Berlin, on peut trouver les personnes suivantes : Pierre : Pilote Paul : coPilote Anne : Hôtesse n°1 Nathalie : Hôtesse n°2 Laure : passager siège n°1 Frédéric : passager siège n°2 etc…

Attributs Chacune de ces personnes peut être représentée sous la forme d'objet. Chacun de ces objets appartient à une de ces catégories : Pilote Hôtesse Passager

Organigramme CPilote CHotesse CPassager Prénom N° de tel Adresse Age Nbre d'heures de vole les constructeurs les accesseurs bool EstFatigue() CHotesse Prénom N° de tel Adresse Age Nbre de langues les constructeurs les accesseurs bool ParlePlus3Langues() CPassager Prénom N° de tel Adresse Age N° de son siège les constructeurs les accesseurs bool Chanceux()

Classe CPilote class CPilote { private: string Prenom; int NTel; string Adresse; int Age; int NbreHeureVole; public: CPilote(…){…} string GetPrenom() {…} void SetPrenom(string prenom) … bool EstFatigue() { return (GetNbreHeureVole()>8); } };

Classe CHotesse CHotesse(…){…} class CHotesse { private: string Prenom; int NTel; string Adresse; int Age; int NbreLangues; public: CHotesse(…){…} string GetPrenom() {…} void SetPrenom(string prenom) … bool ParlePlus3Langues() { return (GetNbreLangues()>2 ); } };

Classe CPassager class CPassager { private: string Prenom; int NTel; string Adresse; int Age; int NumSiege; public: CPassager(…){…} string GetPrenom() {…} void SetPrenom(string prenom) … bool Chanceux() { return (GetNumSiege()!=13); } };

main Je peux maintenant créer mes objets : { CPilote pilote("Pierre",…,5); CPilote coPilote("Paul",…,3); CHotesse hotesse1("Anne",…,4); CHotesse hotesse2("Nathalie",…,2); CPassager passager1("Laure",…,24); CPassager passager2("Frédéric",…,17); cout << pilote.GetPrenom() <<endl; cout << passager2. Dort() <<endl; }

Ouf, enfin fini !!! N'aurait on pas pu gagner du temps en remarquant et en exploitant que ces 3 classes avaient des attributs et des méthodes communes ?

Organigramme CPilote CHotesse CPassager Prénom N° de tel Adresse Age Nbre d'heures de vole les constructeurs les accesseurs bool EstFatigue() CHotesse Prénom N° de tel Adresse Age Nbre de langues les constructeurs les accesseurs bool ParlePlus3Langues() CPassager Prénom N° de tel Adresse Age N° de son siège les constructeurs les accesseurs bool Chanceux()

CPersonne Ces caractéristiques communes peuvent représenter une personne : CPersonne Prénom N° de tel Adresse Age les constructeurs les accesseurs

Classe CPersonne class CPersonne { private: string Prenom; int NTel; string Adresse; int Age; public: CPersonne(…){…} string GetPrenom(){…} void SetPrenom(string pren){…} int GetNTel(){…} void SetNTel(int nTel){…} string GetAdresse(){…} void SetAdresse(string adr){…} int GetAge(){…} void SetAge(int age){…} };

Factorisation Maintenant, on peut dire que : un pilote est une personne une hôtesse est aussi une personne un passager est aussi une personne. Donc un pilote, une hôtesse et un passager possèdent aussi un prénom, un n° de téléphone, une adresse, et un age.

Organigramme CPassager CPersonne CPilote CHotesse N° de son siège les constructeurs les accesseurs bool Chanceux() CPersonne Prénom N° de tel Adresse Age les constructeurs les accesseurs CPilote Nbre d'heures de vole les constructeurs les accesseurs bool EstFatigue() CHotesse Nbre de langues les constructeurs les accesseurs bool ParlePlus3Langues()

Classe CPilote class CPilote : public CPersonne { private: int NbreHeureVole; public: CPilote(…){…} int GetNbreHeureVole() {return NbreHeureVole;} void SetNbreHeureVole(int nb) {NbreHeureVole=nb;} bool EstFatigue() { return (GetNbreHeureVole()>8); } };

Héritage class Mère { }; class Fille : public Mère { }; La classe Fille hérite des attributs et des méthodes de la classe Mère : class Mère { }; class Fille : public Mère { };

Classe CHotesse class CHotesse : public CPersonne { private: int NbreLangues; public: CHotesse(…){…} int GetNbreLangues() {return NbreLangues} void SetNbreLangues(int nbre) {NbreLangues=nbre;} bool ParlePlus3Langues() { return (GetNbreLangues()>2 ); } };

Classe CPassager class CPassager : public CPersonne { private: int NumSiege; public: CPassager(…){…} int GetNumSiege() {return NumSiege} void SetNumSiege(int num) {NumSiege=num;} bool Chanceux() { return (GetNumSiege()!=13 ); } };

main A l'usage, rien n'a changé : { CPilote pilote("Pierre",…,5); CPilote coPilote("Paul",…,3); CHotesse hotesse1("Anne",…,4); CHotesse hotesse2("Nathalie",…,2); CPassager passager1("Laure",…,24); CPassager passager2("Frédéric",…,17); cout << pilote.GetPrenom() <<endl; cout << passager2. Dort() <<endl; }

Constructeur de CPilote CPilote(string prenom, int nTel, string adresse, int age, int nbreHeure) { SetPrenom(prenom); SetNumTel(nTel); SetAdresse(adresse); SetAge(age); SetNbreHeureVole(nbreHeure); } Les constructeurs de CHotesse et de CPersonne divergent de celui de CPilote sur le dernier paramètre.

Constructeur de CPersonne Pour CPersonne, on a besoin d'initialiser que ses attributs CPersonne(string prenom, int nTel, string adresse, int age) { SetPrenom(prenom); SetNumTel(nTel); SetAdresse(adresse); SetAge(age); }

Héritage du constructeur J'utilise le constructeur de CPersonne pour m'aider à "construire" CPilote. CPilote(string prenom, int nTel, string adresse, int age, int nbreHeure) : CPersonne(prenom,nTel,adresse,age) { SetNbreHeureVole(nbreHeure); } Exemple d'usage : CPilote pilote1("Pierre",0321175413,"home",54,9);

Héritage La classe Fille hérite de la classe Mere : class Mere { Mere(type1 par1, type2 par2) … } }; class Fille : public Mère { Fille(type1 par1, type2 par2,…) : Mere(par1,par2) … } };

Héritage du constructeur CHotesse(string prenom, int nTel, string adresse, int age, int nbreLangue) : CPersonne(prenom,nTel,adresse,age) { SetNbreLangue(nbreLangue); } CPassager(string prenom, int nTel, string adresse, int age, int numSiege) : CPersonne(prenom,nTel,adresse,age) { SetNumSiege(numSiege); }

Public/Private public: Tous les attributs ou fonctions situés sous le mot clé sont accessibles en dehors de l’objet ou depuis n'importe quelles fonctions de la classe. private: Tous les attributs ou fonctions situés sous le mot clé ne sont accessibles que depuis les fonctions de l’objet.

Protected Tous les attributs ou fonctions situés sous le mot clé protected: ne sont accessibles que depuis les méthodes de la classe mère et de ses filles. Remarque : c'est une sorte de private: étendue aux classes filles.

Classe CPersonne Supposons qu'on ajoute un protected à la classe CPersonne class CPersonne { private: string Prenom; int NTel; string Adresse; int Age; public: CPersonne(…){…} protected: string GetPrenom(){…} void SetPrenom(string pren){…} int GetNTel(){…} void SetNTel(int nTel){…} string GetAdresse(){…} void SetAdresse(string adr){…} int GetAge(){…} void SetAge(int age){…} };

Accessibilité Les méthodes de la classe CPersonne: GetPrenom, SetPrenom, GetNTel, SetNTel, GetAdresse, SetAdresse, GetAge, SetAge ne sont accessibles que dans CPersonne, CPilote, CHotesse, CPassager Toutes classes qui héritent de CPilote, CHotesse et CPassager et ainsi de suite….

Héritage Multiple

Zoo Supposons la gestion d'un zoo. Pour chaque animal, on décide de conserver son nom ainsi que son age. En plus, notre zoo gère quelques espèces protégées. Pour chacun d'eux, on conserve un numéro d'identification ainsi que le nombre d'individu encore vivant sur Terre. Enfin, chaque espèce possède ses propres caractéristiques.

Conception Comment gérer "simplement" : un dauphin un panda  espèce protégée … héritage : créer une classe contenant le prénom, l'age et les informations sur l'espèce protégée. Chaque classe (pour chaque espèce) en hérite.

CAnimal Un animal peut être représenté ainsi CAnimal Nom Age NumIdentification NbreIndividu les constructeurs les accesseurs

CPanda/CDauphin Nos classes CPanda et CDauphin n'ont plus qu'à hériter NbreTachesNoires NumeroParc les constructeurs les accesseurs CAnimal Nom Age NumIdentification NbreIndividu les constructeurs les accesseurs CDauphin NbreNumeroConnu RecordVitesse les constructeurs les accesseurs Problème : un dauphin n'a pas de numéro d'espèce protégée

Meilleure Solution CAnimal CProtege On peut dire que Un Dauphin est un Animal Un Panda est un Animal - Protégé  On peut extraire de CAnimal les informations sur l'espèce protégée  On obtient alors 2 classes. CAnimal Nom Age les constructeurs les accesseurs CProtege NumIdentification NbreIndividu les constructeurs les accesseurs

CAnimal/CProtege class CAnimal { protected: string Nom; int Age; public : … }; class CProtege { protected: int NumIdentification; int NbreIndividu; public : … };

CPanda/CDauphin CPanda CAnimal CDauphin CProtege NbreTachesNoires NumeroParc les constructeurs les accesseurs CAnimal Nom Age les constructeurs les accesseurs CDauphin NbreNumeroConnu RecordVitesse les constructeurs les accesseurs CProtege NumIdentification NbreIndividu les constructeurs les accesseurs Nos classes CPanda et CDauphin n'ont plus qu'à hériter des classes dont ils ont besoin.

Class CPanda class CDauphin : public CAnimal, public CProtege { private: int NbreTachesNoires; int NumeroParc; public: … };

Héritage Multiple La classe Fille hérite des attributs et des méthodes des classes Mère1, Mère2, Mère3,…Mèren class Fille : public Mère1, public Mère2…, public Mèren { … };

Constructeurs Supposons les constructeurs suivant pour CAnimal et CProtege CAnimal(string nom, int age) { SetNom(nom); SetAge(age); } CProtege(int numId, int nbreIndividu) { SetNumIdentification(numId); SetNbreIndividu(nbreIndividu); }

Constructeur de CPanda Ainsi, pour CPanda, on a besoin d'initialiser que ses attributs CPanda(string nom, int age, int numId, int nbreVivant, nbreTache, int numParc) :CAnimal(nom,age),CProtege(numId,nbreVivant) { SetNbreTachesNoires(nbreTache); SetNumeroParc(numParc); } Exemple d'usage : CPanda panda ("popo",7,147896,64,11,4);

Constructeur multiple La classe Fille hérite des classes Mère1, Mère2, Mère3, … Mèren class Fille : public Mère { Fille(typea par11,…, typeb par1m, …, typec parn1,… , typed parnl, …) : Mère1(par11,…,par1m) ,…, Mèren(parn1,…,parnl) … } };