The Liskov substitution principle