0% ont trouvé ce document utile (0 vote)
6 vues15 pages

Gdaim POO Java Part4

Le document traite de la programmation orientée objets en Java, en se concentrant sur le concept d'héritage. Il explique comment l'héritage permet la réutilisation de code, la création de classes filles à partir de classes mères, et les implications de cette structure, notamment l'initialisation des constructeurs. Des exemples illustrent la mise en œuvre de l'héritage et les règles associées, comme l'absence d'héritage multiple en Java.

Transféré par

Wasim
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues15 pages

Gdaim POO Java Part4

Le document traite de la programmation orientée objets en Java, en se concentrant sur le concept d'héritage. Il explique comment l'héritage permet la réutilisation de code, la création de classes filles à partir de classes mères, et les implications de cette structure, notamment l'initialisation des constructeurs. Des exemples illustrent la mise en œuvre de l'héritage et les règles associées, comme l'absence d'héritage multiple en Java.

Transféré par

Wasim
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

4.

Programmation orientée objets en Java Héritage

 Introduction:
 Pour raccourcir les temps d’écriture et de mise au point du code
d’une application, il est intéressant de pouvoir réutiliser du code
déjà écrit
Classe et objet
Encapsulation
Héritage
Polymorphisme
Interface

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 200 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 201

Réutilisation par des classes clientes Réutilisation avec modifications

 Soit une classe A dont on a le code compilé  Souvent on souhaite modifier en partie le comportement de A
 Une classe C veut réutiliser la classe A avant de le réutiliser
 Elle peut créer des instances de A et leur demander des  Le comportement de A convient, sauf pour des détails qu’on
services aimerait changer
 On dit que la classe C est une classe cliente de la classe A  Ou alors, on aimerait ajouter une nouvelle fonctionnalité à A

public class A { public class C {


……………… ………………
……………. private A a = new A();  On peut copier, puis modifier le code source de A dans des
} ……………. classes A1, A2,...
 Problèmes :
}  on n'a pas toujours le code source de A
 les améliorations futures du code de A ne seront pas dans les
classes A1, A2,…

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 202 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 203
Solution : Réutilisation par l'héritage Héritage : Vocabulaire

 L’héritage existe dans tous les langages objet à classes  La classe A s'appelle une classe mère, classe parente ou super-
 L’héritage permet d’écrire une classe B classe
 qui se comporte dans les grandes lignes comme la classe A  La classe B qui hérite de la classe A s'appelle une classe fille ou
sous-classe
 mais avec quelques différences sans toucher au code
source de A
 On a seulement besoin du code compilé de A
 Les améliorations futures du code de A seront accessible a
toutes les classes héritées
 Le code source de B ne comporte que ce qui a changé par
rapport au code de A
 On peut par exemple
 ajouter de nouvelles méthodes
 modifier certaines méthodes

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 204 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 205

Exemple de l’héritage (1/3) Exemple de l’héritage (2/3)

 Problème  Solution
 Des classes qui ont des attributs et des méthodes communs. Individu
On place dans la classe mère
Super-classe nom
tous les attributs et toutes les
cin
méthodes communs à toutes
Etudiant Employe afficher()
Personne les classes.
nom nom Héritent de
nom cin cin
cin moyenne salaire Sous-classes
afficher() afficher() afficher() Personne Etudiant Employe
reviser() travailler() moyenne salaire
reviser() travailler()
Duplication de code.
 Les classes filles ne comportent que les attributs ou méthodes plus
Une modification faite sur un attribut (ou méthode) commun doit être
spécifiques.
refaite dans les autres classes.
 Les classes filles héritent automatiquement les attributs (et les méthodes)
qui n'ont pas besoin d'être réécrits.
2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 206 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 207
Exemple de l’héritage (3/3) Héritage : Comment mettre en œuvre l’héritage?
 Pour réaliser un héritage en Java, il suffit de le déclarer dans la
 Solution
déclaration de la classe au moyen de la clause « extends »
Réutilisation du code
 Une sous-classe hérite des variables et des méthodes de sa
