Key Principles of Great Design Unveiled by the Masters
Clear, concise, simple, applicable, real-world strategies for great Java design, applicable to any OO language.
ORIGINAL DRAFT
Any serious Java developer should consider this book as great investment. Few books tend to address the Java platform and also manage to transcend the language issues, bringing so much value to the table in a mere 300 pages. Peter Coad is well known for the namesake design methodology and notation he introduced to software developers many years back. This book is the second edition and leaves the Coad notation behind in favor of UML. The concepts and patterns presented in these pages, however, are as solid as ever and enhanced in subtle but important ways by the authors’ experiences with Java design over the last two years.
Java Design tries to teach by example. Chapter 1 identifies five major activities - identifying purpose and features, selecting classes, sketching a user interface, working out dynamics with scenarios and building class diagrams - and applies these to two non-trivial examples to teach fundamental principles. The authors encourage design by composition, avoiding inheritance in most cases, as well as designing with interfaces, threads and notification. Each of these principles are explored in detail in the next 4 chapters. Using inheritance for everything you can think of is an easy trap to fall into for object-oriented newcomers. Chapter 2’s focus on designing with composition helps clarify the more pragmatic approach often learned through costly experience.
The principles and patterns explored in this book are supplemented by excellent diagrams based on UML notation. Chapter 4, "Designing with Threads" is particularly accessible because of this. Understanding thread issues can help developers better apply the advantages that Java makes so easy to exploit and avoid the pitfalls that multi-threaded applications might expose. The importance of interfaces is well explored in Chapter 3 and Chapter 5 "Designing with Notification" complements Chapter 4 in strategic ways not always obvious at first blush. Three appendices provide a Java visibility diagram and a UML notation summary. Of particular interest, however, is Appendix A which lists the high-level design strategies applied throughout the book in a single, concise location.
The material covered in this book is invaluable to developers who are serious about their craft. Whether you are an experienced developer, new to object-oriented or Java programming or unfamiliar with these methodologies, everyone can gain from this information. Its hard to avoid gushing about this book, given what it can contribute to a real-world development project when the ideas are applied. A great source of information, fundamental principles, good design strategies and well presented with clear, concise examples that expose the issues in realistic scenarios that are easy to grasp. Simply put, buy this book and read it from cover to cover. It’ll make you a better designer, no matter where you’re starting from.