29-05-2010, 09:34 AM
Selon moi, l'utilisation d'interfaces est beaucoup plus puissant qu'un simple héritage.
Quand on implémente une interface, on développe ce que l'on veut au sein de sa classe (même si par composition ou par délégation, il est possible bien entendu de regrouper des comportements), tandis qu'avec un simple héritage, on peut se retrouver avec des méthodes qui nous intéressent pas au sein de la classe mère.
Cela permet également de modulariser son code. Comme tu l'as si bien dit, on peut implémenter plusieurs interfaces au sein d'une classe. Du coup il assez simple de découper son code en petits morceaux que l'on va greffer dans notre projet (dans le cas de PHP c'est moins flagrant, mais je t'assure que pour d'autres langages comme le Java, le C++ ou même l'ActionScript, c'est super utile). A titre d'exemple, si je développe une librairie de composants graphiques, je peux définir que mes composants sont déplaçables (IMovable), et également que je peux modifier leurs tailles (IResizable) : C'est plus intéressant qu'une classe Component qui contient l'implémentation des deux.
Et comme tu l'as dit à la fin, cela permet d'imposer une structure afin qu'une équipe, ou un ensemble de personnes, respectent un ensemble de règles quand ils développent avec ton code pour une meilleure lisibilité et une plus grande compréhension. Et s'il y a des nouvelles choses à développer, il suffit de rajouter les interfaces correspondantes, et de greffer petit à petit les nouveaux morceaux de code.
Quand on implémente une interface, on développe ce que l'on veut au sein de sa classe (même si par composition ou par délégation, il est possible bien entendu de regrouper des comportements), tandis qu'avec un simple héritage, on peut se retrouver avec des méthodes qui nous intéressent pas au sein de la classe mère.
Cela permet également de modulariser son code. Comme tu l'as si bien dit, on peut implémenter plusieurs interfaces au sein d'une classe. Du coup il assez simple de découper son code en petits morceaux que l'on va greffer dans notre projet (dans le cas de PHP c'est moins flagrant, mais je t'assure que pour d'autres langages comme le Java, le C++ ou même l'ActionScript, c'est super utile). A titre d'exemple, si je développe une librairie de composants graphiques, je peux définir que mes composants sont déplaçables (IMovable), et également que je peux modifier leurs tailles (IResizable) : C'est plus intéressant qu'une classe Component qui contient l'implémentation des deux.
Et comme tu l'as dit à la fin, cela permet d'imposer une structure afin qu'une équipe, ou un ensemble de personnes, respectent un ensemble de règles quand ils développent avec ton code pour une meilleure lisibilité et une plus grande compréhension. Et s'il y a des nouvelles choses à développer, il suffit de rajouter les interfaces correspondantes, et de greffer petit à petit les nouveaux morceaux de code.