Object Oriented Design and Principles