Vous êtes sur la page 1sur 30

Réutilisation des classes

Méthodes et classes abstraites, Interface

Programmations Orientées Objet - JAVA


Chap 3 : Délégation & héritage

Pr. Laila AMIR

Licence SIR
(Systèmes informatiques Répartis)

Année universitaire 2019/2020

Laila AMIR Programmations Orientées Objet 1 / 30


Réutilisation des classes
Méthodes et classes abstraites, Interface

Plan

1 Réutilisation des classes


Délégation
Héritage

2 Méthodes et classes abstraites, Interface


Méthodes et classes abstraites
Définition d’une interface
Déclaration d’une interface
Implémentation d’une interface

Laila AMIR Programmations Orientées Objet 2 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Plan

1 Réutilisation des classes


Délégation
Héritage

2 Méthodes et classes abstraites, Interface


Méthodes et classes abstraites
Définition d’une interface
Déclaration d’une interface
Implémentation d’une interface

Laila AMIR Programmations Orientées Objet 3 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Introduction

Dans une conception objet on définit des associations (relations) entre


classes pour exprimer la réutilisation.

Nous nous focaliserons sur deux formes d’association


Un objet peut faire appel à un autre objet : délégation
Un objet peut être créé à partir d’un autre objet : héritage

Laila AMIR Programmations Orientées Objet 4 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Délégation

Un objet o1 instance de la classe C1 utilise les services d’un objet o2


instance de la classe C2 (o1 délègue une partie de son activité à o2).
La classe C1 utilise les services de la classe C2
C1 est la classe cliente
C2 est la classe serveuse

public class C1 {
public class C2 {
private C2 refc2;
...
...
}
}
La classe cliente C1 possède une référence de type de la classe
serveuse C2.

Laila AMIR Programmations Orientées Objet 5 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Délégation : exemple
Le point peut être partagé
par plusieurs instances d’objets
public class Cercle {
private Point centre; (éventuellement d’autres classes).
private double r;
public Cercle(Point centre, double r) { Point p1 = new Point(10,0);
this.centre = centre; Cercle c1 = new Cercle(p1,10);
this.r = r; Cercle c2 = new Cercle(p1,20);
}
c2.deplace(10,0); Affecte aussi c1
...
public void deplace(double dx,double dy)
{
centre.deplace(dx,dy);
}
}

Après ces opérations le centre des 2 cercles est (20,0).


Laila AMIR Programmations Orientées Objet 6 / 30
Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Délégation : exemple
Le Point représentant le centre n’est
pas partagé (un Point ne peut être
liée qu’à un seul Cercle)

public class Cercle { Point p1 = new Point(10,0);


private Point centre; Cercle c1 = new Cercle(p1,10);
private double r; Cercle c2 = new Cercle(p1,20);
public Cercle(Point centre, double r)
{ c2.deplace(10,0); N’affecte que c2.
this.centre = new Point(centre);
this.r = r;
}
...
}

Laila AMIR Programmations Orientées Objet 7 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Héritage

l’héritage permet de reprendre les caractéristiques d’une classe


existante (mère) pour les étendre et définir ainsi une nouvelle classe
(fille) qui hérite de l’existante.

Les objets de la classe fille possèdent toutes les caractéristiques de la


classe mère avec en en plus celles propres de la classe fille.

La relation d’héritage peut être vue comme une relation de


”généralisation/spécialisation” entre une classe (la super-classe) et
plusieurs classes plus spécialisées (ses sous-classes).

Laila AMIR Programmations Orientées Objet 8 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Généralisation/Spécialisation
La généralisation exprime une relation ”est-un” entre une classe et
sa super-classe (chaque instance de la classe est aussi décrite de façon
plus générale par la super- classe)=> factorisation les propriétés
communes aux sous-classes.
La spécialisation exprime une relation de ”particularisation” entre
une classe et sa sous-classe (chaque instance de la sous-classe est
décrite de manière plus spécifique)=> modification incrémentielle
les descriptions existantes.

Laila AMIR Programmations Orientées Objet 9 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

