ugrás a tartalomhoz

Archívum - Okt 6, 2017

Dátum

LSP és öröklődés

inf3rno · Okt. 6. (P), 09.48
Olvasgatok a contract-ekről, és felvetődött bennem, hogy valami nem teljesen világos az LSP-vel kapcsolatban.

In, Out and Inheritance

If a function in a derived class overrides a function in its super class, then only one of the in contracts of the function and its base functions must be satisfied. Overriding functions then becomes a process of loosening the in contracts.

A function without an in contract means that any values of the function parameters are allowed. This implies that if any function in an inheritance hierarchy has no in contract, then in contracts on functions overriding it have no useful effect.

Conversely, all of the out contracts need to be satisfied, so overriding functions becomes a processes of tightening the out contracts.



https://dlang.org/spec/contracts.html

Liskov substitution principle[6]
“objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.”


https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

Na most elvileg mindkettő azt mondja, hogy alosztály példánnyal helyettesíthető kell, hogy legyen az aktuális példány. Ahhoz viszont, hogy az alosztály példány is átmenjen minden teszten, amit az eredeti osztállyal szemben támasztottunk (feltéve, ha elég alaposan teszteljük), az kell, hogy meglévő metódust ne írjunk felül, hanem csak új metódusokat adjunk hozzá.