0% ont trouvé ce document utile (0 vote)
112 vues18 pages

Poo Java Chap5 2

Ce document décrit les relations entre classes en Java, notamment la relation d'héritage. Il présente les concepts clés de l'héritage tels que les sous-classes, l'héritage simple et multiple, les constructeurs, le polymorphisme, les classes abstraites et les interfaces.

Transféré par

abderrahmane BERHIL
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)
112 vues18 pages

Poo Java Chap5 2

Ce document décrit les relations entre classes en Java, notamment la relation d'héritage. Il présente les concepts clés de l'héritage tels que les sous-classes, l'héritage simple et multiple, les constructeurs, le polymorphisme, les classes abstraites et les interfaces.

Transféré par

abderrahmane BERHIL
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

04/05/2021

Université Mohammed V- Rabat


Ecole Mohammadia d'Ingénieurs
Filière: Réseaux & Telecommunication

Programmation Orientée Objet


en JAVA

N.EL FADDOULI
2020-2021

Chapitre 5 : Relations entre classes

 Relation Uses

 Relation d'héritage

 Les sous-classes

 Héritage simple

 Membres protégés

 Constructeurs

 Le polymorphisme

 Les classes abstraites

 Les interfaces

POO \ N.EL FADDOULI 75

1
04/05/2021

L'héritage ( relation "IsA") (1)


 L'héritage permet de créer une hiérarchie de classes.

 Une classe B hérite d'une classe A si les instances de B contiennent


tous les attributs de la classe A et ont le même comportement que les
objets de type A en plus d'attributs et méthodes spécifiques.

A: Classe mère (classe de base) B: Sous-classe (classe dérivée)

 Exemple: Employe
EST-UN - nom EST-UN
- salaire
+ Affich_Details( ) { ….. }
…..
Manager Ingénieur
- Departement ……
POO \ N.EL FADDOULI 84

L'héritage ( relation "IsA") (2)


 L'héritage est simple (unique) lorsque la sous-classe hérite les
propriétés (attributs) et le comportement (méthodes) d'une seule
classe mère.

 L'héritage est multiple lorsque la sous-classe hérite de plusieurs


classes.

Exemple: Hydravion hérite de Bateau et Avion


 L'héritage multiple n'est pas pris en charge par tous les langages