L’héritage

toute classe autre que Object possède


une super-classe;
toute classe hérite directement ou
indirectement de la classe Object;
toute classe ne dérivant d’aucune classe
hérite implicitement de la classe Object;
Java ne supporte que l’héritage simple.
Il est impossible de faire dériver une
classe de plus d’une autre classe;
Les classes C, D, E
Le mot clé pour déclarer une classe héritent de la classe B. Et
dérivée est extends. B hérite de la classe A1

Laila AMIR Programmations Orientées Objet 10 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Exemple 1 : héritage simple

Dans cet exemple, la classe Voiture class Vehicule {


hérite de la classe Vehicule, ce qui protected :
int age ;
veut dire que les attributs age
float poids ;
et poids, moteur bien qu’étant boolean moteur ;
définis dans la classe Vehicule, int getWeight() { return(poids) ;}
sont présents dans la classe }
Voiture. public class Voiture extends Vehicule {
public int places ;
public Voiture() {
Le constructeur défini dans la classe moteur = true ;
Voiture permet d’ailleurs d’initialiser places = 4 ;
ces attributs. }
}

Laila AMIR Programmations Orientées Objet 11 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Réutilisation des constructeurs

réutilisation du code des constructeurs de la super classe dans la


définition des constructeurs d’une nouvelle classe;

invocation d’un constructeur de la super classe :


super(paramètres du constructeur);

appel à un constructeur de la super classe doit toujours être la


première instruction dans le corps du constructeur;

si la première instruction d’un constructeur n’est pas un appel


explicite à l’un des constructeur de la superclasse, alors JAVA insère
implicitement l’appel super();

Laila AMIR Programmations Orientées Objet 12 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Réutilisation des constructeurs

public class Point {


double x,y;
public Point(double x, double y){
// super(); appel implicite du constructeur de la classe Object
this.x = x; this.y = y;
}
}

import java.awt.Color;
public class PointCouleur extends Point {
Color c;
public PointCouleur(double x, double y, Color c){
super(x,y);
this.c = c;
}
}
Laila AMIR Programmations Orientées Objet 13 / 30
Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Constructeur par défaut

Lorsqu’une classe ne définit pas explicitement de constructeur, elle


possède un constructeur par défaut sans paramètres.

constructeur par défaut implicite

Laila AMIR Programmations Orientées Objet 14 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Constructeur par défaut

Le compilaeur génère une erreur :

Laila AMIR Programmations Orientées Objet 15 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Redéfinition des méthodes

Redéfinition d’une méthode c’est lorsque la classe définit une


méthode dont le nom, le type de retour et le type des
arguments sont identiques à ceux d’une méthode dont elle
hérite;

Lorsqu’une méthode redéfinie par une classe est invoquée pour un


objet de cette classe, c’est la nouvelle définition et non pas celle de la
super-classe qui est invoquée.

Laila AMIR Programmations Orientées Objet 16 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Exemple 2

// Animal.java
public class Animal
{
private int poids;
public void dormir () { System.out.println (”Méthode dormir de Animal”); }
public void jouer () { System.out.println (”Méthode jouer de Animal”);}
public void seReproduire () { System.out.println (”Méthode sereproduire de
Animal”); }
}
// Mammifere.java
public class Mammifere extends Animal
{
public void seReproduire () { System.out.println (”Méthode seReproduire de
Mammifère”);}
}

Laila AMIR Programmations Orientées Objet 17 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

// Chat.java
public class Chat extends Mammifere{
public void jouer () { System.out.println (”Méthode jouer de Chat”);}
public void miauler () { System.out.println (”Méthode miauler de Chat”);}
}

// RunChat.java
public class RunChat{
L’exécution de RunChat donnera :
public static void main (String []args){
Chat minet = new Chat();
minet.dormir(); Méthode dormir de Animal
minet.seReproduire(); Méthode seReproduire de Mammifère
minet.jouer(); Méthode jouer de Chat
}
}

Laila AMIR Programmations Orientées Objet 18 / 30


