Describir: Principles of object-oriented analysis and design