Individu classe mère
Un seul endroit pour faire des
Super-classe nom modifications sur les attributs ( ou  pas d'héritage multiple en java
cin méthodes) en commun  A la racine de l’héritage Java se trouve la classe « Object » dont
afficher() toutes les classes héritent automatiquement
Héritent de class MyClass { MyClass
int attribut1
Sous-classes private int attribut1;
Personne Etudiant Employe …
moyenne salaire }
reviser() travailler() class Child extends MyClass {
Child
public void method1(){ …………}
} method1(): void

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 208 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 209

Exemples : Héritage (1/6) Exemples : Héritage (2/6)


 Pour qu'une classe hérite d’une autre on applique le mot-clé "extends"  Une classe peut avoir plusieurs sous-classes.
class Individu{ class Etudiant extends Individu{
Individu
Une super-classe
String nom; float moyenne; ou bien nom
long cin; Classe mère cin
public void setMoyenne(float moyenne){
afficher()
public void setNom(String nom){ [Link]=moyenne;}
[Link]=nom;}
public float getMoyenne (){
public String getNom(){ return moyenne;}
return nom;} } Personne Etudiant Employe Chercheur
public void setCin(long cin){ moyenne salaire articles
[Link]=cin;} reviser() travailler() rechercher()
public long getCin(){
return cin;}
Plusieurs sous-classes ou bien Classes filles

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 210 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 211
Exemples : Héritage (3/6) Exemples : Héritage (4/6)

 Une classe ne peut avoir qu’une seule classe mère


Individu
nom Etudiant hérite de individu EtudiantTelecom
EtreHumain Personne EtudiantTelecom hérite de Etudiant hérite de Individu
cin
peau nom
afficher()
yeux cin
respirer() lire()
Etudiant Etudiant etudiant=new Etudiant()
[Link]();
moyenne [Link]()
pas d'héritage multiple en java
Etudiant reviser() [Link]();
moyenne
reviser() EtudiantTelecom EtudiantTelecom etudiantTelecom=new EtudiantTelecom()
[Link]();
option [Link]();
reviserOption() [Link]();
class Etudiant extends Personne, EtreHumain

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 212 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 213

Exemples : Héritage (5/6) Exemples : Héritage (6/6)


 Quels sont les attributs de Chirurgien ?
 Quels sont les attributs de MedecinDeFamille ? Package 1 Package 2
 Quelles sont les méthodes de Docteur ?
public class Individu{
 Quelles sont les méthodes de MedecinDeFamille ?
public String nom; public
 MedecinDeFamille peut-il invoquer traiterPatient ?
protected String prenom; class Employe extends Individu{
 MedecinDeFamille peut-il invoquer opererPatient ?
int age;
private long cin; }
Docteur
Nom_Prenom : String }
travailALHopital:boolean
traiterPatient(Patient p)
class Etudiant extends Individu{
Etudiant hérite: Employe hérite:
} ♦ nom ♦ nom
MedecinDeFamille Chirurgien ♦ prenom ♦ prenom
faitVisites: boolean faireUneIncision: boolean ♦ age
donnerConseil(Patient p) opererPatient(Patient p)

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 214 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 215
Héritage : Comment mettre en œuvre l’héritage? Héritage : Comment mettre en œuvre l’héritage?

