Interface Oriented Design by Kenneth Pugh
Interface Oriented Design focuses on an important, but often neglected, aspect of object-oriented design. You'll learn by pragmatic example how to create effective designs composed of interfaces to objects, components and services. You'll see techniques for breaking down solutions into interfaces and then determining appropriate implementation of those interfaces to create a well structured, robust, working program. Interface Oriented Design explores how to develop robust, reliable software as a collection of interfaces that interact with each other. You'll learn what polymorphism and encapsulation really mean, and how to use these ideas more effectively. See how to create better interfaces using agile development techniques, and learn the subtle differences between implementing an interface and inheriting an implementation. Take a fresh, modern view of Design By Contract and class responsibilities. Understand the basis of a service-oriented architecture, including stateful versus stateless interfaces, procedural versus document models, and synchronous versus asynchronous invocations. Learn about the most useful patterns, including Proxy, Facade, Adapter, and Factory, as well categories of interfaces including service providers, information holders, and external world interfaces. If you want to be a more effective programmer and create better software, you need Interface Oriented Design.