SlideShare une entreprise Scribd logo
1  sur  24
Chapitre 4
Héritage & polymorphisme
Cours réalisé par:
Mme Meriem Ennigrou
Support de cours POO
1
Définition
2
 Technique permettant de définir une nouvelle classe
appelée classe fille ou sous-classe à partir d’une
classe de base appelée classe mère ou super classe
 La classe fille hérite tous les membres de sa classe
mère : attributs et méthodes et rajoute ses propres
membres qui la diffère de sa classe mère
 JAVA ne permet que l’héritage simple alors que
l’héritage multiple n’est pas accepté. Une classe ne
peut avoir qu’une seule classe mère.
 Syntaxe
class nomClasseFille extends nomClasseBase
{//définition des propriétés spécifiques à la sous-classe}
Héritage en JAVA
3
 Une sous-classe ne peut accéder aux propriétés
private de sa classe mère
 Une sous-classe peut accéder aux propriétés
protected, public et par défaut de sa classe mère
Héritage en JAVA
4
class c1 {
public int A;
protected int B;
int C;
private int D;
}
class c3 {
...
}
class c5 {
...
}
A B C D
Accessible par c2 o o o -
Accessible par c3 o o o -
Accessible par c4 o o - -
Accessible par c5 o - - -
Package P1 Package P2
class c4 extends c1 {
...
}
class c2 extends c1 {
...
}
Redéfinition de méthodes
5
 Il est possible qu’une classe fille redéfinit une des
méthodes de la classe mère  on parle alors de
redéfinition. Dans ce cas, la méthode redéfinie sera
de même nom, de même type et de mêmes
paramètres
 Redéfinition ≠ surdéfinition (surcharge) : méthodes
de même nom mais de paramètres différents
 Une méthode redéfinie dans une sous-classe peut
appeler celle qui est définie dans la super-classe.
 Comme les 2 méthodes sont de même nom et afin
d’éviter l’appel récursif à la méthode de la sous-
classe, on utilise le mot clé super qui désigne la
Mot clé super
6
 Le constructeur de la sous-classe peut appeler celui
de la classe mère.
 Le mot clé super désigne dans ce cas le
constructeur de la classe mère
 Attention le constructeur de la classe fille doit
comporter au moins les paramètres de la classe
mère
 L’instruction d’appel du constructeur de la classe
mère doit être la première instruction dans le
constructeur de la classe fille
Redéfinition de méthodes - Exemple
7
class Personne
protected String nom;
protected String prenom;
Personne (String n, String p){
this.nom=n;
this.prenom=p;}
public void toString () {
System.out.println(nom + " " + prenom);}
}
class Etudiant extends Personne {
private String groupe;
Etudiant (String n, String p, String g) {
super(n,p);
this.groupe=g;}
pubic void toString(){
super.toString();
System.out.println(" inscrit en " + groupe);}
}
Exercice
8
Implémenter les classes Personne, Enseignant et
Etudiant comme suit :
Classe Personne Classe
Enseignant
Classe Etudiant
Attributs nom
prénom
rue
ville
nbPersonnes
specialite
remplaçant *
nbEnseignants
diplomeEnCours
moyenne
nbEtudiants
Méthodes Personne(n,p,r,v)
toString()
nbPersonnes()
ModiferPersonne(r,v)
Enseignant(n,p,r,v,s)
toString()
nbEnseignants()
affecterRemplaçant(e)
Etudiant(n,p,r,v,d,m)
toString()
nbEtudiants
* L’enseignant pouvant remplacer l’enseignant courant en cas de besoin
Exercice – Correction
9
public class Personne {
protected String nom;
protected String prenom;
protected String rue;
protected String ville;
protected static int nbPersonnes = 0;
Personne (String n, String p, String r, String v) {
this.nom=n;
this.prenom=p;
this.rue=r;
this.ville=v;
nbPersonnes++;
}
public String toString(){
return nom + " " +prenom + " " +rue+ " " +ville+ " " ;
}
Exercice – Correction
10
static void nbPersonnes(){
System.out.println(
"nNombre de personnes :" + nbPersonnes +
"nNombre d’enseignants :" + Enseignant.nbEnseignants() +
"nNombre d’étudiants :" + Etudiant.nbEtudiants());
}
Void modifierPersonne (String rue, String ville){
this.rue=rue;
this.ville=ville;
}
}
Exercice – Correction
11
Class Enseignant extends Personne{
private String specialite;
private Enseignant remplacant;
private static int nbEnseignants = 0;
Enseignant (String n, String p, String r, String v, String s) {
super(n,p,r,v);
this.specialite=s;
nbEnseignants++;}
public String toString(){
if (remplacant != null) {return super.toString() + "n
spécialité : " +specialite + "et est remplacé par" +
remplacant.nom + " "+ remplacant.prenom } else {return
super.toString() + "n spécialité : " +specialite };
}
static int nbEnseignants(){reurn nbEnseignants;}
public void affecterRemplacant(Enseignant e) {
remplacant = e;
}
}
Exercice – Correction
12
Class Etudiant extends Personne{
private String diplomeEnCours;
private double moyenne;
private static int nbEtudiants = 0;
Etudiant (String n, String p, String r, String v, String d,
double m ) {
super(n,p,r,v);
this.diplomeEnCours=d;
this.moyenne=m;
nbEtudiants++;
}
public String toString(){
return super.toString() + "n Diplôme en cours : "
+diplomeEnCours + "de moyenne " + moyenne;
}
static int nbEtudiants(){return nbEtudiants;}
public double moyenne() {return moyenne;}
}
Exercice
13
Ecrire le main dans une autre classe appelée Principale
permettant de créer une personne, un étudiant et
deux enseignants e1 et e2 tels que e2 est le
remplaçant de e1. Ce programme permettra
également d’afficher le nombre de personnes,
d’étudiants et d’enseignants créés à chaque fois
Exercice – Correction
14
public class Principale{
public static void main (String [] args){
String a = JOptionPane.showInputDialog("Entrer le nom");
String b = JOptionPane.showInputDialog("Entrer le prénom");
String c = JOptionPane.showInputDialog("Entrer la rue");
String d = JOptionPane.showInputDialog("Entrer la ville");
Personne p = new Personne(a,b,c,d);
System.out.println(p.toString());
p.nbPersonnes();
a = JOptionPane.showInputDialog("Entrer le nom de l’étudiant");
b=JOptionPane.showInputDialog("Entrer le prénom de
l’étudiant");
c = JOptionPane.showInputDialog("Entrer la rue de l’étudiant");
d=JOptionPane.showInputDialog("Entrer la ville de l’étudiant");
String f = JOptionPane.showInputDialog("Entrer le diplôme");
double m = Double.parseDouble(JOptionPane.showInputDialog
("Entrer la moyenne"));
Etudiant e = new Etudiant(a,b,c,d,f,m);
Exercice – Correction
15
System.out.println(e.toString());
Personne.nbPersonnes();
Etudiant.nbEtudiant();
a = JOptionPane.showInputDialog("Entrer le nom de
l’enseignant1");
b=JOptionPane.showInputDialog("Entrer le prénom de
l’enseignant1");
c = JOptionPane.showInputDialog("Entrer la rue de
l’enseignant1");
d=JOptionPane.showInputDialog("Entrer la ville de
l’enseignant1");
String g = JOptionPane.showInputDialog("Entrer la spécialité de
l’enseignant1");
Enseignant e1 = new Enseignant(a,b,c,d,g);
a = JOptionPane.showInputDialog("Entrer le nom de
l’enseignant2");
b=JOptionPane.showInputDialog("Entrer le prénom de
l’enseignant2");
c = JOptionPane.showInputDialog("Entrer la rue de
l’enseignant2");
Exercice – Correction
16
d=JOptionPane.showInputDialog("Entrer la ville de
l’enseignant2");
String g = JOptionPane.showInputDialog("Entrer la spécialité de
l’enseignant2");
Enseignant e2 = new Enseignant(a,b,c,d,g);
e1.affecterRemplacant(e2);
System.out.println(e1.toString());
System.out.println(e2.toString());
Personne.nbPersonnes();
Etudiant.nbEtudiant();
Enseignant.nbEnseignant();
}
}
Exercice
17
Ecrire un autre programme main dans une autre classe
appelée Principale2 permettant de créer un tableau
de 5 étudiants et de calculer la moyenne
arithmétique de leur moyenne
Exercice – Correction
18
public class Principale2{
public static void main (String [] args){
Etudiant[] T = new Etudiant[5];
String a = new String();
String b = new String();
String c = new String();
String d = new String();
String f = new String();
double m;
int i;
for (i = 0; i<T.length; i++) {
a = JOptionPane.showInputDialog("Entrer le nom de l’étudiant
" + i);
b = JOptionPane.showInputDialog("Entrer le prénom de
l’étudiant " + i);
c = JOptionPane.showInputDialog("Entrer la rue de l’étudiant
" + i);
d = JOptionPane.showInputDialog("Entrer la ville de
l’étudiant " + i););
Exercice – Correction
19
String f = JOptionPane.showInputDialog("Entrer le diplôme");
m = Double.parseDouble(JOptionPane.showInputDialog ("Entrer la
moyenne"));
T[i] = new Etudiant(a,b,c,d,f,m);
}
int s=0;
for (i = 0; i<T.length; i++) s=s+T[i].moyenne();
System.out.println("la moyenne arithmétique est " + s/5);
}
}
Les classes et méthodes finales
20
 Une classe est dite finale si elle ne peut plus être
héritée par une autre classe
 Elle correspond à une feuille dans une
représentation arborescente de l’héritage
 Pour déclarer une classe finale on la fait précéder
par le mot clé final
final class nomClasse
 Une méthode déclarée dans une classe mère est
dite finale si elle ne peut plus être redéfinie dans
les classes filles
 Pour déclarer une méthode finale on utilise final
public final type nomMéthode (paramètres)
Les classes et méthodes abstraites
21
 Une méthode d’une super-classe est dite abstraite
si elle n’a pas de corps, elle a juste une signature.
 Une méthode abstraite doit donc être redéfinie
dans l’une des sous-classes.
 Une méthode abstraite ne peut pas être exécuté
 Pour déclarer une méthode abstraite on utilise le
mot clé abstract dans son entête.
public abstract type nomMéthode (paramètres)
Les classes et méthodes abstraites
22
 Une classe est dite abstraite si elle contient au
moins une méthode abstraite
 Cette classe ne peut pas être instanciée (on ne peut
pas créer d’objets de cette classe)
 Seules les sous-classes qui redéfinissent toutes les
méthodes abstraites sont instanciables
 Pour déclarer une classe abstraite on la fait
précéder par le mot clé abstract
 Une sous-classe d’une classe abstraite ne
redéfinissant pas toutes les méthodes abstraite est-
elle-même abstraite
Les classes et méthodes abstraites –
Exemple
23
class abstract Forme{
public abstract double perimetre();
public abstract double surface();
}
class Cercle extends Forme{
private int rayon;
private Point centre;
public double perimetre() { return 2 * Math.PI * r ; }
}
class Rectangle extends Forme{
...
public double perimetre() { return 2 * (hauteur+
largeur); }
}
...
Forme[] formes= {new Cercle(2), new Rectangle(2,3), new
Cercle(5)};
double som_perimetres = 0;
for(int i=0; i<formes.length; i++)
som_perimetres = formes[i].perimetre();
Les interfaces
24
 Une interface est une classe abstraite particulière :
 Qui ne contient aucun attribut
 Peut contenir des constantes
 Toutes ses méthodes sont abstraites
 Pour déclarer une interface, on utilise le mot clé interface
public interface nomInterface {
//liste des signatures des méthodes}
 Il doit y avoir une(des) classe(s) qui implémente les
méthodes d’une interface
 Si une classe implémente une interface elle doit
implémenter toutes les méthodes de cette interface
 Une classe peut implémenter une ou plusieurs interfaces.
On utilise le mot clé implements une seule fois
public class nomClasse implements interface1,

Contenu connexe

Tendances

Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux javaInes Ouaz
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objetAmir Souissi
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donneesAmir Souissi
 
Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !Aurélien Regat-Barrel
 
Chap 03 poo en java partie1
Chap 03 poo en java partie1Chap 03 poo en java partie1
Chap 03 poo en java partie1Yassine Badri
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonAbdoulaye Dieng
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationMouna Torjmen
 
Chap 03 poo en java partie2
Chap 03 poo en java partie2Chap 03 poo en java partie2
Chap 03 poo en java partie2Yassine Badri
 
Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]Yassine Badri
 
Csharp3 heritage-polymorphisme-interface
Csharp3 heritage-polymorphisme-interfaceCsharp3 heritage-polymorphisme-interface
Csharp3 heritage-polymorphisme-interfaceAbdoulaye Dieng
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objetsAbdoulaye Dieng
 

Tendances (20)

Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux java
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donnees
 
Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !
 
Cours java
Cours javaCours java
Cours java
 
Theme 10
Theme 10Theme 10
Theme 10
 
Chap 03 poo en java partie1
Chap 03 poo en java partie1Chap 03 poo en java partie1
Chap 03 poo en java partie1
 
Cpp3 : heritage
Cpp3 : heritageCpp3 : heritage
Cpp3 : heritage
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
 
Chap 03 poo en java partie2
Chap 03 poo en java partie2Chap 03 poo en java partie2
Chap 03 poo en java partie2
 
Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]
 
Cours c++
Cours c++Cours c++
Cours c++
 
Csharp3 heritage-polymorphisme-interface
Csharp3 heritage-polymorphisme-interfaceCsharp3 heritage-polymorphisme-interface
Csharp3 heritage-polymorphisme-interface
 
Theme 10
Theme 10Theme 10
Theme 10
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
La méthode z
La méthode zLa méthode z
La méthode z
 
Chapitre3 2013 POO
Chapitre3 2013 POOChapitre3 2013 POO
Chapitre3 2013 POO
 
La méthode z validation
La méthode z validation La méthode z validation
La méthode z validation
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 

Similaire à Chapitre 4 la programmation oriénté objet

Chap 4 L'heritage.pdf
Chap 4 L'heritage.pdfChap 4 L'heritage.pdf
Chap 4 L'heritage.pdfHamzaElgari
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismeMouna Torjmen
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAAymen Bedwivski
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaAmel Morchdi
 
chapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdfchapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdfMoez Moezm
 
chapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfchapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfMoez Moezm
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objetsAziz Darouichi
 
Enrichissez vos classes avec extends
Enrichissez vos classes avec extendsEnrichissez vos classes avec extends
Enrichissez vos classes avec extendsAsmaa BENGUEDDACH
 
Héritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfHéritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfAabidiHafid
 
correctionTD2JAVA.pdf
correctionTD2JAVA.pdfcorrectionTD2JAVA.pdf
correctionTD2JAVA.pdfMbarkiIsraa
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
PHP 5 pour les développeurs Java
PHP 5 pour les développeurs JavaPHP 5 pour les développeurs Java
PHP 5 pour les développeurs JavaMehdi EL KRARI
 
classes-anonymes.pdf
classes-anonymes.pdfclasses-anonymes.pdf
classes-anonymes.pdfArouNa3
 
Introspection reflection
Introspection reflectionIntrospection reflection
Introspection reflectionEric Toguem
 
Héritage dans cpp dev informatique ingenierie
Héritage dans cpp dev informatique ingenierieHéritage dans cpp dev informatique ingenierie
Héritage dans cpp dev informatique ingenierieMohammedAmineELHARCH1
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdframadanmahdi
 

Similaire à Chapitre 4 la programmation oriénté objet (20)

Chap 4 L'heritage.pdf
Chap 4 L'heritage.pdfChap 4 L'heritage.pdf
Chap 4 L'heritage.pdf
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et Polymorphisme
 
Cours5-heritage.pptx
Cours5-heritage.pptxCours5-heritage.pptx
Cours5-heritage.pptx
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVA
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
 
22-reflection.pdf
22-reflection.pdf22-reflection.pdf
22-reflection.pdf
 
chapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdfchapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdf
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
chapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfchapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdf
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
 
Enrichissez vos classes avec extends
Enrichissez vos classes avec extendsEnrichissez vos classes avec extends
Enrichissez vos classes avec extends
 
Héritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfHéritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdf
 
correctionTD2JAVA.pdf
correctionTD2JAVA.pdfcorrectionTD2JAVA.pdf
correctionTD2JAVA.pdf
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
PHP 5 pour les développeurs Java
PHP 5 pour les développeurs JavaPHP 5 pour les développeurs Java
PHP 5 pour les développeurs Java
 
classes-anonymes.pdf
classes-anonymes.pdfclasses-anonymes.pdf
classes-anonymes.pdf
 
Introspection reflection
Introspection reflectionIntrospection reflection
Introspection reflection
 
Héritage dans cpp dev informatique ingenierie
Héritage dans cpp dev informatique ingenierieHéritage dans cpp dev informatique ingenierie
Héritage dans cpp dev informatique ingenierie
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
 

Dernier

firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirstjob4
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestionyakinekaidouchi1
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésSana REFAI
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Ville de Châteauguay
 
optimisation logistique MLT_231102_155827.pdf
optimisation logistique  MLT_231102_155827.pdfoptimisation logistique  MLT_231102_155827.pdf
optimisation logistique MLT_231102_155827.pdfSoukainaMounawir
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de planchermansouriahlam
 

Dernier (7)

firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdf
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestion
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigés
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
optimisation logistique MLT_231102_155827.pdf
optimisation logistique  MLT_231102_155827.pdfoptimisation logistique  MLT_231102_155827.pdf
optimisation logistique MLT_231102_155827.pdf
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
 

Chapitre 4 la programmation oriénté objet

  • 1. Chapitre 4 Héritage & polymorphisme Cours réalisé par: Mme Meriem Ennigrou Support de cours POO 1
  • 2. Définition 2  Technique permettant de définir une nouvelle classe appelée classe fille ou sous-classe à partir d’une classe de base appelée classe mère ou super classe  La classe fille hérite tous les membres de sa classe mère : attributs et méthodes et rajoute ses propres membres qui la diffère de sa classe mère  JAVA ne permet que l’héritage simple alors que l’héritage multiple n’est pas accepté. Une classe ne peut avoir qu’une seule classe mère.  Syntaxe class nomClasseFille extends nomClasseBase {//définition des propriétés spécifiques à la sous-classe}
  • 3. Héritage en JAVA 3  Une sous-classe ne peut accéder aux propriétés private de sa classe mère  Une sous-classe peut accéder aux propriétés protected, public et par défaut de sa classe mère
  • 4. Héritage en JAVA 4 class c1 { public int A; protected int B; int C; private int D; } class c3 { ... } class c5 { ... } A B C D Accessible par c2 o o o - Accessible par c3 o o o - Accessible par c4 o o - - Accessible par c5 o - - - Package P1 Package P2 class c4 extends c1 { ... } class c2 extends c1 { ... }
  • 5. Redéfinition de méthodes 5  Il est possible qu’une classe fille redéfinit une des méthodes de la classe mère  on parle alors de redéfinition. Dans ce cas, la méthode redéfinie sera de même nom, de même type et de mêmes paramètres  Redéfinition ≠ surdéfinition (surcharge) : méthodes de même nom mais de paramètres différents  Une méthode redéfinie dans une sous-classe peut appeler celle qui est définie dans la super-classe.  Comme les 2 méthodes sont de même nom et afin d’éviter l’appel récursif à la méthode de la sous- classe, on utilise le mot clé super qui désigne la
  • 6. Mot clé super 6  Le constructeur de la sous-classe peut appeler celui de la classe mère.  Le mot clé super désigne dans ce cas le constructeur de la classe mère  Attention le constructeur de la classe fille doit comporter au moins les paramètres de la classe mère  L’instruction d’appel du constructeur de la classe mère doit être la première instruction dans le constructeur de la classe fille
  • 7. Redéfinition de méthodes - Exemple 7 class Personne protected String nom; protected String prenom; Personne (String n, String p){ this.nom=n; this.prenom=p;} public void toString () { System.out.println(nom + " " + prenom);} } class Etudiant extends Personne { private String groupe; Etudiant (String n, String p, String g) { super(n,p); this.groupe=g;} pubic void toString(){ super.toString(); System.out.println(" inscrit en " + groupe);} }
  • 8. Exercice 8 Implémenter les classes Personne, Enseignant et Etudiant comme suit : Classe Personne Classe Enseignant Classe Etudiant Attributs nom prénom rue ville nbPersonnes specialite remplaçant * nbEnseignants diplomeEnCours moyenne nbEtudiants Méthodes Personne(n,p,r,v) toString() nbPersonnes() ModiferPersonne(r,v) Enseignant(n,p,r,v,s) toString() nbEnseignants() affecterRemplaçant(e) Etudiant(n,p,r,v,d,m) toString() nbEtudiants * L’enseignant pouvant remplacer l’enseignant courant en cas de besoin
  • 9. Exercice – Correction 9 public class Personne { protected String nom; protected String prenom; protected String rue; protected String ville; protected static int nbPersonnes = 0; Personne (String n, String p, String r, String v) { this.nom=n; this.prenom=p; this.rue=r; this.ville=v; nbPersonnes++; } public String toString(){ return nom + " " +prenom + " " +rue+ " " +ville+ " " ; }
  • 10. Exercice – Correction 10 static void nbPersonnes(){ System.out.println( "nNombre de personnes :" + nbPersonnes + "nNombre d’enseignants :" + Enseignant.nbEnseignants() + "nNombre d’étudiants :" + Etudiant.nbEtudiants()); } Void modifierPersonne (String rue, String ville){ this.rue=rue; this.ville=ville; } }
  • 11. Exercice – Correction 11 Class Enseignant extends Personne{ private String specialite; private Enseignant remplacant; private static int nbEnseignants = 0; Enseignant (String n, String p, String r, String v, String s) { super(n,p,r,v); this.specialite=s; nbEnseignants++;} public String toString(){ if (remplacant != null) {return super.toString() + "n spécialité : " +specialite + "et est remplacé par" + remplacant.nom + " "+ remplacant.prenom } else {return super.toString() + "n spécialité : " +specialite }; } static int nbEnseignants(){reurn nbEnseignants;} public void affecterRemplacant(Enseignant e) { remplacant = e; } }
  • 12. Exercice – Correction 12 Class Etudiant extends Personne{ private String diplomeEnCours; private double moyenne; private static int nbEtudiants = 0; Etudiant (String n, String p, String r, String v, String d, double m ) { super(n,p,r,v); this.diplomeEnCours=d; this.moyenne=m; nbEtudiants++; } public String toString(){ return super.toString() + "n Diplôme en cours : " +diplomeEnCours + "de moyenne " + moyenne; } static int nbEtudiants(){return nbEtudiants;} public double moyenne() {return moyenne;} }
  • 13. Exercice 13 Ecrire le main dans une autre classe appelée Principale permettant de créer une personne, un étudiant et deux enseignants e1 et e2 tels que e2 est le remplaçant de e1. Ce programme permettra également d’afficher le nombre de personnes, d’étudiants et d’enseignants créés à chaque fois
  • 14. Exercice – Correction 14 public class Principale{ public static void main (String [] args){ String a = JOptionPane.showInputDialog("Entrer le nom"); String b = JOptionPane.showInputDialog("Entrer le prénom"); String c = JOptionPane.showInputDialog("Entrer la rue"); String d = JOptionPane.showInputDialog("Entrer la ville"); Personne p = new Personne(a,b,c,d); System.out.println(p.toString()); p.nbPersonnes(); a = JOptionPane.showInputDialog("Entrer le nom de l’étudiant"); b=JOptionPane.showInputDialog("Entrer le prénom de l’étudiant"); c = JOptionPane.showInputDialog("Entrer la rue de l’étudiant"); d=JOptionPane.showInputDialog("Entrer la ville de l’étudiant"); String f = JOptionPane.showInputDialog("Entrer le diplôme"); double m = Double.parseDouble(JOptionPane.showInputDialog ("Entrer la moyenne")); Etudiant e = new Etudiant(a,b,c,d,f,m);
  • 15. Exercice – Correction 15 System.out.println(e.toString()); Personne.nbPersonnes(); Etudiant.nbEtudiant(); a = JOptionPane.showInputDialog("Entrer le nom de l’enseignant1"); b=JOptionPane.showInputDialog("Entrer le prénom de l’enseignant1"); c = JOptionPane.showInputDialog("Entrer la rue de l’enseignant1"); d=JOptionPane.showInputDialog("Entrer la ville de l’enseignant1"); String g = JOptionPane.showInputDialog("Entrer la spécialité de l’enseignant1"); Enseignant e1 = new Enseignant(a,b,c,d,g); a = JOptionPane.showInputDialog("Entrer le nom de l’enseignant2"); b=JOptionPane.showInputDialog("Entrer le prénom de l’enseignant2"); c = JOptionPane.showInputDialog("Entrer la rue de l’enseignant2");
  • 16. Exercice – Correction 16 d=JOptionPane.showInputDialog("Entrer la ville de l’enseignant2"); String g = JOptionPane.showInputDialog("Entrer la spécialité de l’enseignant2"); Enseignant e2 = new Enseignant(a,b,c,d,g); e1.affecterRemplacant(e2); System.out.println(e1.toString()); System.out.println(e2.toString()); Personne.nbPersonnes(); Etudiant.nbEtudiant(); Enseignant.nbEnseignant(); } }
  • 17. Exercice 17 Ecrire un autre programme main dans une autre classe appelée Principale2 permettant de créer un tableau de 5 étudiants et de calculer la moyenne arithmétique de leur moyenne
  • 18. Exercice – Correction 18 public class Principale2{ public static void main (String [] args){ Etudiant[] T = new Etudiant[5]; String a = new String(); String b = new String(); String c = new String(); String d = new String(); String f = new String(); double m; int i; for (i = 0; i<T.length; i++) { a = JOptionPane.showInputDialog("Entrer le nom de l’étudiant " + i); b = JOptionPane.showInputDialog("Entrer le prénom de l’étudiant " + i); c = JOptionPane.showInputDialog("Entrer la rue de l’étudiant " + i); d = JOptionPane.showInputDialog("Entrer la ville de l’étudiant " + i););
  • 19. Exercice – Correction 19 String f = JOptionPane.showInputDialog("Entrer le diplôme"); m = Double.parseDouble(JOptionPane.showInputDialog ("Entrer la moyenne")); T[i] = new Etudiant(a,b,c,d,f,m); } int s=0; for (i = 0; i<T.length; i++) s=s+T[i].moyenne(); System.out.println("la moyenne arithmétique est " + s/5); } }
  • 20. Les classes et méthodes finales 20  Une classe est dite finale si elle ne peut plus être héritée par une autre classe  Elle correspond à une feuille dans une représentation arborescente de l’héritage  Pour déclarer une classe finale on la fait précéder par le mot clé final final class nomClasse  Une méthode déclarée dans une classe mère est dite finale si elle ne peut plus être redéfinie dans les classes filles  Pour déclarer une méthode finale on utilise final public final type nomMéthode (paramètres)
  • 21. Les classes et méthodes abstraites 21  Une méthode d’une super-classe est dite abstraite si elle n’a pas de corps, elle a juste une signature.  Une méthode abstraite doit donc être redéfinie dans l’une des sous-classes.  Une méthode abstraite ne peut pas être exécuté  Pour déclarer une méthode abstraite on utilise le mot clé abstract dans son entête. public abstract type nomMéthode (paramètres)
  • 22. Les classes et méthodes abstraites 22  Une classe est dite abstraite si elle contient au moins une méthode abstraite  Cette classe ne peut pas être instanciée (on ne peut pas créer d’objets de cette classe)  Seules les sous-classes qui redéfinissent toutes les méthodes abstraites sont instanciables  Pour déclarer une classe abstraite on la fait précéder par le mot clé abstract  Une sous-classe d’une classe abstraite ne redéfinissant pas toutes les méthodes abstraite est- elle-même abstraite
  • 23. Les classes et méthodes abstraites – Exemple 23 class abstract Forme{ public abstract double perimetre(); public abstract double surface(); } class Cercle extends Forme{ private int rayon; private Point centre; public double perimetre() { return 2 * Math.PI * r ; } } class Rectangle extends Forme{ ... public double perimetre() { return 2 * (hauteur+ largeur); } } ... Forme[] formes= {new Cercle(2), new Rectangle(2,3), new Cercle(5)}; double som_perimetres = 0; for(int i=0; i<formes.length; i++) som_perimetres = formes[i].perimetre();
  • 24. Les interfaces 24  Une interface est une classe abstraite particulière :  Qui ne contient aucun attribut  Peut contenir des constantes  Toutes ses méthodes sont abstraites  Pour déclarer une interface, on utilise le mot clé interface public interface nomInterface { //liste des signatures des méthodes}  Il doit y avoir une(des) classe(s) qui implémente les méthodes d’une interface  Si une classe implémente une interface elle doit implémenter toutes les méthodes de cette interface  Une classe peut implémenter une ou plusieurs interfaces. On utilise le mot clé implements une seule fois public class nomClasse implements interface1,

Notes de l'éditeur

  1. 2
  2. 3
  3. 4
  4. 5
  5. 6
  6. 7
  7. 8
  8. 9
  9. 10
  10. 11
  11. 12
  12. 13
  13. 14
  14. 15
  15. 16
  16. 17
  17. 18
  18. 19
  19. 20
  20. 21
  21. 22
  22. 23
  23. 24