Apparues avec PHP 5, les classes abtraites (abstract classes) et autres interfaces mettent du temps à s’imposer au sein de la communauté des développeurs PHP. Largement répandues dans les mondes Java et .NET, ces deux notions constituent l’un des fondements de la programmation orientée objet (Object oriented programming). Si leur utilisation n’est pas particulièrement souhaitable pour générer de simples pages web dynamiques, en revanche, lorsqu’il s’agit de construire de véritables applications métier, aucune hésitation n’est permise – mais encore faut-il avoir compris leur utilité !
Les classes abstraites
Une classe abstraite est une classe dont toutes les méthodes n’ont pas été implémentées. Elle n’est donc pas instanciable, mais sert avant tout à factoriser du code. Une classe qui hérite d’une classe abstraite doit obligatoirement implémenter les méthodes manquantes (qui ont été elles-mêmes déclarées « abstraites » dans la classe parente). En revanche, elle n’est pas obligée de réimplémenter les méthodes déjà implémentées dans la classe parente (d’où une maintenance du code plus facile).
Les interfaces
Une interface est un peu comme une classe abstraite dans laquelle aucune méthode ne serait implémentée : les méthodes y sont seulement déclarées. Cela permet de définir un ensemble de services visibles depuis l’extérieur (l’API : Application Programming Interface), sans se préoccuper de la façon dont ces services seront réellement implémentés. Une classe qui implémente une interface doit obligatoirement implémenter chacune des méthodes déclarées dans l’interface, à moins qu’elle ne soit elle-même déclarée… abstraite !
Classe abstraite ou interface ?
Classes abtraites et interfaces ont chacune une fonction bien distincte : les classes abstraites servent à factoriser du code, tandis que les interfaces servent à définir des contrats de service. Et pourquoi ne pas utiliser des classes abstraites (dans lesquelles aucune méthode ne serait implémentée) en lieu et place des interfaces ? La réponse est simple : dans la plupart des langages actuels (c’est notamment le cas de Java, C#, PHP), il n’est possible pour une classe d’hériter que d’une seule classe parente (abstraite ou non), mais d’implémenter plusieurs interfaces.
walid
26 février 2010
salut jean,
En lisant ton article, je me suis arrête sur une phrase qui n’est pas tout à fait juste.
Une classe abstraite est une classe dont toutes les méthodes n’ont pas été implémentées
En effet, une classe abstraite peut contenir, et des méthodes implémentées, et des signatures de méthodes.
C’est d’ailleur la grande différence avec les interfaces ; qui elles ne peut contenir que des signatures de méthodes.
bastien
4 mars 2010
je pense que la formulation « Une classe abstraite est une classe dont toutes les méthodes n’ont pas été implémentées. » est correcte. Cela signifie bien qu’il y a au moins une méthode qui n’a pas été implémentée.
manel
9 mars 2010
merci pour celle correction walid
hhf
2 mai 2010
Walid, loin de moi l’idée de troller, mais je crois que tu as mal lu :
«Une classe abstraite est une classe dont toutes les méthodes n’ont pas été implémentées.»
ne veut pas dire :
«Une classe abstraite est une classe dont aucunes méthodes n’est implémentées.»
«En effet, une classe abstraite peut contenir, et des méthodes implémentées.»
C’est ce que vous dites tous les deux. Jean et toi.
Henri NDIAYE
1 juin 2010
Je suis parfaitement d’accord avec Walid.
Exemple :
Julien
15 juin 2010
Walid la phrase que tu reprends signifie exactement ce que tu dis.
Une classe abstraite est une classe dont toutes les méthodes n’ont pas été implémentées signifie qu’il y a certaines méthodes (pas toutes) qui n’ont pas d’implémentation, cela veut donc dire que cette classe contient des méthodes implémentées et des méthodes non implémentées …
abdou
26 juin 2010
Ah oui ! L’auteur a bien raison !
« Toutes les méthodes n’ont pas été implémentées » signifie juste qu’il existe au moins une méthode non implémentée !
A ne pas confondre avec aucune méthode de la classe abstraite n’est implémentée !
Merci
swifty
9 août 2010
@walid
la phrase de l’auteur dit que:
« Une classe abstraite est une classe dont toutes les méthodes n’ont pas été implémentées »
sa négation est:
« Une classe qui n’est pas abstraite est une classe dont toutes les méthodes ont été implémentées »
donc je pense que la formulation de jean est correcte
zaineb
28 décembre 2010
une classe abstraite est une classe dans la définition est procéder par le mot << abstract >> , si une classe possède un ou plusieurs méthodes abstraites doit être déclarer abstraite et le réciproque n’est pas vrai.
une classe abstraite ne peut jamais être instancier avec l’opérateur new pour créer un objet
on peut déclarer des variables de types de la classe abstraite
une classe héritant d’une classe abstraite doit donne une implémentation à tout les méthodes abstraite de sa super classe si non elle doit être déclarer abstraite
Anonyme
9 septembre 2011
Ben moi j’ai rien compris
c’est du delire votre truc !!!
Agent de sécurité
13 septembre 2012
Comme tout le monde je vais troller un peu…
Aucun commentaire ne sert vraiment ! Le premier est un aveu de non compréhension du français alors que le deuxième vient le rappeler à l’ordre…
Les autres commentaires c’est du pure troll !
Anonyme
19 juin 2013
Merci pour cet article très clair qui m’a permis de bien comprendre l’utilité et l’utilisation de ces deux types de classes.
benladder
16 septembre 2013
Je suis d’avis que dire :
« Une classe abstraite est une classe dont toutes les méthodes n’ont pas été implémentées »
est exactement la même chose que de dire :
« Une classe abstraite est une classe dont aucune méthode n’est implémentée »
selfful
13 novembre 2013
La phrase « Une classe abstraite est une classe dont toutes les méthodes n’ont pas été implémentées » st correcte.
Cependant, elle peut porter a confusion.
Ça serait mieux s’il était possible de l’écrire d’une manière plus claire et simple. Le but n’est pas juste de donner les bonnes informations mais aussi (et surtout?) être pédagogue.
je propose:
« Une classe abstraite est une classe dont au moins une méthode n’est pas implémentée »
FoW
14 décembre 2013
Je continue le débat :
« Une classe abstraite est une classe dont toutes les méthodes n’ont pas été implémentées »
Je pense que la phrase exacte est :
« Une classe abstraite est une classe dont les méthodes n’ont pas toutes été implémentées»
Comme ça il n’y a pas de doute dans l’interprétation de la phrase.
safo
30 avril 2014
Toutes les méthodes non implémentées veut dire que pas toutes les méthodes ou autrement dit: si au moins une méthodes qui n’est pas implémentée.