Héritage Conception par Objet et programmation Java

Slides:



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

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.
Introspection et Réflexion Manipulation dynamique de code Java.
Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Approfondissement du langage
Programmer en JAVA par Tama
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
Leçon 3 : Héritage IUP 2 Génie Informatique
Programmation par Objets et Java
Chapitre III Héritage (début)
VI) exemple: Les astres…
Principes de programmation (suite)
Programmation orientée objet
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Langage Oriente Objet Cours 4.
COURS DE PROGRAMMATION ORIENTEE OBJET :
POO-L3 H. Fauconnier1 C) Méthodes: Redéfinition Un classe hérite des méthodes des classes ancêtres Elle peut ajouter de nouvelles méthodes Elle peut surcharger.
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.
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.
Java Héritage, interfaces.
Langage Oriente Objet Cours 3.
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.
Interfaces : comment classifier ?
Structures de données IFT-2000
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Introduction au paradigme orienté-objet (suite)
POO-L3 H. Fauconnier1 Supplément gratuit…. POO-L3 H. Fauconnier2 Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Formation Développeur Java Programmation objet avec JAVA Partie 2
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.
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 5 Héritage, Interfaces, classes internes. POO-L3 H. Fauconnier2 La classe Object Toutes les classes héritent de la classe Object Object méthodes:
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.
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.
Objectifs À la fin de ce cours, vous serez capables de :
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
Programmation objet. Les classes Une classe représente un concept Une classe est :  un module : elle regroupe la déclaration de données et les opérations.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
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.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Réaliser par: Sadok Amel Cheboui hassiba
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.
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)
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage en Java Professeur: M. Joundi.
Chapitre 7: Héritage Présentation pour Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus Java Software.
Introduction à l'orienté objet. Définition Le terme orienté objet siginifie que l'on organise le logiciel comme une collection d'objets organisée en graphe.
Transcription de la présentation:

Héritage Conception par Objet et programmation Java Année universitaire 2013-2014

Plan du cours Héritage Introduction Classe et objet Encapsulation Polymorphisme Exceptions Interface et Collection

Plan du cours Introduction Notion de l’héritage L’héritage en java Héritage et encapsulation Le mot-clé super La classe Object Héritage

Notion de l’héritage (1/3) Problème Personne nom cin lire() Etudiant nom cin moyenne lire() reviser() Employe nom cin salaire lire() travailler() Duplication de code. Une modification faite sur un attribut (ou méthode) commun doit être refaite dans les autres classes. Héritage -1-

Notion de l’héritage (2/3) Solution Personne nom cin lire() On place dans la classe mère tous les attributs et toutes les méthodes communs à toutes les classes. Super-classe Héritent de Etudiant moyenne reviser() Employe salaire travailler() Les classes filles ne comportent que les attributs ou méthodes plus spécifiques. Les classes filles héritent automatiquement les attributs (et les méthodes) qui n'ont pas besoin d'être ré-écrits. Sous-classes Héritage -2-

Notion de l’héritage (3/3) Solution Personne nom cin lire() Super-classe Réutilisation du code Un seul endroit pour faire des modifications sur les attributs ( ou méthodes) en commun Héritent de Etudiant moyenne reviser() Employe salaire travailler() Sous-classes Héritage -3-

