Wiki dice:
Substitutability is a principle in object-oriented programming stating that, in a computer program, if S is a subtype of T, then objects of type T may be replaced with objects of type S (i.e. an object of type T may be substituted with any object of a subtype S) without altering any of the desirable properties of T (correctness, task performed, etc.).
Comprensione da questo,
Se T
è un'astrazione che fornisce l'incapsulamento per proteggere gli invarianti dello stato mantenuti da istanze di T
, allora S
è un'astrazione che DEVE almeno fornisci l'incapsulamento per proteggere gli stessi invarianti di quegli stati ereditati gestiti da istanze di S
.
Qui l'astrazione non può non solo essere una classe ma anche una funzione. Ad esempio: funzione scritta in paradigma prototipo (ES5 JavaScript)
Una classe ( T
o S
) sa, i contratti a cui le loro istanze dovrebbero obbedire.
LSP è circa S
che garantisce l'incapsulamento per proteggere l'invariante di stato, che viene ereditato da T
. La mia comprensione è che correctness riguarda proteggere gli invarianti per mantenere la correttezza di stato.
È questa la giusta comprensione?