Outils pour utilisateurs

Outils du site


bloc2:prog:poo:interfaces

Ceci est une ancienne révision du document !


Les interfaces

Principes

Si on considère une classe abstraite qui ne décrit que des méthodes abstraites (aucun attribut, aucune méthode implémentée), on aboutit à la notion d’interface.

Une interface décrit les signatures d’un certain nombre de méthodes, et possiblement aussi de constantes, dont on souhaite imposer l’existence dans certaines classes ;

Exemple :

// une interface qui décrit les comportements d'un objet déplaçable
public interface Movable {
 public void moveTo (Point position);
 public void moveTo (int x_position, int y_position);
}

Usage :

// En implémentant l’interface Movable, la classe Rectangle doit nécessairement 
// implémenter et définir le contenu des méthodes inscrites dans l’interface Movable
public class Rectangle implements Movable {
 public void moveTo (Point position) {
 ...
 }
 public void moveTo (int x_position, int y_position) {
 ...
 }
}

Cela ressemble beaucoup à une hybridation entre :

  • héritage (implements en lieu et place de extends) ;
  • et classe abstraite.

Pourtant, ce n’est ni vraiment l’un, ni vraiment l’autre.

Règles de construction

  • Le mécanisme sous-jacent se distingue de l’héritage en le rendant plus riche : une classe peut implémenter plusieurs interfaces alors qu’elle ne peut hériter qu’une fois (héritage simple) ;
  • Implémentation d’interface et extension par héritage peuvent se combiner ;
  • Par définition, les méthodes d’une interface sont abstraites ;
  • Une interface est perçue par l’environnement comme un type à part entière. Il est donc possible de déclarer une variable d’un type d’interface ;

Bénéfices

  • Une interface permet de définir un ensemble de services « contractuels » dont on veut être certain qu’une classe les fournira. La classe est libre de l’implémentation (comment est réalisé le service) mais pas du contrat (la surface d’échange : paramètres et retour).

Exemple : en Java, typer une donnée List (qui est une Interface disponible dans le JDK) permet d’accepter différentes sortes de collections (celles qui implémentent List) et de les traiter indistinctement par le fait que les fonctionnalités de base de ces collections sont les mêmes.

  • Comme le mécanisme d’interface est absolument indépendant de l’héritage, il est possible d’implémenter une même interface dans des classes distinctes qui ne partagent rien (pas de filiation, pas d’ADN commun), mais ont pourtant des comportements similaires.

Illustrations : API Java

Les Classes abstraites et interfaces sont largement employées dans la conception des bibliothèques graphiques (les composants graphiques SWING, par exemple) et des bibliothèques de classes techniques (les collections, par exemple).

bloc2/prog/poo/interfaces.1710430958.txt.gz · Dernière modification : 2024/03/14 16:42 de admin