Programming Languages
The COMPLETE Liskov Substitution Principle
LSP (short for Liskov Substitution Principle, not for Language Server Protocol) is probably one of the least understood concept of the SOLID principles. So in this post, I want to actually address the complete principle, not just what people know.
Because of the “typed” nature of the LSP, I’ll try to use a language that people are familiar with, and that I can show in a playground somewhere: Typescript. Truth to be told, I am not a Typescript developer (nor do I actually like the language) so my code might be a little weird. Anyway, moving on:
What people know
The actual text is
Let Φ(x) be a property provable about objects x of type T. Then Φ(y) should be true for objects y of type S where S is a subtype of T.
This is actually hard to read, so people simplify, usually, with:
Objects of a superclass shall be replaceable with objects of its subclasses without changing behavior
Which is correct, but incomplete.
(more…)