The essence of software design is abstraction.