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

Interfaces et Héritage en Java

Le document présente un cours sur la programmation orientée objet en Java, axé sur les interfaces et l'héritage. Il aborde des concepts clés tels que le problème du diamant, les interfaces, l'héritage d'interfaces, et fournit des exemples pratiques. Les interfaces permettent de contourner les limitations de l'héritage multiple et favorisent la flexibilité et l'évolutivité du code.

Transféré par

Anis Ben Aissa
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 vues38 pages

Interfaces et Héritage en Java

Le document présente un cours sur la programmation orientée objet en Java, axé sur les interfaces et l'héritage. Il aborde des concepts clés tels que le problème du diamant, les interfaces, l'héritage d'interfaces, et fournit des exemples pratiques. Les interfaces permettent de contourner les limitations de l'héritage multiple et favorisent la flexibilité et l'évolutivité du code.

Transféré par

Anis Ben Aissa
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

Niveau: 2ème Année GL/RT

Enseignante: Sana HAMDI


Email: [Link]@[Link]
[Link]@[Link]
Chapitre1: Introduction à la programmation orientée objet
Chapitre2: Notions de base Java
Chapitre3: Classes et Objets Java
Chapitre4: Héritage, Polymorphisme et Classes Abstraites
Chapitre5: Les Interfaces
Chapitre6: Les Exceptions

2
CHAPITRE 6

3
PLAN DU CHAPITRE 6
1. Problème du diamant
2. Les interfaces
3. Héritage d’interfaces
4. Exemple

4
PLAN DU CHAPITRE 6
1. Problème du diamant
2. Les interfaces
3. Héritage d’interfaces
4. Exemple

5
 L’héritage
est un paradigme important de la programmation
Orientée Objet.
 Avec l’héritage multiple, se pose le problème du diamant (problème
du losange).

6
 La classe D hérite de deux classes B et C, elles-mêmes filles d'une
même classe A.
 Un problème de conflit se pose lorsque des méthodes ou des
attributs des classes B et C portent le même nom.
 Le nom de ce problème (diamant ou losange) provient de la forme
du schéma d'héritage des classes A, B, C et D dans ce cas.
Pour cela ce mécanisme n'existe pas en Java!!

Sana Hamdi 13/11/2023 7


Comment faire pour bien concevoir en java des cas réels
basés sur l’héritage multiple?

Solution : les interfaces

Sana Hamdi 13/11/2023 8


PLAN DU CHAPITRE 6
1. Problème du diamant
2. Les interfaces
3. Héritage d’interfaces
4. Exemple

9
 Présentation:

 Une interface définit un comportement d’une classe, sans implémenter


ce comportement.
 C’est un ensemble de méthodes abstraites, et de constantes.
 Une interface ne peut pas être instanciée, elle ne peut être que
implémentée par des classes.
 Une classe qui implémente une interface doit fournir le code approprié
des méthodes abstraites.

10
 Une classe peut implémenter plusieurs interfaces

 Une interface peut hériter de plusieurs autres interfaces

 On peut déclarer des variables dont le type est une interface.

 Une classe qui hérite d'une autre classe et qui implémente une interface:
 doit mettre dans l'ordre l'hér itage (extends) puis l'implémentation
(implements)

11
 Syntaxe:

// une interface est soit publique soit accès paquetage(default)


interface interface_exemple [extends noms d'interfaces]{
// déclaration des constantes(public static final facultatifs)
int MAX=100;
// entête d’une méthode F (public abstact facultatifs)
int F(int n);
// entête d’une méthode g (public abstact facultatifs)
void g();
}

 Le corps d'une interface est une énumération de constantes et de méthodes


sans la définition de leurs codes.

Sana Hamdi 13/11/2023 12


 Syntaxe d’implémentation: Utilisation d'une interface par une classe

public interface I1 {
void f ( );
}
public interface I2 {
int g (int);
} La classe A implémente les
public interface I3 extends I2 { fonctionnalités des interfaces I1 et I3
float h (int);
}
class A implements I1, I3 {
/* A doit obligatoirement implémenter les méthodes f, g et h prévues dans I1 et I3 qui
hérite de I2*/
}
13
Interface

