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() { ... } }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?
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 { . . . } }
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.
Partager