LSP indique que les classes doivent être substituables à leurs classes de base, ce qui signifie que les classes dérivées et de base doivent être sémantiquement équivalentes.
Mais LSP s'applique-t-il également aux classes implémentant une interface? En d'autres termes, si une méthode d'interface implémentée par une classe est sémantiquement différente de ce que l'utilisateur attend qu'elle soit, cela serait-il considéré comme une violation de LSP?
design-patterns
design-principles
liskov-substitution
user1483278
la source
la source
Réponses:
Si l'implémentation est sémantiquement différente du comportement documenté à travers les invariants de l'interface et les pré et post-conditions de ses méthodes, alors la réponse est "oui", ce serait une violation du LSP. Le principe établit les règles pour l'abstraction et ses implémentations, sans exiger que le côté abstraction soit présent sous la forme d'une classe.
Cependant, si nous parlons de ce que les utilisateurs attendent , la réponse serait "pas nécessairement": les utilisateurs ont le droit d'avoir des attentes erronées.
la source
Name
qui ne peut pas être définie surnull
, alors elleobj.Name != null
est considérée comme un invariant de cette interface.