Après avoir vu les switch Expression, découvrons une autre nouveauté, qui va faire écrire beaucoup d’encre (façon de parler hein ). Il existait depuis toujours en .net les Interface … sans corps de méthode.
Découvrez les .. interfaces avec corps de méthode (une classe abstraire en somme non ?)
Les Interfaces – Le meilleur moyen de découpler votre code
Quand on fait de la POO, on sait que l’héritage est une première piste pour créer du code propre, et découplé.
Au début, il existait les classes abstraites
On découvre alors les classes abstraites et la puissance d’imposer une méthode à être implémenter dans une classe fille.
De plus, on peut avoir des méthodes dans cette classe abstraite qui sont génériques pour toutes les classes filles.
OK, mais petit à petit on arrive aux limites de l’héritage … Et dans plein de cas, continuer avec l’héritage va amener des dérives ou alors du code bien tordu.
C’est pourquoi nous allons chercher à utiliser les Interfaces.
Du plaisir de l’interface à ses limites
A quel bonheur d’utiliser les interfaces en C# ! Elles permettent :
- Un code découplé de son implémentation, respectant les principes SOLID
- Un code facilité pour utiliser l’injection de dépendance, et encore plus découpler son code
- A tout architecte d’imposer des contrats et donc des méthodes à être présentes dans des classes
Oui, mais, il y a un mais !
Imaginez des centaines de classes qui implémentent une Interface donnée.
Vous souhaitez ajouter une méthode à cette interface ….
Bonjour le temps de refactoring !
Et tiens, soyons fou, imaginez que vous souhaitez écrire du code dans cette méthode, sans devoir l’écrire dans les classes filles.
Ca donne envie, n’est-ce pas !
Du code dans nos méthodes de notre Interface
Prenons l’interface IVolant
La classe Wookie implémente cette interface :
Et maintenant on souhaite ajouter une méthode Atterrir, sans devoir écrire du code dans Wookie.
Ca nous donne cette amélioration :
Et elle est bien utilisable telle quelle quand j’instancie mon Wookie !
Amazing, n’est ce pas ?!
Redéfinir la méthode
Peut-on alors redéfinir cette méthode ? Ou bien la compléter, comme on ferait dans l’héritage ?
On peut par exemple “casser” le code prévu par défaut dans l’interface :
Il suffit d’implémenter la méthode dans la classe Wookie.
Retrouvez tout le code via notre Github