It’s not every day that reading a book teaches you a cool new word for yourself. Object Thinking by David West, managed to show me that I am a hermeneutic thinker.
David West is a professor at New Mexico Highlands University School of Business. He founded and directed the Object Lab at the University of St Thomas, and co-founded the Object Technology User Group.
This book covers a rich history of how object-oriented development came about, and is full of profiles of important players. It also explores the philosophical ground that “object thought” is based on, at least in the opinion of the author.
The crux of the book is the difference between what a lot of people call object-oriented development and what West terms “object thinking”. Object thinking, in short, is coming to really view a problem domain in terms of objects, and not just coming up with a procedural model wrapped in classes.
This book is extremely feature rich, and seems to be aimed at catalysing the thought process of a moderately experienced OO developer who is ready to take the next step forward. I know I got a lot out of the book, and I intend to read it again in a few months, once some of the concepts have settled in.
One big value item from the book is a set of heuristics for evolving an object oriented design. I’ll list the bullet-point version here, but you need to read the book for the explanation:
- Let objects assume responsibility for tasks that are wholly or completely delegated to other objects in cases in which the responsibility reflects natural communication patterns in the domain
- Delegate responsibilities to get a better distribution and increase reusability.
- Use anthropomorphising and foreshadowing to determine whether an object should assume a given responsibility.
- Responsibilities should be distributed among the community of objects in a balanced manner.
- Always state responsibilities in an active voice describing a service to be performed.
- Avoid responsibilities that are characteristic specific, that focus on providing a potential user with the value of a single characteristic of the object.
- Create proxies for objects outside your domain that are sources of information required by objects within the domain.
Probably the best part of this book, however, are the case studies and examples he uses to elaborate and explore the ideas he is conveying.
This is a highly recommended read for anyone interested in object oriented development.
 This is the essence of the Facade design pattern.