L’héritage en java (1/5) En Java, on indique qu'une classe hérite d'une autre en utilisant le mot-clé "extends" class Personne { String nom; long cin; public void setNom(String nom){ this.nom=nom;} public String getNom(){ return nom;} public void setCin(long cin){ this.cin=cin;} public long getCin(){ return cin;} class Etudiant extends Personne { float moyenne; public void setMoyenne(float moyenne){ this.moyenne=moyenne;} public float getMoyenne (){ return moyenne;} } Héritage -4-

L’héritage en java (2/5) Une classe peut avoir plusieurs sous-classes. Personne nom cin lire() Une super-classe Etudiant moyenne reviser() Employe salaire travailler() Chercheur articles rechercher() Plusieurs sous-classes Héritage -5-

L’héritage en java (3/5) Une classe ne peut avoir qu’une seule classe mère EtreHumain peau yeux respirer() Personne nom cin lire() pas d'héritage multiple en java Etudiant moyenne reviser() class Etudiant extends Personne, EtreHumain Héritage -6-

L’héritage en java (4/5) Héritage en cascade Personne nom cin lire() Etudiant hérite de Personne EtudiantTelecom hérite de Etudiant EtudiantTelecom hérite de Personne Etudiant etudiant=new Etudiant() etudiant.lire(); etudiant.reviser() etudiant.reviserOption(); Etudiant moyenne reviser() EtudiantTelecom etudiantTelecom=new EtudiantTelecom() etudiantTelecom.lire(); etudiantTelecom.reviser() etudiantTelecom.reviserOption(); EtudiantTelecom option reviserOption() Héritage -7-

L’héritage en java (5/5) Héritage en cascade Quel est le nombre de variables de Chirurgien ? Quel est le nombre de variables de MedecinDeFamille ? Combien de méthodes Docteur a-t-il ? Combien de méthodes MedecinDeFamille a-t-il ? MedecinDeFamille peut-il invoquer traiterPatient() ? MedecinDeFamille peut-il invoquer faireUneIncision ? Docteur travailALHopital:boolean traiterPatient() MedecinDeFamille faitVisites: boolean donnerConseil() Chirurgien faireUneIncision: boolean Héritage -8-

Héritage et encapsulation Package 1 Package 2 public class Personne { public String nom; protected String prenom; int age; private long cin; } public class Employe extends Personne Etudiant hérite nom prenom age Employe hérite nom prenom class Etudiant extends Personne Héritage -9-

Le mot-clé super Le mot-clé super permet de désigner la superclasse, super permet d'accéder aux attributs et méthodes de la super-classe Pour manipuler un attribut de la super-classe : super.cin Pour manipuler une méthode de la super-classe : super.lire() Pour faire appel au constructeur de la super-classe: super(nom, cin) Héritage -10-

Constructeur de la sous classe (1/10) Constructeur par défaut class Personne { private String nom; private long cin; public Presonne(){ nom=“Mohamed”; cin=00000000; } class Etudiant extends Personne { private float moyenne; public Etudiant(){ super(); moyenne=10.0f; } super fait appel au constructeur par défaut de la classe mère Héritage -11-

Constructeur de la sous classe (2/10) Constructeur surchargé class Personne { private String nom; private long cin; public Presonne(String nom, long cin){ this.nom=nom; this.cin=cin; } class Etudiant extends Personne { private float moyenne; public Etudiant(String nom, long cin, float moyenne){ super(nom,cin); this.moyenne=moyenne; } super fait appel au constructeur surchargé de la classe mère Héritage -12-

Constructeur de la sous classe (3/10) public class Animal { public int nbPattes; public Animal(int nbPattes) { this.nbPattes = nbPattes; } } Testez l’exemple suivant. Qu’est ce que vous aurez en résultat? public class Chat extends Animal{ } Héritage -13-

Constructeur de la sous classe (4/10) La première instruction dans le constructeur de la sous-classe doit être l’appel au constructeur de la superclasse avec le mot clé super. Si on ne fait pas d’appel explicite au constructeur de la superclasse, c’est le constructeur par défaut de la superclasse qui est appelé implicitement. Héritage -14-

Constructeur de la sous classe (5/10) public class Animal { public int nbPattes; public Animal(int nbPattes) { this.nbPattes = nbPattes; } } Implicit super constructor Animal() is undefined for default constructor. Must define an explicit constructor public class Chat extends Animal{ public Animal(){ super(); } Constructeur par défaut Appel implicite à super Dans notre cas, comme nous avons écrit un constructeur surchargé pour la classe Animal, le constructeur par défaut n'existe pas. On a alors une erreur à la compilation lors de l’exécution de super() Héritage -15-

Constructeur de la sous classe (6/10) Solution 1 Déclarez explicitement le constructeur par défaut de la classe mère public class Animal { public int nbPattes; public Animal(){} public Animal(int nbPattes) { this.nbPattes = nbPattes; } } public class Chat extends Animal{ } Héritage -16-

Constructeur de la sous classe (7/10) Solution 2 Faire un appel explicite au constructeur surchargé de la classe mère public class Animal { public int nbPattes; public Animal(int nbPattes) { this.nbPattes = nbPattes; } public class Chat extends Animal{ public Chat(){ super(4); } Héritage -17-

Constructeur de la sous classe (8/10) Enchaînement des consctructeurs public class Humain{ public Humain() { Sytem.out.println(“Je suis un être humain”); } public class Client extends Humain { public Client (){ Sytem.out.println(“Je suis un client”); } public class Client Fidele extends Client { public Client Fidele(){ Sytem.out.println(“Je suis un être client fidèle”); } Héritage -18-

Constructeur de la sous classe (9/10) Enchaînement des consctructeurs ClientFidele cFidele=new ClientFidele(); Je suis un être humain Je suis un client Je suis un client fidèle Héritage -19-

Constructeur de la sous classe (10/10) Enchaînement des consctructeurs public class Humain{ public Humain() { super() ; Sytem.out.println(“Je suis un être humain”); } public class Client extends Humain { public Client (){ super(); Sytem.out.println(“Je suis un client”); } public class Client Fidele extends Client { public Client Fidele(){ super() ; Sytem.out.println(“Je suis un être client fidèle”); } Appel implicite à super Héritage -20-

Redéfinition des méthodes class Personne { public void lire() { System.out.println(“Je sais lire”); } La classe Etudiant hérite la méthode lire() mais on veut changer son traitement On garde la même signature de la méthode lire et on change le corps class Etudiant extends Personne { public void lire() { System.out.println(“Je suis un étudiant”); System.out.println(“Je sais lire”); } On parle alors de redéfinition (override) Héritage -21-

Redéfinition avec réutilisation class Personne { public void lire() { System.out.println(“Je sais lire”); } class Etudiant extends Personne { public void lire() { System.out.println(“Je suis un étudiant”); super.lire(); } Possibilité de réutiliser le code de la méthode héritée (super) Héritage -22-

Surcharge class Personne { public void lire() { System.out.println(“Je sais lire”); } On garde la même nom de la méthode, le même type de retour et on change les paramètres class Etudiant extends Personne { public void lire(String titreLivre) { System.out.println(“Je sais lire”); System.out.println(“J’ai lu le livre ”+titreLivre); } On parle alors de surcharge (overload) Héritage -23-

Surcharge vs redéfinition class Personne { public void lire() { System.out.println(“Je sais lire”); } class Etudiant extends Personne { public void lire(String titreLivre) { System.out.println(“J’ai lu le livre ”+titreLivre); surcharge Etudiant possède deux méthodes lire() lire(String) redéfinition Etudiant possède une seule méthode lire() class Etudiant extends Personne { public void lire() { System.out.println(“Je suis un étudiant”); super.lire(); } Héritage -24-

Empêcher la redéfinition Une classe peut protéger une méthode afin d'éviter qu'elle ne soit redéfinie dans ses sous-classes. En Java, on va simplement ajouter le modificateur final dans la signature de la méthode. public final void lire() Héritage -25-

Empêcher l’héritage Une classe déclarée final ne peut pas être dérivée Permet d’interdire tout héritage pour cette classe qui ne pourra pas être une classe mère Toutes les méthodes à l’intérieur de la classe final seront implicitement finales class final Personne Héritage -26-

La classe Object (1/2) Toutes les classes java héritent implicitement de la classe Object. On dit alors que la classe Object est l’ancêtre de toutes les classes Object Personne nom cin lire() Humain Docteur travailALHopital:boolean traiterPatient() Client MedecinDeFamille faitVisites: boolean donnerConseil() Chirurgien faireUneIncision: boolean Etudiant moyenne reviser() Employe salaire travailler() Chercheur articles rechercher() ClientFidele Héritage -27-

La classe Object (2/2) public boolean equals ( Object o ) Méthodes importantes de la classe Object : public String toString() public boolean equals ( Object o ) public final Class getClass() public int hashcode() Héritage -28-

La méthode equals (1/3) La méthode equals détermine si deux objets sont égaux ou non. Son implémentation dans la classe Object vérifie que les références d’objets sont identiques. On aura souvent besoin de redéfinir la méthode equals : deux objets seront égaux quand ils auront le même état. Héritage -29-

La méthode equals (2/3) Redéfinition de la méthode equals pour la classe Personne Deux personnes sont égaux s’ils ont le même cin et le même nom public boolean equals(Object obj) {         if(obj instanceof Personne){         Personne personne = (Personne) obj; if(nom==personne.nom &&cin==personne.cin) { return true; } return false;     } Héritage -30-

La méthode equals (3/3) Erreur courante Faire la surcharge au lieu de la redéfinition public boolean eqauls(Personne obj) public boolean eqauls(Object obj) Héritage -31-