Principe de substitution de Liskov
Bonjour à tous ,
J'ai un soucis de compréhension sur ce sujet fort utile et intéressant qu'est le principe de substitution de Liskov.
Par exemple les classes suivantes :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
public class Compteur0 {
// @effects initialise this a 0
public Compteur0() { ... }
// @return la valeur de this
public int getValue () { . . . }
//@modifies this
// @effects this_post > this
public void incr() { ... } } |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
public class Compteur2 extends Compteur0 {
// @effects initialise this a 0
public Compteur2() { ... }
//@requires value > 0
// @modifies this
// @effects this_post = this + value
public void incr(int value) { ... }
// @modifies this
// @throws NegativeValueException si value < 0
// @effects this_post = this - value
public void decr ( int value ) throws NegativeValueException { . . . } } |
La classe Compeur2 est-elle un sous-type légitime ? je veux dire elle respecte le principe de substitution de Liskov de la classe Compteur0?
J'ai compris que ce principe se base sur la notion de super classe et sous-type en clair partout où j'attends un type de donnée Compteur0 et je passe Compteur2 tout doit se passer correctement si j'ai compris ?
Mais concrètement ça reste floue ...
Merci d'avance pour vos suggestions.