Class should have only one job (have only one reason for change)
An object (such as a class) may be replaced by a sub-object (such as a class that extends the first class) without breaking the program
S
is a subtype of T
, then objects of type T
in a program may be replaced with objects of type S
without altering any of the desirable properties of that program