Le changement de visibilité d'une fonction virtuelle est-il un viol du LSP ?
Le problème c'est que deux principes quelque peu différents ont été présentés ici:
"If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T"
-- BarbaraLiskov, Data Abstraction and Hierarchy, SIGPLAN Notices, 23,5 (May, 1988)La première version caractérise une relation de sous typage alors que la seconde pose cette relation comme condition préalable."Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T"
-- Liskov and Jeannette Wing, 1994 paper
La seconde formulation est la plus pertinente puisqu'on s'interesse au changement de visibilité de fonction virtuelle (la relation de sous typage est acquise).
C'est pourquoi il me parait absurde de considérer une substitution de type non polymorphique. Pour reprendre les termes de gl, on est dans un cadre de l'usage polymorphique uniquement (on fixe le type statique à A et on fait varier le type dynamique de A à B).
Alors est-ce que le changement de visibilité d'une fonction virtuelle est une condition suffisante pour violer LSP?
Je dirai: Non.
Ca me parait évident.
Le code d'exemple proposé par Flob90 ( http://www.developpez.net/forums/d95...p/#post5372628 ) montre clairement que la condition n'est pas suffisante.
Cependant, on ne peut pas dire que jamais un changement de visibilité n'infirmera LSP.
On ne peut pas dire grand chose, si ce n'est répondre à la question
Partager