«interface»
import [Link].*; Dessinable
public interface Dessinable {
public void dessiner(Graphics g); Opérations dessiner(g : Graphics)
public void effacer (Graphics g); abstraites
}
effacer(g: Graphics)

[Link]

class RectangleDessinable extends Rectangle implements Dessinable {


public void dessiner (Graphics g){
[Link]((int) x, (int) y, (int) largeur, (int) hauteur);
}
public void effacer(Graphics g){
[Link]((int) x, (int) y, (int)largeur, (int) hauteur);
}
} 14
class RectangleDessinable extends Rectangle implements Dessinable,Comparable {

public void dessiner(Graphics g){


[Link]((int) x, (int) y, (int) largeur, (int) hauteur);
}
public void effacer(Graphics g){
[Link]((int) x, (int) y, (int)largeur, (int) hauteur);
}

public int compareTo(Object o) {


if (o instanceof Rectangle)
...
}
}

Méthodes de l’interface Méthodes de l ’interface


Comparable Dessinable
15
Diagramme de classe:

16
PLAN DU CHAPITRE 6
1. Problème du diamant
2. Les interfaces
3. Héritage d’interfaces
4. Exemple

17
 De la même manière qu'une classe peut avoir des sous-classes, une
interface peut avoir des "sous-interfaces "
 Une sous interface:
 hérite toutes les méthodes abstraites et les constantes de sa "super-interface"
 peut définir de nouvelles constantes et méthodes abstraites

interface Set extends Collection


{
...
}

18
À la différence des classes, une interface peut étendre plus d'une
interface à la fois.
package [Link];
interface ByteChannel extends ReadableByteChanel, WriteableByteChanel {
}

19
 Déclaration d'une méthode par défaut
 fournir un corps à la méthode
 qualifier la méthode avec le mot clé default
 Les classes filles sont libérées de fournir une implémentation d'une
méthode default, en cas d'absence d’ implémentation spécifique c'est
la méthode par défaut qui est invoquée.
 Ceci est utile si on veut ajouter ultérieurement une méthode

Ce mécanisme n'existe qu'à partir de Java 8. Jusqu'en Java 7 il n'est pas


possible de créer des méthodes par défaut dans les interfaces.

20
Erreur: la classe Cls, utilisera quelle méthode ?

21
 Pour résoudre le conflit, il existe une seule solution :

 Implémenter la méthode au niveau de la classe elle-même, car


l'implémentation de la classe est toujours prioritaire

22
23
 Une méthode statique est un élément que l'on peut rencontrer dans
une classe normale.

 Un appel statique se fait au travers de la classe, il n'a pas besoin


d'aucune instance pour être exécuté.

 Java 8 autorise des méthodes statiques dans les interfaces, qui


obéissent aux mêmes règles que celles que l'on trouve dans les
classes abstraites ou concrètes.

24
Exemple

public interface Reproduction {


public static void description() {
[Link]("Méthode statique dans une interface");
}
}

public class Main {


public static void main(String[] args) {
[Link]();
}
}

25
 Depuis Java 9, on peut ajouter des méthodes privées et des méthodes statiques
privées dans les interfaces.
 Ces méthodes privées amélioreront la réutilisation du code dans les interfaces. Par
exemple, si deux méthodes par défaut avaient besoin de partager du code, une
méthode d'interface privée leur permettrait de le faire, mais sans exposer cette
méthode privée à ses classes d'implémentation.
 L'utilisation de méthodes privées dans les interfaces obéit à quatre règles :
 La méthode d'interface privée ne peut pas être abstraite.
 La méthode privée ne peut être utilisée qu'à l'intérieur de l'interface.
 La méthode statique privée peut être utilisée dans d'autres méthodes d'interface statiques
et non statiques.
 La méthode non statique privée ne peut pas être utilisée dans des méthodes statiques.

26
27
Intérêt:
 Les interfaces permettent de s’affranchir d’éventuelles contraintes
d’héritage.
 Lorsqu’on examine une classe implémentant une ou plusieurs
interfaces, on est sûr que le code d’implémentation est dans le
corps de la classe
 Permet une grande évolutivité du modèle objet

