Interfaces Interfaces/Langage Interfaces/Langage en Java (rappels) Interfaces Motivations Types plus abstraits que les classes plus réutilisables Technique pour masquer l’implémentation découplage public/privé : type/implémentation Favorise l’écriture de code plus général écrit sur des types plus abstraits Relations de spécialisation multiple entre les interfaces entre les classes et les interfaces Meilleure organisation des types Interfaces Interfaces en Java Dans les versions <= Java 1.7 des méthodes d’instance publiques abstraites avec les modifieurs public abstract des attributs de classe constant publics avec les modifieurs public final static A partir de Java 1.8 des méthodes d’instance publiques présentant des comportements par défaut (avec les modifieurs public et default) des méthodes statiques (avec les modifieurs public et static) des types internes spécialisation entre une interface et une ou plusieurs interfaces par extends implémentation entre une interface et une ou plusieurs classes par implements Interfaces Interfaces en Java 1 2 3 4 5 public interface Iquadrilatere { i n t nbCotes = 4 ; double p e r i m e t r e () ; double s u r f a c e () ; } 6 7 8 9 10 p u b l i c i n t e r f a c e I r e c t a n g l e extends I q u a d r i l a t e r e { i n t a n g l e = 90 ; double getLargeur () ; void s e t L a r g e u r ( double l ) ; double getHauteur () ; void setHauteur ( double h ) ; 11 d e f a u l t double p e r i m e t r e () { r e t u r n 2∗ t h i s . g e t L a r g e u r ( )+2∗ t h i s . g e t H a u t e u r ( ) ; } 12 13 14 d e f a u l t double s u r f a c e () { return t h i s . getLargeur () ∗ t h i s . getHauteur () ; } 15 16 17 default String description () // on ne p e u t p a s l a nommer " t o S t r i n g " { r e t u r n " l a r g e u r ="+t h i s . g e t L a r g e u r ( )+" h a u t e u r ="+t h i s . ←getHauteur () ; } 18 19 20 21 s t a t i c boolean e g a l ( I r e c t a n g l e r 1 , I r e c t a n g l e r 2 ) { r e t u r n r 1 . g e t L a r g e u r ( )==r 2 . g e t L a r g e u r ( ) && r 1 . g e t H a u t e u r ( )==r 2 . g e t H a u t e u r ( ) ; } 22 23 24 25 26 } Interfaces Interfaces en Java 1 2 3 4 5 public interface IobjetColore { Color couleurDefaut = Color . white ; Color getCouleur () ; } 6 7 8 9 10 11 12 // s p e c i a l i s a t i o n m u l t i p l e p u b l i c i n t e r f a c e I r e c t a n g l e C o l o r e extends I o b j e t C o l o r e , I r e c t a n g l e { void repeindre ( Color c ) ; } 13 14 15 16 17 // i m p l e m e n t a t i o n p a r une c l a s s e p u b l i c c l a s s R e c t a n g l e C o l o r e implements I r e c t a n g l e C o l o r e { . . . // e c r i t u r e de t o u t e s l e s methodes d e s i n t e r f a c e s }