Programmation/Programmation orientée objet/Classes abstraites et interfaces
Classe abstraite
[modifier | modifier le wikicode]Une classe abstraite est une classe possédant des méthodes abstraites.
Une méthode abstraite ne possède pas d'implémentation, mais est utilisée par la classe elle-même ou une autre classe. Il n'est pas possible de créer et d'utiliser une instance directe d'une classe abstraite. Il faut utiliser une sous-classe qui implémente toutes les méthodes abstraites.
Interface
[modifier | modifier le wikicode]Une interface ne contient que des méthodes abstraites. Comme une classe abstraite, il n'est pas possible de créer et d'utiliser une instance directe d'une interface. Il faut utiliser une classe qui implémente cette interface, c'est à dire toutes les méthodes abstraites de celle-ci.
Différence
[modifier | modifier le wikicode]La différence entre classe abstraite et interface peut ne pas être évidente au premier abord.
Afin de bien concevoir un modèle objet, voici les principales différences :
- Dans une classe abstraite, il est possible d'avoir des méthodes concrètes qui implémentent des fonctionnalités générales ou communes,
- Dans certains langages de programmation où le nombre de classes mères d'une sous-classe est limité (Java, par exemple, n'autorise qu'une seule classe mère), l'implémentation d'une classe abstraite impose d'hériter de cette classe, alors qu'il est généralement possible d'implémenter plusieurs interfaces dans une classe.
Architecture d'interface
[modifier | modifier le wikicode]Une architecture évolutive permet d'interfacer une procédure ou un algorithme en utilisant les deux concepts :
- Une interface définit l'ensemble minimal de méthodes permettant de gérer une procédure particulière ou un objet.
- Une classe abstraite implémente une partie de l'interface pour fournir l'implémentation par défaut que les sous-classes peuvent utiliser.
Cette architecture permet d'implémenter plus facilement l'interface car elle fournit une partie de l'implémentation. Il est possible également d'implémenter les méthodes de l'interface d'une autre façon, en créant une autre classe de base.
Exemples
[modifier | modifier le wikicode]- Le Patron de conception « Fabrique abstraite »
- En C sharp : Classe abstraites et Interfaces
- En C++ : Classes abstraites
- En Java : Classe abstraites et Interfaces