28
 Bien que la vocation d'une interface soit d'être implémentée par une classe, on peut
définir des variables de type interface.
public interface I {…}
void main (String [] args){
I i;
…}
 On ne pourra pas affecter à i une référence à quelque chose de type I puisqu'on ne
peut pas instancier une interface (pas plus qu'on ne pouvait instancier une classe
abstraite!).
 En revanche, on pourra affecter à i n'importe quelle référence à un objet d'une classe
implémentant l'interface I (Surclassement)
class A implements I{…}
void main (String [] args){
I i = new A(…);//OK
29
PLAN DU CHAPITRE 6
1. Problème du diamant
2. Les interfaces
3. Héritage d’interfaces
4. Exemple

30
abstract class Animal {
...
abstract void talk();
}

class Dog extends Animal { class Bird extends Animal { class Cat extends Animal {
... ... ...
void talk() { void talk() { void talk() {
[Link]("Woof!"); [Link]("Weet"); [Link](« Miaw!");
} } }
} } }

Polymorphisme signifie qu’une référence d’un


En JAVA le polymorphisme est rendu possible
type (classe) donné peut désigner un objet de
par la liaison dynamique (dynamic binding)
n’importe quelle sous classe et selon la nature de
cet objet produire un comportement différent
class Interrogator {
Animal animal = new Dog(); static void makeItTalk(Animal subject) {
... [Link]();
animal = new Cat(); }
[Link](animal) }

animal peut être un Chien, un Chat ou JVM décide à l’exécution (run-time) quelle méthode
n’importe quelle sous classe d ’Animal invoquer en se basant sur la classe de l’objet
31
Question:
Comment utiliser la classe Interrogator pour faire parler aussi un CuckooClock ?

32
Faire passer
CuckooClock dans la
abstract class Animal hiérarchie d’animal?
{
...
abstract class Clock{
abstract void
...
talk();
Pas
}
} d’héritage
multiple
class Dog extends Animal {
... class Bird extends Animal {
void talk() { ... class Cat extends Animal { class CuckooClock {
void talk() {
[Link]("Woof!"); ... ...
} [Link]("Weet");
void talk() { void talk() {
} } [Link](« Miaw!"); [Link](« cuckoo »);
} } }
} }

class Interrogator { class Interrogator {


static void makeItTalk(Animal subject) static void makeItTalk(CuckooClock subject)
{ {
[Link](); [Link]();
} }
} }

Se passer du 33
polymorphisme?
abstract class Animal implements Talkative
{
... abstract class Clock{
abstract void talk(); Association de ce type ...
} à différentes classes
de la hiérarchie }
d’héritage
class Dog extends Animal {
... class Bird extends Animal {
void talk() { ... class Cat extends Animal {
[Link]("Woof!");
void talk() { ... class CukooClock implements Talkative {
} void talk() {
[Link]("Weet"); void talk() {
} }} [Link](« cuckoo »);
[Link](« Miaw!"); }}
}}

class Interrogator {
static void makeItTalk(Talkative subject) { interface Talkative {
[Link](); public void talk();
} }
}

Définition d’un
Utilisation de ce
type abstrait
type abstrait
(interface)

Les interfaces permettent plus de polymorphisme car avec les interfaces il n’est pas
nécessaire de tout faire rentrer dans une seule famille (hiérarchie) de classe 34
 Une interface ne peut pas contenir des méthodes déjà implémentées (sauf des par
défaut, privées ou statiques).

 Une classe, ou une classe abstraite peut implémenter plusieurs interfaces, mais n’a
qu’une super classe, alors qu’une interface peut dériver de plusieurs autres
interfaces.

 Des classes non liées hiérarchiquement peuvent implémenter la même interface

35
 Une interface est un moyen d’attribuer des composants communs à des classes
non liées par une relation d’héritage.

36
37
Merci pour votre attention !

Dr. Sana Hamdi

Maitre Assistante en Informatique à l’INSAT

Membre du Laboratoire LIPAH (FST-Tunisie)


et du Laboratoire SAMOVAR (Telecom SudParis-France)

Vous aimerez peut-être aussi