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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.