Gdaim POO Java Part4
Gdaim POO Java Part4
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
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
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
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
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)
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
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
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)
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)
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)
Exemples : Constructeur de la sous classe (7/10) Exemples : Constructeur de la sous classe (8/10)
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
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
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
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
}
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
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
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
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
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.
travailALHopital:boolean nom
cin
traiterPatient()
lire()
Client
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
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
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
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
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