Programmation Orient´ee Objet
Chapitre 4: H´eritage et Interface
Dr. Mouna Chebbah
Dr. Mouna Chebbah
L2BC
ESEN
Semestre 1, 2020
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
1/37
Principe (1/3)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
D´efinition d’une hi´erarchie de types:
§ T: un super-type. C’est un type qui a un ou plusieurs
sous-types.
§ ST: un sous-type de T.
§ Un super type T peut avoir plusieurs sous-type {ST1, . . . ,
STn}.
§ Un sous-type ST ne peut avoir qu’un seul super-type T.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
2/37
Principe (2/3)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
3/37
Principe (3/3)
D’une fa¸con g´en´erale:
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
§ Toute instance d’un sous-type ST poss`ede des propri´et´es, des
variables et des m´ethodes, d´efinies par un super-type T de ST.
§ Toute op´eration definie par T (utilisant ces variables) est
applicable aux instances de ST. Il n’est pas n´ec´essaire de la
d´efinir lorsqu’on d´efinit ST.
§ Les m´ethodes d´efinies par T sont applicables aux instances de
T et de ST. Elles sont polymorphes. ST est un type
polymorphique.
§ Toutes les propri´et´ees de ST d´efinies au niveau de T, sont
dites h´erit´ees par ST.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
4/37
H´eritage
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
La relation “est sous classe de” induit un h´eritage.
Une sous-classe h´erite tous les membres non-priv´es de sa
super-classe.
L’h´eritage facilite la r´eutilisation du code et la gestion de son
´evolution en factorisant les propri´et´es et des op´erations partag´ees
par diff´erents objets.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
5/37
Exemple
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
6/37
Exemple
public class Forme {
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
private float dim1, dim2; //Longueur et largeur d’une forme
protected float x;
Forme(){ }//Constructeur de la classe Forme
float superficie(){ //calcule la sup´erficie d’une forme
. . . }
. . .
}
public class Carre extends Forme {
. . .
}
La classe carr´e h´erite l’attribut x et aussi les attributs dim1 et
dim2.Les attributs dim1 et dim2 sont priv´es, ils ne peuvent pas
ˆetre directement manipul´e dans la classe carr´e. La classe carr´e
h´erite ´egalement la m´ethode superficie.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
7/37
H´eritage des d´efinitions structurelles
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
Une instance d’une classe poss`ede autant de champs qu’il y a
d’attributs dans sa classe et sa super-classe.
Exemple:
public class Forme {
private float dim1, dim2;
protected float x;
. . .
}
public class Carre extends Forme {
private String couleur;
. . .
}
Une instance de la classe carr´e aura comme champs les valeurs des
attributs x, dim1, dim2 et couleur.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
8/37
Constructeur et h´eritage
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
§ Le constrcuteur de la sous-classe ST initialise les attributs
h´erit´es a travers l’appel du constructeur de la classe mere T.
§ Le constructeur d’une sous-classe ST appelle le constructeur
de la classe m`ere T avec l’instruction super(...).
Exemple:
public class Forme {
private float dim1, dim2;
protected float x;
Forme(float
lar){
dim1=long;
dim2=lar;}
. . . }
long,
float
public class Carre extends Forme
Publicité
{
private String couleur;
Carre(float cote, String c){
super(cote,cote);
couleur=c;}
. . . }
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
9/37
H´eritage de m´ethodes
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
§ Toute m´ethode d´efinie sur une super-classe T est applicable
aux instances des sous-classes de ST.
Exemple:
public class Forme {
private float dim1, dim2;
public class Carre extends Forme {
Forme(float long, float
private String couleur;
lar){
dim1=long;
dim1=lar;
}
Carre(float cote, String c){
super(cote,cote);
couleur=c;}
float superficie(){
return (dim1ˆ dim2)}
}
. . .
}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
10/37
Exemple
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
public static void main(String[] args) {
Carre car=new Carre(5,”Rouge” );
System.out.println(“La superficie du carr´e est de
”+car.superficie()); }
}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
11/37
Appel de m´ethodes h´erit´es
dans une sous-classe
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
§ Les attributs h´erit´es qui sont d´eclar´es “public” et “protected”
peuvent ˆetre utilis´es directement dans une classe descendante.
§ Les attributs d´eclar´es priv´es, ne sont pas acc´essible
directement dans les classes descendantes. Il faut, donc,
utiliser les getters et setters de ces attributs h´erit´es.
§ L’appel d’une m´ethode h´erit´ee se fait par l’instruction:
Super.Nomdelamethode (param1, param2, . . . ),
sachant que la m´ethode Nomdelamethode (param1, param2,
. . . ) est d´efinie dans la classe m`ere.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
12/37
Exemple (1/2)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
public class Forme {
private float dim1, dim2;
Forme(float long, float lar){
dim1=long;
dim2=lar;
}
float superficie(){
return (dim1ˆ dim2)}
float getdim1(){
return (dim1)}
float getdim2(){
return (dim2)}
}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
13/37
Exemple (2/2)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
public class Carre extends Forme {
private String couleur;
Carre(float cote, String c){
super(cote, cote);
couleur=c;}
void afficherD(){//Affiche les donn´ees d’un carr´e//
System.out.println(“Le carr´e mesure “+super.getdim1()+”” de
couleur “+ couleur+ “et de superficie “+ super.superficie()) }
}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
14/37
La classe Object
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
§ Object est la classe racine. Toutes les classes h´eritent de la
classe Object.
§ Dans la classe Object sont d´efinies les m´ethodes applicables `a
tous les objects. Par exemple:
§ la m´ethode equals qui test d’´egalit´e logique de deux objets,
§ la m´ethode toString fabriquant une chaˆıne de caract`ere
repr´esentative du receveur.
Exemple:
new Point(3, 4). equals ( new Point(3, 4));
´ ą true
new Point(1, 2). toString();
´ ą“1@2”
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
15/37
Red´efinition de variables
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
Les sous classes peuvent red´efinir les variables: il suffit de les
re-d´eclarer sous le mˆeme nom avec un type diff´erent
Exemple:
public class Forme {
protected float dim1;
protected float dim2;
protected float x;
. . .
}
public class Carre extends Forme {
Publicité
private int x;
. . .
}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
16/37
Red´efinition de m´ethodes
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
La red´efinition consiste `a red´efinir (reprendre), dans une classe
descendante, une m´ethode d´efinie la classe m`ere. G´en´eralement, la
m´ethode red´efinie est une extension de la m´ethode d´ecrite dans la
classe m`ere.
§ Les sous-classes peuvent red´efinir les m´ethodes h´erit´ees: il
suffit de les r´eecrire avec le mˆeme nom, mˆeme type de retour
et le mˆeme nombre d’arguments ayant les mˆemes types.
§ Un constructeur d’une sous-classe ST qui h´erite de T peut
´etendre le constructeur de T:
§ le constructeur de ST appelle le constructeur de T avec
l’instruction super(...).
§ le conctructeur de ST peut contenir d’autres instructions `a
part l’appel du constructeur de T.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
17/37
Exemple
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
public class Forme {
protected float dim1, dim2;
public class Carre extends Forme {
Forme(float long, float
super(c,c);}
Carre(float c){
lar){
dim1=long;
dim2=lar;}
float superficie(){
return (dim1ˆ dim2)}
. . .
}
float superficie(){
float s=super.superficie();
System.out.println(“La superficie
du carr´e est ”+s);
return (s);}
. . .
}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
18/37
Surcharge de m´ethodes
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
Les sous-classes peuvent surcharger les m´ethodes h´erit´ees.
Exemple
public class Forme {
private float dim1, dim2;
public class Carre extends Forme
{
private float c;
Forme(float long, float
lar){
dim1=long;
dim2=lar;}
Carre(float x){
super(c,c);
c=x;}
float superficie(){
return (dim1ˆ dim2)}
. . .
}
double superficie(){
return (cˆ c);}
. . .
}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
19/37
Exercice (1/4)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
Ecrire une classe Personne qui permet de g´erer un individu, cette
classe dispose des attributs suivant: nom, pr´enom et ˆage. De plus,
elle a 4 m´ethodes :
1. Un constructeur de la classe Personne.
2. Une m´ethode void afficherInfos() qui affiche les informations
d’une Personne.
3. Une m´ethode int getAge() qui retourne la valeur de l’attribut
age.
4. Une m´ethode void setAge(...) qui modifie la valeur de
l’attribut age.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
20/37
Exercice (2/4)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
Ecrire une classe Enseignant, sous la classe Personne, cette classe
dispose des attributs suivants: sp´ecialit´e, grade et salaire. De plus,
elle a 2 m´ethodes:
1. Un constructeur de la classe Enseignant appelant le
constructeur de la classe m`ere par super, puis initialisant ses
champs propres.
2. Une m´ethode void afficherInfo() qui red´efinit la m´ethode
afficherInfo() de sa classe m`ere et qui affiche les informations
d’un Enseignant.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
21/37
Exercice (3/4)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
Ecrire une classe Etudiant, sous la classe Personne, cette classe
dispose des attributs suivant : num´ero ´etudiant, sp´ecialit´e, nombre
de matieres, les notes des quatre matieres ´etudi´ees au cours de
l’ann´ee et leurs coefficients et l’ann´ee en cours (une variable de
classe). De plus, elle a 4 m´ethodes:
1. Un constructeur de la classe Entudiant appelant le
constructeur de la classe m`ere par super, puis initialisant ses
champs propres.
2. Une m´ethode void ajouterCours(...) qui permet d’ajouter une
mati`ere, son coefficient et la note correspondante.
3. Une m´ethode void afficherCours() qui permet d’afficher une
mati`ere, son coefficient et la note correspondante.
4. Une m´ethode Double moyenneE() qui permet de calculer la
moyenne d’un ´etudiant pendant l’ann´ee en cours.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
22/37
Publicité
Exercice (4/4)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
Ecrire une classe Test qui contient la fonction main() et qui
permet de tester votre programme:
/ Test de la classe Enseignant */
1. Cr´eer une instance de la classe Enseignant.
2. Afficher les informations de cet enseignant.
3. Modifier le salaire de cet enseignant.
4. Modifier l’ˆage de cet enseignant.
5. Afficher les informations de l’enseignant avec les mises `a jour.
/ Test de la classe Etudiant ** /
6. Cr´eer une instance de la classe Etudiant.
7. Afficher les informations de cet ´etudiant.
8. Ajouter les 4 mati`eres ´etudi´ees au cours de l’ann´ee, ainsi que les
coefficients et les notes.
9. Afficher les notes de l’´etudiant d´ej`a cr´ee.
10. Calculer moyenne de l’´etudiant et afficher s’il a r´eussi l’ann´ee
ou pas.
23/37
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
D´efinition
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
§ Une classe abstraite est une classe incompl`ete. Elle regroupe
un ensemble d’attributs et de m´ethodes mais certaines de ses
m´ethodes ne contiennent pas d’instructions, elles devront ˆetre
d´efinies dans une classe h´eritant de cette classe abstraite.
§ Une classe abstraite est une classe qui ne permet pas
d’instancier des objets, elle ne peut servir que de classe de
base pour une d´erivation.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
24/37
M´ethode abstraite
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
§ Une m´ethode abstraite est une m´ethode non impl´ement´ee
§ Uniquement la signature de la m´ethode abstraite est fournie
(le Nom, les param`etres et le type de retour de la m´ethode)
Exemple
public abstract class Forme{
private float dim1, dim2;
public Forme(float L, float l){
dim1 = L;
dim1 = l;
}
public abstract float Superficie();
}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
25/37
M´ethode abstraite
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
§ Une m´ethode abstraite doit ˆetre obligatoirement d´eclar´ee
‘’public”, ce qui est logique puisque sa vocation est d’ˆetre
red´efinie dans une classe d´eriv´ee
§ D`es qu’une classe contient une ou plusieurs m´ethodes
abstraites, elle est abstraite
§ Les noms d’arguments muets doivent figurer dans la d´efinition
d’une m´ethode abstraite.
Exemple:
public abstract void methode(int); //Erreur : nom argument fictif
est obligatoire
public abstract void methode(int x); int x est un argument muet
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
26/37
M´ethode abstraite
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
§ Une classe d´eriv´ee d’une classe abstraite n’est pas oblig´ee de
red´efinir toutes les m´ethodes abstraites
§ Elle peut ne red´efinir aucune, mais elle reste abstraite tant
qu’il y a encore des m´ethodes abstraites non impl´ement´ees
§ Une classe d´eriv´ee d’une classe non abstraite peut ˆetre
d´eclar´ee abstraite
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
27/37
Exemple: red´efinition des m´ethodes
abstraites
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
public class Cercle extends Forme{
public Cercle(float rayon) {
super(rayon,2*rayon);}
public float superficie () {
return (rayonrayon3.14); }
}
public class Forme{
float dim1, dim2;
public Forme(float d1,float d2) {
dim1=d1;
dim2=d2;}
public static float superficie();}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
28/37
Classe abstraite
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
§ Une classe abstraite peut contenir des m´ethodes non
abstraites et des d´eclarations d’attributs.
§ Une classe abstraite est incompl`ete: elle est donc non
instanciable et doit ˆetre h´erit´ee =ą on ne peut pas utiliser les
constructeurs d’une classe abstraite et donc on ne peut pas
cr´eer d’objet de cette classe.
§ Une classe est automatiquement abstraite si une de ses
m´ethodes est abstraite.
§ Une classe qui h´erite d’une classe abstraite ne devient
concr`ete que si elle impl´emente toutes les m´ethodes abstraites
de la classe dont elle h´erite.
§ Une classe abstraite peut ˆetre d´eriv´ee en une sous-classe:
§ Abstraite si une ou plusieurs m´ethodes ne sont pas
impl´ement´ees par la classe fille,
§ Non abstraite si toutes les m´ethodes abstraites sont
impl´ement´ees dans la classe fille.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
29/37
Int´erˆet
H´eritage
Red´efinition
Surcharge
Publicité
Classe Abstraite
Interface
Le recours aux classes abstraites facilite la conception orient´ee
objet. On peut placer dans une classe abstraite toutes les
fonctionnalit´es dont on souhaite disposer pour les classes
descendantes :
§ Soit sous la forme d’une impl´ementation compl`ete de
m´ethodes (non abstraites) et de champs (priv´es ou non)
lorsqu’ils sont communs `a tous les descendants,
§ Soit sous forme d’interface de m´ethodes abstraites dont on est
alors sˆur qu’elles existeront dans toute classe d´eriv´ee
instanciable.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
30/37
D´efinition
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
Interface: une collection de d´eclaration de m´ethodes abstraites et
de variables de classes.
§ Une interface est un type, au mˆeme titre qu’une classe, mais
abstrait et qui donc ne peut ˆetre instanci´e (par appel `a new
plus constructeur).
§ Une interface d´ecrit un ensemble de signatures de m´ethodes,
sans impl´ementation, qui doivent ˆetre impl´ement´ees dans
toutes les classes qui impl´ementent l’interface.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
31/37
Utilit´e
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
L’utilit´e du concept d’interface r´eside dans le regroupement de
plusieurs classes, tel que chacune impl´emente un ensemble
commun de m´ethodes, sous un mˆeme type. Une interface:
§ contient des signatures de m´ethodes;
§ ne peut pas contenir de variables: les variables d´eclar´ees dans
une interfaces sont toutes statiques et finales.;
§ peut h´eriter d’une autre interface (avec le mot-cl´e extends);
§ Les classes impl´ementant une interface doivent d´efinir toutes
les m´ethodes de l’interface ou doivent ˆetre d´eclar´ees
abstraites.
§ une classe (abstraite ou non) peut impl´ementer plusieurs
interfaces. La liste des interfaces impl´ement´ees doit alors
figurer apr`es le mot-cl´e implements plac´e dans la d´eclaration
de classe, en s´eparant chaque interface par une virgule.
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
32/37
Exemple (1/5)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
La classe Forme peut ˆetre une interface d´ecrivant les m´ethodes qui
doivent ˆetre impl´ement´ees par les classes Rectangle et Cercle, ainsi
que par la classe Carre (mˆeme si celle-ci peut profiter de son
h´eritage de Rectangle). L’interface Forme s’´ecrit alors de la
mani`ere suivante:
public interface Forme {
public double surface();
public void affiche();
}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
33/37
Exemple (2/5)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
public class Cercle implements Forme {
float rayon;
Cercle(float x){
rayon=x;}
double surface(){
return (3.14rayonrayon);}
public void affiche(){
System.out.println(“le cercle est de rayon ”+rayon+” et de
surface ”+surface());}
}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
34/37
Exemple (3/5)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
public class Rectangle implements Forme {
float Long, lar;
Ractangle(float x; float y){
Long=x;
lar=y;}
public double surface(){
return Longˆlar;}
public void affiche(){
System.out.println(“le rectangle est de dimension
”+Long+”/”+lar+” et de surface ”+surface());} }
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
35/37
Exemple (4/5)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
public class Carre extends Rectangle implements Forme {
Carre(float x){
super(x,x);}
public void affiche(){
System.out.println(“le carre qui mesure ”+Long+” est de
surface ”+surface());}
}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
36/37
Exemple (5/5)
H´eritage
Red´efinition
Surcharge
Classe Abstraite
Interface
public class TestForme {
public static void main(String[] args) {
Carre c=new Carre(5);
Rectangle r=new Rectangle(4,3);
Cercle cer=new Cercle(5);
c.affiche();
r.affiche();
cer.affiche();
}
}
Chapitre 4 - H´eritage, M. Chebbah
Semestre 1, 2020
37/37