2I002
HÉRITAGE &ABSTRACTION : INTERFACES JAVA
Vincent Guigue
Le cours est inspiré de sources diverses: L. Denoyer, F. Peschan- ski,...
... 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
... 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
... 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
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
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 }
Interface: exemples & syntaxe (2)
Pour une propriété
Qu’est ce qu’un objetSauvable?
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 }
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 }
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)
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
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 }