Réutilisation des classes Délégation
Méthodes et classes abstraites, Interface Héritage

Le mot-clé super

Ce mot-clé permet également d’accéder explicitement aux membres de


la classe de base, dans le cas, où il existe déjà un membre portant ce
nom dans la classe (redéfinition de méthode, ...).
Exemple :

public class Vehicule{


public void rouler(){ position += vitesse; }
}
public class Avion extends Vehicule {
public void rouler(){
if (altitude > 0)
System.out.println(”L’avion en vol ne peut rouler”);
else super.rouler();
}
}

Laila AMIR Programmations Orientées Objet 19 / 30


Méthodes et classes abstraites
Réutilisation des classes Définition d’une interface
Méthodes et classes abstraites, Interface Déclaration d’une interface
Implémentation d’une interface

Plan

1 Réutilisation des classes


Délégation
Héritage

2 Méthodes et classes abstraites, Interface


Méthodes et classes abstraites
Définition d’une interface
Déclaration d’une interface
Implémentation d’une interface

Laila AMIR Programmations Orientées Objet 20 / 30


Méthodes et classes abstraites
Réutilisation des classes Définition d’une interface
Méthodes et classes abstraites, Interface Déclaration d’une interface
Implémentation d’une interface

Les méthodes et classes abstraites

Une méthode déclarée abstract ne peut être exécutée. En fait, elle n’a pas
d’existence réelle. Sa déclaration indique simplement que les classes
dérivées doivent la redéfinir.

Les méthodes abstract présentent les particularités suivantes :


Une classe qui contient une méthode abstract doit être déclarée
abstract.
Une classe abstract ne peut pas être instanciée.
Une classe peut être déclarée abstract, même si elle ne comporte pas
de méthodes abstract.

Laila AMIR Programmations Orientées Objet 21 / 30


Méthodes et classes abstraites
Réutilisation des classes Définition d’une interface
Méthodes et classes abstraites, Interface Déclaration d’une interface
Implémentation d’une interface

Les méthodes et classes abstraites

Pour pouvoir être instanciée, une sous-classe d’une classe abstract


doit redéfinir toute les méthodes abstract de la classe parente.
Si une des méthodes n’est pas redéfinie de façon concrète, la
sous-classe est elle-même abstract et doit être déclarée explicitement
comme telle.
Les méthodes abstract n’ont pas d’implémentation. Leur
déclaration doit être suivie d’un point-virgule.

Remaque : La notion abstract en Java est proche de la notion virtuelle


pure en C++, par défaut toutes les méthodes de Java sont virtuelles alors
qu’en C++ les méthodes virtuelles doivent l’être explicitement à l’aide du
mot-clé virtual.

Laila AMIR Programmations Orientées Objet 22 / 30


Méthodes et classes abstraites
Réutilisation des classes Définition d’une interface
Méthodes et classes abstraites, Interface Déclaration d’une interface
Implémentation d’une interface

Les méthodes et classes abstraites

La méthode crie() de la
classe Animal est déclarée abstract class Animal {
abstract, ce qui signifie que // champs
le cri d’un animal est une // méthodes
notion abstraite. abstract void crie() ;
}
La méthode ainsi définie
indique qu’une sous-classe De cette façon, il n’est plus possible de
devra définir la méthode de créer un animal en instanciant la classe
façon concrète. Animal.

Laila AMIR Programmations Orientées Objet 23 / 30


Méthodes et classes abstraites
Réutilisation des classes Définition d’une interface
Méthodes et classes abstraites, Interface Déclaration d’une interface
Implémentation d’une interface

Les méthodes et classes abstraites

class Chien extends Animal { class Chat extends Animal {


// champs // champs
// méthodes // méthodes
void crie() { void crie() {
System.out.println( System.out.println(
”Haw-Haw”); ”Miaou-Miaou”);
} }
} }

En revanche, grâce à la déclaration de la méthode abstract crie() dans la


classe Animal, il est possible de faire crier un animal sans savoir s’il
s’agit d’un chien ou d’un chat!

Laila AMIR Programmations Orientées Objet 24 / 30


