Dividing software so different responsibilities remain distinct.
Software entities should allow extension without unnecessary modification.
Subtypes should be usable wherever their base types are expected.
Software entities should allow extension without unnecessary modification.
Subtypes should be usable wherever their base types are expected.