• Aucun résultat trouvé

2I002 HÉRITAGE &ABSTRACTION : INTERFACES JAVA

N/A
N/A
Protected

Academic year: 2022

Partager "2I002 HÉRITAGE &ABSTRACTION : INTERFACES JAVA"

Copied!
12
0
0

Texte intégral

(1)

2I002

HÉRITAGE &ABSTRACTION : INTERFACES JAVA

Vincent Guigue

Le cours est inspiré de sources diverses: L. Denoyer, F. Peschan- ski,...

(2)

... Et certaines situations posent problèmes

Je fais du dessin... Et je veux pouvoir sauver le résultat.

Je fais du dessin... Et je veux afficher facilement le résultat à l’écran

⇒limite de l’héritage : pas d’héritage multiple en JAVA

⇒mais un autre outil: les interfaces

(3)

... Et certaines situations posent problèmes

Je fais du dessin... Et je veux pouvoir sauver le résultat.

Je fais du dessin... Et je veux afficher facilement le résultat à l’écran

⇒limite de l’héritage : pas d’héritage multiple en JAVA

⇒mais un autre outil: les interfaces

(4)

... Et certaines situations posent problèmes

Je fais du dessin... Et je veux pouvoir sauver le résultat.

Je fais du dessin... Et je veux afficher facilement le résultat à l’écran

⇒limite de l’héritage : pas d’héritage multiple en JAVA

⇒mais un autre outil: les interfaces

(5)

Interface: définition et usage

Usage

Une interface définit :

un cahier des charges (e.g. Voiture, Circuit...) une propriété (e.g. Serializable, Clonable...)

Elle donne les fonctions à implémenter et leur signature.

≈Classe abstraite pure

Elle contient des signatures de fonctions (comme les fonctions abstraites d’une classe abstraite)

Pas de code (<Java 1.8) Pas d’attribut (<Java 1.8) Toutes les fonctions sontpublic

(6)

Interface: exemples & syntaxe

Que doit faire une voiture? vue de l’extérieur de l’objet (Création)

Accélérer, freiner, tourner

Observation (Position, Direction, Vitesse, Dérapage) Observation des propriétés (capacités de braquage, vmax...)

1 p u b l i c i n t e r f a c e V o i t u r e {

2 // p o u r l e p i l o t a g e

3 p u b l i c v o i d a c c e l e r e r (d o u b l e d ) ;

4 p u b l i c v o i d f r e i n e r (d o u b l e d ) ;

5 p u b l i c v o i d t o u r n e r (d o u b l e d ) ;

6

7 // p o u r l ’ o b s e r v a t i o n

8 p u b l i c d o u b l e g e t V i t e s s e ( ) ;

9 p u b l i c V e c t e u r g e t P o s i t i o n ( ) ;

10 p u b l i c V e c t e u r g e t D i r e c t i o n ( ) ;

11 }

(7)

Interface: exemples & syntaxe (2)

Pour une propriété

Qu’est ce qu’un objetSauvable?

(8)

Interface: exemples & syntaxe (2)

Pour une propriété

Qu’est ce qu’un objetSauvable?

Réponse: c’est un objet qui contient la méthode suivante

void save(String filename)

On définit donc l’interface suivante:

1 p u b l i c i n t e r f a c e S a u v a b l e {

2 p u b l i c v o i d s a v e ( S t r i n g f i l e n a m e ) ;

3 }

(9)

Interface: exemples & syntaxe (2)

Exemple d’objetSauvable: la classe Vecteur.

L’objet Sauvableimplémentel’interface Sauvable.

Comme pour les classes abstraites, Vecteurdoit contenir la méthode (contrat): public void save(String filename) On est donc sûr de pouvoir sauver l’objet Vecteur, il y a donc bien une logique de cahier des charges

1 p u b l i c c l a s s V e c t e u r implements S a u v a b l e {

2 ( . . . )

3 p u b l i c v o i d s a v e ( S t r i n g f i l e n a m e ) {

4 ( . . . ) // c o n t i e n t l e c o d e

5 }

6 7 }

(10)

Interface & héritage: propriétés

Un objet ne peut hériter que d’une classe mère

Mais un objet peut implémenter plusieurs interfaces(c’est à dire respecter plusieurs propriétés)

Dans un logiciel de géométrie on peut imaginer plusieurs propriétés:

Dessinable (méthodedraw), Deplacable (méthodemove)...

1 p u b l i c c l a s s P o l y g o n e e x t e n d s F i g u r e

2 implements D e s s i n a b l e , D e p l a c a b l e {

3 ( . . . )

4 // H e r i t e d e s m e t h o d e s de F i g u r e

5 // d o i t i m p l e m e n t e r l e s m e t h o d e s draw e t move

6 }

NB: si la classe mère implémente une interface, la classe fille aussi (elle hérite des méthodes de toutes façons)

(11)

Interfaces et variables

Il est possible (et souvent souhaitable) de déclarer une variable d’un type interface

Pas d’instanciation d’une interface (comme pour les classes abstraites)

Evidemment, on peut faire des tableaux dont le type est celui de l’interface

Utilisation intensive dans la suite du cours

Dans ce cas, seules les méthodes de l’interfaces sont accessibles

(12)

Interface et héritage

Les interfaces peuvent hériter les unes des autres

1 p u b l i c i n t e r f a c e P o s i t i o n n a b l e {

2 p u b l i c V e c t e u r g e t P o s i t i o n ( ) ;

3 }

4

5 p u b l i c i n t e r f a c e D e p l a c a b l e e x t e n d s P o s i t i o n n a b l e {

6 p u b l i c v o i d move ( V e c t e u r v ) ;

7 // Un o b j e t D e p l a c a b l e d o i t i m p l e m e n t e r g e t P o s i t i o n

8 }

Références

Documents relatifs

On souhaite écrire en langage Java une bibliothèque de fonctions permettant d’assurer un certain nombre de traitements sur un ensemble de valeurs réelles représenté par une

La méthode addTab permet d’ajouter un composant dans une nouvelle feuille. Généralement on utilise un JPanel. L’onglet affiché peut être modifié à l’aide de

Ex : La classe Velo hérite de la classe Vehicule la méthode demarrer(), mais celle-ci est redéfinie pour être adaptée à la classe Velo (par exemple demarrer() pour

Here is a RECURSIVE function to compute the Fibonacci sequence of number n.. But we need more memory to store values in

Mais l’instruction print(s) n’affichera pas la suite d’octets, elle affichera la chaîne de caractères, car Python fait dans ce cas la correspondance entre les octets et

Nous souhaitons pouvoir transformer les figures: translater, mettre à l’échelle, calculer des distances et des surfaces (figures fermées), et bien sûr afficher les figures... Etude

-F DPODFQU EF DMBTTF BCTUSBJUF TF TJUVF FOUSF DFMVJ EF DMBTTF FU DFMVJ EJOUFSGBDF $FTU VOF DMBTTF RVPO OF QFVU QBT EJSFDUFNFOU JOTUBODJFS DBS DFSUBJOFT EF TFT NÏUIPEFT OF TPOU

PROPRIÉTÉS GLOBALES (Formulaire). 1 Symétries