Méthodes et classes abstraites
Réutilisation des classes Définition d’une interface
Méthodes et classes abstraites, Interface Déclaration d’une interface
Implémentation d’une interface

Les méthodes et classes abstraites

En considérant les instances de Chien ou de Chat comme des instances de


la classe parente.

Animal animal1 = new Chien() ;


Animal animal2 = new Chat() ;
animal1.crie() ;
animal2.crie() ;

Le premier animal crie ”Haw-Haw” ; le second, ”Miaou-Miaou”.

Laila AMIR Programmations Orientées Objet 25 / 30


Méthodes et classes abstraites
Réutilisation des classes Définition d’une interface
Méthodes et classes abstraites, Interface Déclaration d’une interface
Implémentation d’une interface

Définition d’une interface

Une classe peut contenir des méthodes abstract et des


méthodes non abstract. Cependant, il existe une catégorie
particulière de classes qui ne contient que des méthodes abstract. Il
s’agit des interfaces.

Les interfaces sont toujours abstract, sans qu’il soit nécessaire de


l’indiquer explicitement.

De la même façon, il n’est pas nécessaire de déclarer leurs


méthodes abstract.

Laila AMIR Programmations Orientées Objet 26 / 30


Méthodes et classes abstraites
Réutilisation des classes Définition d’une interface
Méthodes et classes abstraites, Interface Déclaration d’une interface
Implémentation d’une interface

Les interfaces

Les interfaces obéissent par ailleurs à certaines règles supplémentaires.

Elles ne peuvent contenir que des variables static et final.

Elles peuvent être étendues comme les autres classes, avec une
différence majeure : une interface peut dériver de plusieurs autres
interfaces. En revanche, une classe ne peut pas dériver de plusieurs
classes (pas d’héritage multiple de classes).

Une classe dérive toujours d’une autre classe, et peut dériver,


en plus, d’une ou plusieurs interfaces.

Laila AMIR Programmations Orientées Objet 27 / 30


Méthodes et classes abstraites
Réutilisation des classes Définition d’une interface
Méthodes et classes abstraites, Interface Déclaration d’une interface
Implémentation d’une interface

Déclaration d’une interface

La définition d’une interface se présente comme celle d’une classe. On y


utilise simplement le mot-clé interface à la place de class :

public interface Inter {


void f(int n) ; // en-tête d’une méthode f (public abstract facultatifs)
void g() ; // en-tête d’une méthode g (public abstract facultatifs)
}

Une interface peut être dotée des mêmes droits d’accès qu’une classe
(public ou droit de paquetage).
il n’est pas nécessaire de mentionner les mots-clés public et abstract
(on peut quand même le faire).

Laila AMIR Programmations Orientées Objet 28 / 30


Méthodes et classes abstraites
Réutilisation des classes Définition d’une interface
Méthodes et classes abstraites, Interface Déclaration d’une interface
Implémentation d’une interface

Implémentation d’une interface

Lorsqu’on définit une classe, on peut préciser qu’elle implémente une


interface donnée en utilisant le mot-clé implements, comme dans :

class A implements Inter


{
// A doit (re)définir les méthodes f et g prévues dans l’interface
Inter
}

Ici, on indique que A doit définir les méthodes prévues dans


l’interface Inter, c’est-à-dire f et g. Si cela n’est pas le cas, on obtiendra
une erreur de compilation.

Laila AMIR Programmations Orientées Objet 29 / 30


Méthodes et classes abstraites
Réutilisation des classes Définition d’une interface
Méthodes et classes abstraites, Interface Déclaration d’une interface
Implémentation d’une interface

Implémentation d’une interface


Une même classe peut implémenter plusieurs interfaces :

public interface Inter1


{
void f() ;
}
public interface Inter2
{ int h() ;
}
class A implements Inter1, Inter2
{
// A doit obligatoirement définir les méthodes f et h prévues dans
Inter1 et Inter2
}

Laila AMIR Programmations Orientées Objet 30 / 30

Vous aimerez peut-être aussi