 Comme une sous-classe hérite des variables de la classe parent,  Le mot-clé “this” désigne toujours l’objet en cours (de création)
elle doit nécessairement les initialiser, donc appeler le class Employee extends Individu{
constructeur de la classe parent
 Cela doit se faire avant la réalisation de son propre constructeur private String grade;
 Concrètement, cela implique que la première instruction dans le Employee(String nom, String prenom, int age, long cin,
constructeur d’une sous-classe doit être l’appel au constructeur String grade){
parent super(String nom, String prenom, int age, long cin,
 Cet appel se fait au moyen du mot-clé « super » String grade);
[Link] = grade;
 Si la classe parent possède un constructeur vide, alors l’appel }
n’est plus obligatoire mais implicite
Employee(String nom, String prenom){
class Child extends MyClass { this(nom,prenom,-1,-1,null);
Child(){ }
super(6); // appel du constructeur parent }
}
}
2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 216 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 217

Héritage : Comment mettre en œuvre l’héritage? Le mot-clé super


class BankAccount{
 Le mot-clé super permet de désigner la superclasse,
int aNumber;
super permet d'accéder aux attributs et méthodes de la super-classe
}
class NormalAccount extends BankAccount{  Pour manipuler un attribut de la super-classe :
float aNumber; [Link]
}

 Pour faire appel au constructeur de la super-classe:


 La variable aNumber du compte normal cache la variable super(nom, cin)
aNumber de la classe générale compte en banque.
 Mais on peut accéder à la variable aNumber d’un compte en
banque à partir d’un compte normal en utilisant le mot-clé super :
Pour manipuler une méthode de la super-classe :
[Link] [Link]()

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 218 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 219
Exemples : Constructeur de la sous classe (1/10) Exemples : Constructeur de la sous classe (2/10)

 Constructeur par défaut  Constructeur surchargé


class Individu{ class Individu{
private String nom; private String nom;
private long cin; private long cin;
public Individu(){ public Individu (String nom, long cin){
nom=“Mohamed”; [Link]=nom;
cin=00000000; } [Link]=cin; } super fait appel au constructeur
} surchargé de la classe mère
}
super fait appel au constructeur class Etudiant extends Individu{
class Etudiant extends Individu{ par défaut de la classe mère private float moyenne;
private float moyenne;
public Etudiant(String nom, long cin, float moyenne){
public Etudiant(){ super(nom,cin);
super(); [Link]=moyenne; }
moyenne=10.0f; } }
}

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 220 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 221

Exemples : Constructeur de la sous classe (3/10) Exemples : Constructeur de la sous classe (4/10)

public class Animal {  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().
public int nbPattes;
 Si on ne fait pas d’appel explicite au constructeur de la superclasse,
public Animal(int nbPattes) { c’est le constructeur par défaut de la superclasse qui est appelé
[Link] = nbPattes; } implicitement.
}
Testez l’exemple suivant.
Qu’est ce que vous aurez en résultat?
public class Chat extends Animal{

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 222 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 223
Exemples : Constructeur de la sous classe (5/10) Exemples : Constructeur de la sous classe (6/10)

public class Animal {


 Solution 1
public int nbPattes;  Déclarez explicitement le constructeur par défaut de la classe mère

public Animal(int nbPattes) { public class Animal {


[Link] = nbPattes; } Implicit super constructor
} Animal() is undefined for public int nbPattes;
default constructor. Must
define an explicit public Animal(){ }
public class Chat extends Animal{
constructor
public Animal(int nbPattes) {
public Chat(){ Constructeur par défaut
[Link] = nbPattes; }
super(); Appel implicite à super
}
}
}
public class Chat extends Animal{
 Dans notre cas, on a 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()
2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 224 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 225

Exemples : Constructeur de la sous classe (7/10) Exemples : Constructeur de la sous classe (8/10)

 Solution 2  Enchaînement des consctructeurs


 Faire un appel explicite au constructeur surchargé de la classe mère public class Humain{
public Humain() {
public class Animal { [Link](“Je suis un être humain”);
}
public int nbPattes; }
public Animal(int nbPattes) { public class Client extends Humain {
[Link] = nbPattes; public Client (){
} [Link](“Je suis un client”);
} }
}
public class Chat extends Animal{
public class ClientFidele extends Client {
public Chat(){ public ClientFidele(){
super(4); [Link](“Je suis un client fidèle”);
} }
} }
2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 226 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 227
Exemples : Constructeur de la sous classe (9/10) Exemples : Constructeur de la sous classe (10/10)

 Enchaînement des consctructeurs


 Enchaînement des consctructeurs public class Humain{
public Humain() {
super() ;
ClientFidele cFidele=new ClientFidele(); [Link](“Je suis un être humain”); }
}

public class Client extends Humain {


public Client (){
Je suis un être humain super();
Je suis un client [Link](“Je suis un client”); }
Je suis un client fidèle }

public class Client Fidele extends Client {


public Client Fidele(){
super() ;
[Link](“Je suis un être client fidèle”); }
Appel implicite à super }

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 228 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 229

1ère instruction d’un constructeur Exemple : Constructeur de la classe mère

public class Rectangle {


 La première instruction (interdit de placer cet appel
private int x, y, largeur, hauteur;
ailleurs !) d’un constructeur peut être un appel
 à un constructeur de la classe mère :
public Rectangle(int x, int y, int largeur, int hauteur) {
super(...)
 ou à un autre constructeur de la classe :
this.x = x;
this(...)
this.y = y;
[Link] = largeur;
[Link] = longueur;
}
….
….
}

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 230 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 231
Exemple: Constructeurs de la classe fille Exercices 14

public class RectangleColore extends Rectangle {  Création d’une hiérarchie de compte


private Color couleur;  Distinguer les comptes courants et les livrets d’épargne
 Quelle hiérarchie de classes pourrait-on proposer?
public RectangleColore(int x, int y,int largeur, int hauteur, Color couleur) {
super(x, y, largeur, hauteur);  Quelles méthodes existeraient dans une sous-classe mais pas dans
[Link] = couleur; l’autre?
}  Implémenter cette hiérarchie dans le programme

public RectangleColore(int x, int y, int largeur, int hauteur) {


this(x, y, largeur, hauteur, [Link]);
}
...
}

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 232 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 233

Héritage : Redéfinition de méthodes Redéfinition des méthodes : exemple

 La redéfinition de méthode consiste à fournir dans une sous-classe une


class Individu{
nouvelle implémentation d’une méthode déjà déclarée dans une classe
parent
public void lire() {
 La redéfinition n’est pas obligatoire !! Mais elle permet d’adapter un [Link](“Je sais lire”);  La classe Etudiant hérite
comportement et de le spécifier pour la sous-classe } la méthode lire() mais on
 Pour la réaliser, il suffit de créer dans la sous-classe une méthode avec la veut changer son
même signature que la méthode originale dans la classe parent } traitement
 On peut rappeler la version d’origine (de la classe parent) avec le mot-clé  On garde la même
super signature de la méthode
 Obligation de redéfinir les méthodes déclarées comme abstraites class Etudiant extends Individu{ lire et on change le corps
(abstract)
 Interdiction de redéfinir les méthode déclarées comme finales (final) public void lire() { On parle alors de
[Link](“Je suis un étudiant”); redéfinition
} (override)
}

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 234 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 235
Redéfinition avec réutilisation Héritage : Surcharge de méthodes

 La surcharge est un mécanisme qui consiste a dupliquer une


class Individu{
méthode en modifiant les arguments de sa signature
public void lire() {  Exemple:
[Link](“Je sais lire”);
} int solde ;

}
public void deposit(int amount){
solde+=amount;
class Etudiant extends Individu{
}
public void lire() { public void deposit(double amount) {
[Link](“Je suis un étudiant”);
[Link](); Possibilité de réutiliser solde +=(int) amount;
} le code de la méthode }
} héritée (super)

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 236 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 237

Surcharge des méthodes : exemple Surcharge vs redéfinition

class Individu{ class Individu{


 On garde le même nom
de la méthode, le même public void lire() {
public void lire() { type de retour et on [Link](“Je sais lire”);
[Link](“Je sais lire”); change les paramètres }
} }

} On parle alors de surcharge redéfinition


surcharge class Etudiant extends Individu{ class Etudiant extends Individu{
(overload) public void lire(String titreLivre) {
class Etudiant extends Individu{ public void lire() {
[Link](“Je sais lire”); [Link](“Je suis un étudiant”);
[Link](“J’ai lu le livre ” [Link]();
public void lire(String titreLivre) { +titreLivre); }
[Link](“Je sais lire”); } }
}
[Link](“J’ai lu le livre ”+titreLivre);
} Etudiant possède deux méthodes Etudiant possède une seule méthode
} • lire() •lire()
•lire(String)

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 238 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 239
Ce que peut faire une classe fille Empêcher la redéfinition

 La classe qui hérite peut :


 Une classe peut protéger une méthode afin d'éviter qu'elle ne
 ajouter des variables, des méthodes et des constructeurs soit redéfinie dans ses sous-classes.
 redéfinir des méthodes (exactement les mêmes types de
paramètres)  En Java, on va simplement ajouter le modificateur final dans
la signature de la méthode.
 surcharger des méthodes (même nom mais pas même signature)

public final void lire()

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 240 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 241

Empêcher l’héritage Les classes abstraites (1/4)


 Une classe déclarée final ne peut pas être dérivée (heritée)  De la même façon qu'il est possible d'empêcher quelqu'un
d'étendre une classe, ou de surcharger une méthode, il est
class final Individu possible de forcer l'extension ou la surcharge, en utilisant le mot-
clé abstract.
 Permet d’interdire tout héritage pour cette classe qui ne pourra
 Formellement une classe abstraite n'est pas différente d'une
pas être une classe mère
classe normale.
 Toutes les méthodes à l’intérieur de la classe final seront
implicitement finales  Simplement, elle est déclarée en ajoutant le mot-clé abstract

 Extension d'une classe abstraite

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 242 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 243
Les classes abstraites (2/4) Les classes abstraites (3/4)
 Une classe abstraite
 Peut contenir ou hériter de méthodes abstraites (des méthodes sans corps)  Une méthode peut aussi être abstraite
 Peut contenir des attributs et Peut avoir des méthodes normales, avec corps  Dans ce cas, elle ne peut pas contenir de corps (elle aura un “;” à la
 Une classe abstraite ne peut pas être instanciée place des accolades)
 Il est nécessaire de créer une classe concrète (non abstraite) qui l'étende, et
 Si une classe comprend une méthode abstraite elle est
d'instancier cette classe concrète
 La sous-classe concrète doit donner un corps à toute méthode abstraite obligatoirement abstraite elle-même
 En d’autres termes, on ne peut jamais faire un « new » sur une classe abstraite  Si une sous-classe hérite d’une classe abstraite, elle doit redéfinir
 En revanche on peut parfaitement créer des variables de types abstraits toutes les méthodes abstraites de sa classe parent (leur donner
 Toute classe concrète qui étend une classe abstraite doit fournir un un corps)
corps de méthode
 On parle alors d'implémentation  Si elle ne le fait pas, elle sera condamnée à être abstraite elle-
 Extension d’une classe abstraite même

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 244 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 245

Les classes abstraites (4/4) La classe Object (1/2)

 Deux principes pour justifier la création d'une classe abstraite  Toutes les classes java héritent implicitement de la classe Object.
 la classe que l'on écrit va être étendue par plusieurs classes  On dit alors que la classe Object est l’ancêtre de toutes les classes .
 ces différentes classes vont être utilisées par des méthodes Object
communes, et seront déclarées par le nom de la super classe
abstraite.

Docteur Individu Humain

travailALHopital:boolean nom
cin
traiterPatient()
lire()

Client

MedecinDeFamille Chirurgien Etudiant Employe Chercheur


faitVisites: boolean faireUneIncision: boolean moyenne salaire articles
donnerConseil() reviser() travailler() rechercher()
ClientFidele

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 246 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 247
La classe Object (2/2) La méthode equals

 Object offre quelques services génériques dont la plupart sont à  La méthode equals détermine si deux objets sont égaux ou non.
à redéfinir (attention au fonctionnement par défaut) :  Son implémentation dans la classe Object vérifie que les références
d’objets sont identiques.
 public final Class getClass();  On aura souvent besoin de redéfinir la méthode equals : deux objets
 Renvoie un objet de type Class qui permet de connaître la classe seront égaux quand ils auront le même état.
de l'objet
 Egalité entre objet et non entre référence
 public boolean equals(Object o);
Point p1 = new Point(2,1);
 Compare les champs un par un (pas les pointeurs mémoire
Point p2 = new Point(2,1);
comme ==) if (p1==p2){...} // Ici c'est faux
 protected Object clone(); if ([Link](p2)){...}// OK si equals est bien redéfinit
 Allocation de mémoire pour une nouvelle instance d'un objet et p1 = p2 // Co-référence
recopie de son contenu if (p1==p2){...} // Vrai

 public String toString();  Très utile pour les String


 Renvoie une chaîne décrivant la valeur de l'objet – If (myString == "Hello") {…} Toujours Faux !!!
– If ([Link]("Hello") ) {…} OK

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 248 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 249

Conseils de conception L’héritage en notation UML

 Faire des schémas


 Représentant les classes et leur hiérarchie
 Pour comprendre les interactions entre les classes (qui a
besoin d’une référence sur qui)
 Pour savoir ou placer une fonction
 Pour bien penser sur les droits d'accès
 Représentant les appels de fonction
 Pour savoir quels objets sont traversés
 Pour savoir où récupérer les données à mettre en argument

 Attention l'héritage n'est pas une réponse à tout, la


délégation est aussi utile.
 l'héritage est une relation is-like.

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 250 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 251
Exercices 15 Exercices 16

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 252 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 253

Exercices 17 Exercices 18

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 254 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 255
Exercices 19 Exercice 20

 Ecrire une classe Animal où un animal est caractérisé par son


nombre de pattes et la couleur de son pelage. N'oubliez pas
d'implémenter les constructeurs (avec argument(s) et par défaut), les
accesseurs et modificateurs, ainsi que la méthode toString..
 De plus définissez une méthode jeMangeQuoi renvoyant une chaîne
de caractères répondant à la question posée.
 A partir de cette classe de base, dérivez ensuite les classes
Omnivore et Herbivore.
 Dérivez enfin les classes Homme et Vache où un homme dispose en
plus d'un salaire, et une vache d'une quantité de lait produit.
 Instancier un objet h de type Homme qui a un salaire de 2000 DT et
un objet v de type vache qui produit 100 litre de lait.

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 256 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 257

Exercice 21 Exercice 22

VilleCapitale (2ème partie) (suite le page 199)


 Ecrire une classe Forme où une forme est caractérisée par les 1. Créez une classe Capitale qui hérite de la classe Ville. Celle-ci
coordonnées de son centre (stockées dans un tableau). comprendra une variable d’instance supplémentaire : nomPays.
 N'oubliez pas d'implémenter les constructeurs (avec Expliquez le mécanisme de construction d’une classe dérivée. Testez
argument(s) et par défaut), les accesseurs et modifieurs, ainsi différents cas : appel explicite ou non au constructeur de la classe
que la méthode toString. De plus définissez une méthode
mère ; existence ou non d’un constructeur sans arguments.
calculeSurface qui calcule la surface d'une forme.
 A partir de cette classe de base, dérivez ensuite les classe 2. Redéfinissez la méthode decrisToi(), en faisant appel à la méthode de
Rectangle et Ellipse où un rectangle possède une longueur et la classe mère. (decrisToi() affichera à l’écran Capitale de nomPays:
une largeur, tandis qu'une ellipse possède deux rayons. nomVille ; nbHabitants). Testez.
 Dérivez enfin les classes Carre et Cercle . 3. Changez les modificateurs d’accès des données membres de la classe
mère, en remplaçant private par protected. Peut-on accéder à ces
variables depuis l’extérieur de la classe Ville ? Quel danger cela
présente-t-il (en termes d’encapsulation)?

2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 258 2022/2023 Programmation Orientée Objet – Java – LCE2 – ISIMA Enseignant : Soufien GDAIM 259

Vous aimerez peut-être aussi