This book addresses the topic of software design: how to decompose
complex software systems into modules (such as classes and methods)
that can be implemented relatively independently. The book first
introduces the fundamental problem in software design, which is
managing complexity. It then discusses philosophical issues about
how to approach the software design process, and it presents a
collection of design principles to apply during software... more...