Libellation, le principe de substitution de Liskov indique qu'une classe dérivée peut être remplacée à la place de la classe de base sans affecter l'utilisateur. Dans le cas où la classe de base est une classe abstraite, ce qui signifie qu'aucun utilisateur utilise une instance de la classe de base, les restrictions de héritage Liskov s'appliquent-elles toujours à la classe dérivée? p>
5 Réponses :
Oui, car un appelant peut toujours faire cela:
BaseAbstractClass instance = new DerivedClass();
Juste parce que vous ne pouvez pas instantifier une classe particulière ne signifie pas que vous ne pouvez pas l'utiliser. Dans ce scénario, le code d'appel utilise la classe de base abstraite comme définition du contrat dans lequel elle fonctionne. En ce sens, chaque classe qui dérive de la classe de base devrait être interchangeable par rapport à l'interface définie par la classe de base, alors oui Liskov s'applique toujours. En fait, c'est une raison principale pour laquelle vous voudriez avoir une classe de base abstraite pour une collection de classes ayant un comportement commun - vous pouvez donc définir des opérations en termes d'interface de la classe de base et de ne pas vous soucier de la classe dérivée qui Vous fonctionnez réellement sur. P>
Les classes abstraites ne sont pas en conflit avec le LSP du tout. Beaucoup de gens envisagent d'utiliser «Nouveau» directement auprès du code client pour être une violation de l'esprit de LSP. Si vous instaniez et utilisez un objet, vous êtes étroitement lié à cette implémentation et vous ne pouvez pas le substituer ». p>
Envisagez d'avoir l'objet créé via une usine ou transmis sous forme d'argument ou d'injection de dépendance après avoir été créé par une sorte de référentiel qui peut être concentré sur la prise de décisions sur les types de béton nécessaires dans diverses circonstances. P>
En bref, oui. Le LSP s'applique essentiellement tout em> héritage public. Le fait qu'une classe de base soit abstrait ne change pas cela. La classe de base définit une interface et tous les dérivés légitimes doivent satisfaire à toutes les exigences de cette interface. P>
oui. p>
Voir la section "Un vrai exemple" (page 7-8) de oncle Bob's Article de principe de substitution de Liskov . P>