orientés objets (Java ne permet pas l'héritage multiple)

 L'héritage multiple comporte le risque qu'une sous-classe hérite de


deux implémentations distinctes de la même méthode (chaque
implémentation est héritée d'une super-classe différente).
POO \ N.EL FADDOULI 85

2
04/05/2021

L'héritage ( relation "IsA") (3)

 Exemple: Personnel
- nom
- datnais
……

Enseignant Chercheur
- Matières - domaine
…… - nbpublication
public double salaire( ) {...} public double salaire( ) {...}

EnseignatChercheur
…….
POO \ N.EL FADDOULI 86

L'héritage en java (1)


 Syntaxe: public class classe_dérivée extends classe_de_base
{
//Attributs et méthodes spécifiques de la classe dérivée
…….
}
Exemple
public class Employe public class Manager extends Employe
{ {
…… ……
…… ……
} }
 Toutes les classes sont dérivées de la classe Object
POO \ N.EL FADDOULI 87

3
04/05/2021

L'héritage en java (1)


 La classe Object contient plusieurs méthodes comme:
public String toString() {...} protected Object clone {...}
public Boolean equals(Object) {...} protected void finalize() {...} ……

Exemple:
public class Employe
{ protected String nom; protected float salaire;
public Employe (String a, float b) {nom=a; salaire=b; } …..
}

Employe e = new Employe("Walid", 20000), a= new Employe("Ali",9000);


System.out.println(e); //résultat: classe@adresse_objet,
System.out.println(e.toString); // Exemple: Employe@f82e3a546
…….
if ( e.equals (a)) { ………….} // compare les références et non les objets
POO \ N.EL FADDOULI 88

L'héritage en java: Contrôle d'accès (2)


Modificateur Même Classe Même Sous-classe Universel
Package
private Oui
Aucun Oui Oui
protected Oui Oui Oui
public Oui Oui Oui Oui

Exemple:
public class Manager extends Employe
public class Employe { private String dept;
{ // on peut utiliser les attributs hérités de la classe Employe
protected String nom; public float augmentation(float t)
protected float salaire; {return salaire *(1+t); }
….. …..
} }
POO \ N.EL FADDOULI 89

4
04/05/2021

L'héritage en java: Appel de constructeur

 Le constructeur de la classe fille (dérivée) peut appeler celui de


la classe mère en utilisant le mot clé super
Exemple:
public class Employe
{ protected String nom; protected float salaire;
public Employe (String a, float b) {nom=a; salaire=b; }
…..
}
public class Manager extends Employe
{ private String dept:
public Manager (String x, float y, String z)
{ super (x,y); dept= z;}
....
}
POO \ N.EL FADDOULI 90

L'héritage en java
Exercice:
1. Reprendre la classe Employe (attributs protected).
2. Compléter cette classe par:
- Un constructeur ayant deux arguments (valeur de nom et salaire)
- Des accesseurs
- Une méthode toString qui retourne une chaîne composée par le
nom et le salaire de l'employé.
3. Reprendre la classe dérivée Manager qui contient:
- Un attribut departement (private)
- Un constructeur ayant trois arguments (les valeurs des attributs: nom,
salaire et departement)
- Une méthode toString qui retourne une chaîne composée par le nom,
le salaire et le département du manager
4. Tester les deux classes.
POO \ N.EL FADDOULI 91

5
04/05/2021

L'héritage: Redéfinition (Remplacement) de méthodes


Définition:
Lorsqu'une sous-classe définit une méthode ayant le nom, le type de
retour et les paramètres identiques à ceux d'une méthode de la classe
de base, on dit que la nouvelle méthode remplace l'ancienne.
Exemple:
class Employe { protected String nom; protected String adr;
protected double sal;
public Employe (String a, String b, double c) {nom = a; adr=b; sal=c;}
public String toString( ) { return nom+" "¨+adr+" "+sal;} }

class Manager extends Employe { protected String dept ;


public Manager(String a, String b, double c, String d)
{ super(a,b,c); dept = d; }
// Remplacement de méthodes
public String toString(){return nom+" "+adr+" "+sal+" "+dept;} }
POO \ N.EL FADDOULI 92

L'héritage: Remplacement de méthodes


Une méthode d'une sous-classe fille peut appeler une méthode de
la super-classe en utilisant le mot clé super.
Exemple:
class Employe { protected String nom; protected String adr;
protected double sal;
public Employe(String a, String b, double c) {nom = a; adr=b; sal=c;}
public String toString( ) { return nom+" "+adr+" "+sal;} }

class Manager extends Employe { protected String dept ;


public Manager(String a, String b, double c, String d)
{ super(a,b,c); dept = d; }
// Remplacement de méthodes
public String toString(){return super.toString() +" "+dept;} }

POO \ N.EL FADDOULI 93

6
04/05/2021

Le polymorphisme (1)
Il est possible de créer un objet de la classe Manager (classe fille) et
d'affecter sa référence à une variable de type Employe (classe mère):

Employe e1; Manager e2; Employe e3;

e1 = new Employe( "Amini Khalid"," BP 398 Rabat Agdal", 6500);

e2= new Manager("Faridi anas", "Blv riad N°88", 13000, "Commercial");

e3= new Manager("Halim Saad", "Blv Anahar N°8", 12000, "Marketing");

System.out.println(e1.toString()); System.out.println(e2. toString());

System.out.println( e3. toString() );

 Une variable est polymorphe: elle peut faire référence à des objets
de formes différentes.
POO \ N.EL FADDOULI 94

Le polymorphisme (2)
Dans l'instruction System.out.println(e3.toString()); c'est la méthode
définie dans la classe Manager qui sera appelée bien que e3 soit une
référence de type Employe.

 C'est le type réel de l'objet qui est utilisé.

 Liaison dynamique

Polymorphisme: Une méthode peut se comporter différemment


suivant l’objet sur lequel elle est appliquée

POO \ N.EL FADDOULI 95

7
04/05/2021

Le polymorphisme (3)
L'opérateur instanceof: Comme il est possible d'utiliser des objets
via des références à leur classe parent, il est parfois utile de connaître
les objets réels qu'on a.
Exemple: On a une fonction qui prend comme paramètre une
référence à un objet de la classe Employe. Cette fonction peut
accepter un paramètre de la classe Employe ou de l'une de ses
classes dérivées.
Peut faire référence à un objet de type
Employe ou d'une classe dérivée
public static void Traiter (Employe e)
{ if ( e instanceof Manager) { //code1: traiter un Manager }
else if ( e instanceof Ingenieur ) { // code2: traiter un Ingénieur }
else { // code3: traiter un autre type d'employés } }
Exemple d'appel: Manager e1 = new Manager(….);
Employe.Traiter (e1);
POO \ N.EL FADDOULI 96

Classe abstraite
 Une classe est dite abstraite si elle annonce une méthode sans la
définir.

 Elle doit être introduite avec le mot clé abstract.

Exemple 1: Fonction abstraite

abstract class A {……. abstract void fct(); ………… }


class B extends A {….. void fct() {……….} …………..}
 Il est impossible d’instancier une classe abstraite car sa définition
est incomplète.
 Elle ne sert qu’à la construction de classes dérivées qui doivent
redéfinir toutes les méthodes abstraites, pour ne pas l’être elles-
mêmes et pouvoir ainsi être instanciées.

POO \ N.EL FADDOULI 97

8
04/05/2021

Classe abstraite
Exemple 2:
public abstract class Forme
{ ..... // attributs, méthodes concrètes et constructeurs
public abstract void Dessiner();
public abstract void Deplacer(int nb_pixels);
}
class Rectangle extends Forme
{ ….. // attributs et méthodes spécifiques, constructeurs
public void Dessiner() {…….....}
public void Deplacer( int d) {…….....}
}
POO \ N.EL FADDOULI 98

Exercice (1)
 Définir une classe Point qui contient:
– Deux attributs privés X et Y de type double.
– Un constructeur ayant deux paramètres (valeurs initiale de X et Y)
– Un constructeur ayant un paramètre de type Point (copier un point
dans un autre).
– Un modificateur et un accesseur pour chaque attribut.
– Une méthode statique Distance ayant deux paramètres de type
Point. Elle retourne la distance entre ces deux points.
 Tester la classe Point: Créer deux points p1 et p2 - Afficher la
distance qui les sépare – Créer un point p3 à partir de p2 – Modifier les
coordonnées de p2- Calculer et afficher la distance qui sépare p1 et p3.

POO \ N.EL FADDOULI 99

9
04/05/2021

Exercice (2)

 Définir une classe abstraite Forme qui contient:

– Un attribut O de type Point (c'est l'origine de la forme).

– Un constructeur sans argument ( l'origine sera (0,0))

– Un constructeur ayant un paramètre de type Point (le point


origine).

– Une méthode abstraite Perimetre ( )

– Une méthode abstraite Afficher( )

POO \ N.EL FADDOULI 100

Exercice (3)
 Définir une classe Cercle qui hérite de la classe Forme et qui a:

– Un attribut privé R de type double (rayon du cercle).

– Un constructeur ayant deux argument: un point (l'origine=centre


du cercle) et un double (le rayon)

– La définition de la méthode Perimetre

– La définition de la méthode Afficher( ) qui affiche les valeurs de


attributs (centre et rayon) d'un cercle.

 Tester la classe Cercle: Créer un objet C – Afficher ses attributs–


Calculer et afficher son périmètre.

POO \ N.EL FADDOULI 101

10
04/05/2021

Exercice (4)

 Définir une classe Polygone qui hérite de la classe Forme et qui a:


– Un attribut privé S de type tableau de Point, contenant les
sommets du polygone. Le premier point du tableau est l'origine
du polygone.
– Un attribut privé N de type entier (nombre de sommets)
– Un constructeur ayant un argument: la taille du tableau de points.
– Une méthode SetPoint (int i, double a, double b) qui remplace les
coordonnées du point d'indice i dans le tableau S par a et b.
– La définition de la méthode Perimetre
– La définition de la méthode Afficher( ) qui affiche les coordonnées
des sommets du polygone.
POO \ N.EL FADDOULI 102

Exercice (5)

 Créer une classe de test de la classe Polygone:


– Créer un objet p de 3 sommets
– Modifier les sommets afin que:
Le premier soit (2,4)
 Le deuxième soit (6, 12)
 Le troisième soit (8,1)
– Afficher le polygone (les coordonnées de ses différents sommets)
– Calculer et afficher son périmètre.

POO \ N.EL FADDOULI 103

11
04/05/2021

Exercice (6)

 Définir une classe Formes qui utilise de la classe Forme et qui a:

– Un attribut privé F qui est un tableau de type Forme

– Un attribut privé N de type entier (taille maximale de F)

– Un attribut privé R de type entier (taille effective de F).

– Un constructeur ayant un argument de type entier ( taille


maximale de F) représentant la valeur initiale de N. Le tableau F de
formes doit être crée (par new) L'attribut R sera initialisé à 0.

– Une méthode Ajouter (Forme e) de type booléen qui ajoute


l'objet e dans le tableau F si c'est possible (si R ≤ N) et retourne
true ou false.
POO \ N.EL FADDOULI 104

Exercice (7)

- Une méthode Afficher qui affiche la nature (utiliser Instanceof) de


chaque élément de F, ses informations (valeurs de ses attributs) ainsi
que son périmètre.

 Créer une classe de test de la classe Formes:

• Créer un objet A de la classe Formes.

• Créer deux objets de la classe Cercle.

• Créer deux objet de la classe Polygone.

• Ajouter ces objets dans A

• Appeler la méthode Afficher pour A.

POO \ N.EL FADDOULI 105

12
04/05/2021

Les interfaces (1)

 Une interface définit un comportement (ensemble de méthodes) qui


doit être implémenté par une classe.
 C'est un ensemble de méthodes abstraites publiques et de
constantes statique publiques.
 Une classe C, qui implémente une interface I, doit implémenter
chacune des méthodes de I. (sauf si elle est abstraite).
 Une classe peut implémenter plusieurs interfaces
Exemple 1:
interface Service class X implements Service
{ { int R;
String A = "Je suis ..."; public void f (int a) {System.out.println(a+1);}
void f (int a); public double g (double a, int b){return a+b;}
double g (double a, int b public void h( ) { System.out.println( A) ;}
); }
}
POO \ N.EL FADDOULI 106

Les interfaces (2)


Exemple 2:
interface Service
{ String A = "Je suis ...";
void f (int a);
double g (double a, int b ); }

abstract class X implements Service


{ int R;
public double g (double a, int b){return a+b;}
public void h( ) { System.out.println( A) ;}
}
class Y extends X
{ …..
public void f(int a ) { …….}
}

POO \ N.EL FADDOULI 107

13
04/05/2021

Les interfaces (3)

 La compilation d'une interface (fichier .java) donne lieu à un fichier


bytecode (.class).

 On ne peut pas instancier une interface.

 On peut définir des références de type interface pouvant référencer


des objet des classes qui implémentent l'interface.

Exemple: Service o = new X();

 Une interface I peut étendre (hériter de) plusieurs interfaces


 ses méthodes et celles des interfaces mères doivent être
définies dans les classes qui implémentent l'interface I.

POO \ N.EL FADDOULI 108

Les interfaces (4)

 Exemple: interface Service2 interface Service3


{ String S2= "......"; { String S3= "......";
void f2(int a); void f3(int a, inte b);
double g2(double a); double g3(String a);
} }

interface Service1 extends Service2 , Service3


{ int S1= 345;
double h(.....);
}

class X implements Service1


{ ..... }

La classe X doit définir toutes les méthodes de Service1, Service2 et


Service3 et aura trois constantes statique S1, S2 et S3.

POO \ N.EL FADDOULI 109

14
04/05/2021

Les interfaces (5)

 Déclarer les méthodes qu’une ou plusieurs classes doivent


implémenter.

 Capturer des similarités entre classes sans lien, sans forcer une
relation de classe.

 Permettre de connaitre le comportement d’un objet sans toutefois


dévoiler le corps réel de la classe (lors du partage de packages de
classes avec d’autres développeurs)

 Simuler l’héritage multiple en déclarant une classe qui implémente


plusieurs interfaces.

POO \ N.EL FADDOULI 110

Les interfaces (6)

 A partir de Java 8, il est possible de définir dans une interfaces:


– Des méthodes statiques

– Des méthodes par défaut dont la définition sera partagée par toutes les
classes qui vont implémenter l'interface. Ces méthodes ont un corps dans
l'interface et sont qualifiées par le mot-clé default.

 Exemple: public interface Itf_A {


public void traiter1( );
public default void traiter2(int k) {
System.out.println("Itf_A -> traiter2 [default]"+k); }
public default int traiter3(int a, int b) {
System.out.println("Itf -> traiter3 [default]"+a+" "+b); }
}
POO \ N.EL FADDOULI 111

15
04/05/2021

Les interfaces (7)

 Exemple: public interface Itf_A { public void traiter1( );


public default void traiter2(int k) {…}
public default int traiter3(int a, int b) {...}
}
public class Cls_A implements Itf_A {
// définition de la méthode traiter1
public void traiter1() { System.out.println("Cls_A -> traiter1"); }

// remplacement de traiter2
public void traiter2(int n) { System.out.println("Cls_A -> traiter2 "+n); }

// Pas de remplacement de traiter3


………
}

POO \ N.EL FADDOULI 112

Exercice 1 (1/2)
Objectif: On veut créer l'interface IPersonne et les deux classes
Personne et Profil

- Libelle : String

1. Créer l’interface IPersonne dans le package emi.rt.inter

POO \ N.EL FADDOULI 113

16
04/05/2021

Exercice 1 (2/2)
2. Créer les classes Personne et Profil dans le package emi.rt.bean
dont chacune contient un constructeur sachant que:

– La classe Personne a un attribut de plus de type Profil.

– Les attributs des deux classes sont privés.

– La méthode affiche () affiche les attributs de la classe.

– La méthode calculerSalaire retourne le salaire plus une


augmentation de 20% pour le "directeur" et 10% pour les autres
employés.

3. Ecrire un programme de test.

POO \ N.EL FADDOULI 114

Exercice 2 (1/2)
Objectif: On veut créer les deux interfaces IOperation et IAffichage
ainsi que les deux classes Complexe et Reel

1. Créer les deux interfaces IOperation et IAffichage dans le package


emi.rt.inter
POO \ N.EL FADDOULI 115

17
04/05/2021

Exercice 2 (2/2)
2. Créer les classes Complexe et Reel dans le package emi.rt.bean dont
chacune contient un constructeur, sachant que:

– On peut ajouter des accesseurs et des modificateurs dans les deux


classes.

– Dans les deux classe Complexe et Reel, le paramètre des deux


méthodes plus () et moins() est un Object.

Rappel: Pour convertir un Object A vers un Complexe C ou un Reel R


Complexe C = (Complexe) A;
Reel R = (Reel) A;

3. Ecrire un programme de test.

POO \ N.EL FADDOULI 116

18

Vous aimerez peut-être aussi