Practical Object-Oriented Design
Designing a system with Object-Oriented programming (OOP) requires knowledge if you don’t want it to become a big ball of mud. This programming book teaches you to design classes with a single responsibility and compose them with well-defined interfaces that send messages to each other.