Primordial pauses Principe de Substitution de Liskov si vous modifiez l'un comportement défini par une méthode de base. Ce qui signifie que:
- La plus faible pré-condition pour une
enfant de la méthode ne devrait pas être plus fort
que pour la méthode de base.
- Une postcondition de l'enfant de la méthode
implique une postcondition pour l'
méthode parent. Lorsqu'une postcondition
est constitué par: a) de tous les côtés
les effets provoqués par l'exécution de la méthode et b)
le type et la valeur de retour de l'expression.
À partir de ces deux exigences, vous pouvez laisser supposer que de nouvelles fonctionnalités à un enfant de méthode qui n'a pas d'incidence sur ce qui est attendu d'une super méthode ne viole pas le principe. Ces conditions vous permettent d'utiliser une sous-classe de l'instance où une super-classe de l'instance est nécessaire.
Si ces règles ne sont pas obéi à une classe de viole de LSP. Un exemple classique est la hiérarchie suivante: classe Point(x,y)
, classe ColoredPoint(x,y,color)
qui s'étend au - Point(x,y)
et méthode substituée equals(obj)
en ColoredPoint
qui reflète l'égalité par la couleur. Maintenant, si on une instance de Set<Point>
il peut supposer que les deux points avec les mêmes coordonnées sont égales dans cet ensemble. Ce qui n'est pas le cas avec la méthode de remplacement equals
et, en général, il n'y a tout simplement aucun moyen d'étendre une classe instanciable et ajouter un aspect utilisés en equals
méthode sans rupture de LSP.
Ainsi, chaque fois que vous briser ce principe vous implicitement introduire un bug potentiel qui révèle lors de l'invariant pour un parent de la classe qui est prévu par le code n'est pas satisfait. Cependant, dans le monde réel, souvent, il n'est pas évident de trouver la solution de conception qui ne viole pas LSP, de sorte que l'on peut utiliser, par exemple, @ViolatesLSP
de la classe d'annotation pour avertir d'un client qu'il n'est pas sûr d'utiliser des instances de classe dans un ensemble polymorphe ou dans tout autre type de cas, qui s'appuient sur le principe de substitution de Liskov.