Out of the many books that are available for self-study in all of the areas above, some have proved to be invaluable, while others have been much less helpful. The following annotated list consists of the real gems:
This book is the most basic resource for this area. While very complete, it has shortcomings; for example, it's discussion of call by reference is very unclear and its treatment of dynamic binding in its chapters on OOD is also murky. Nevertheless, it is a good basic introduction. It's biggest problem for us is that all of its examples are so simple (yes, even the zoo class is just too simple to give us much insight).
We have found this book to be of great value. It intermingles excellent C+ + coverage with ongoing OOD material. This book was very helpful. It is full of practical advice on software engineering aspects of OOD design.
This book has a wonderful discussion of call by reference and equally good material on dynamic binding.
This book has already been mentioned in the text as the source of technical information on how an object-oriented compiler is built. This is an essential resource.
This is a classic reference to one method of handling large scale OOD. As the number of objects in your design grows there is a combinatorial explosion in the number of interaction pathways. The Booch method gives a popular software engineering tool. This is best to read on a surface level, for impressions and ideas.
If you decide to use the Booch method, this book is full of practical advice. It has many code examples, but it has a very heavy reliance on templates. This is a C+ + language feature we have been avoiding (for reasons not entirely clear to us!), so the translation of Martin's code fragments into useful insight is sometimes difficult, but nonetheless, there is much meat here.
The design of classes and objects is very much an art form. To some extent, like all crafts, you learn by doing. As you get more skilled, you realize how little of the real knowledge of how to write good classes is written down! This book is full of hard won real-world wisdom that comes out of actually being in the programming trenchs. It is best to surface read and sample.
We have similar comments for this book. Since our proposed neural objects OOD project will be a rather massive undertaking, useful insight into the large scale OOD is most welcome!
As you program, you realize that many classes are essential building blocks of many disparate applications. This wonderful book brings together a large number of already worked out OOD solutions to common problems. It is extremely important to look at this book carefully. All of the different classes are presented in code sketches ( not easy to follow, but well worth the effort!).