Learn Object Thinking from David West: The Book that Revolutionized Object-Oriented Programming
Object Thinking: A Book Review
If you are a programmer who wants to improve your skills and understanding of object-oriented programming, you may want to read Object Thinking by David West. This book is not a typical technical book that teaches you how to use a specific language or tool. Rather, it is a book that challenges you to think differently about software development. It is a book that explores the history, philosophy, and culture of object thinking.
object thinking david west ebook 11
But what is object thinking? According to West, object thinking is a mindset that guides programmers to think in terms of objects rather than procedures or data structures. Objects are entities that have identity, state, and behavior. They communicate with each other by sending messages. They are autonomous and responsible for their own actions. They are composable and adaptable to changing requirements. They are the building blocks of software systems.
West is an esteemed object technologist who has been involved in object-oriented programming since its early days. He has worked with pioneers such as Alan Kay, Grady Booch, Kent Beck, Ward Cunningham, and others. He has taught courses on object-oriented analysis and design at various universities and companies. He has also written several books and articles on the topic.
The main argument and purpose of this book is to show that the mindset makes the programmernot the tools and techniques. West contends that many programmers fail to grasp the essence of object-oriented programming because they focus too much on the syntax or semantics of a language or the steps or diagrams of a method. They miss the bigger picture of what objects are and how they should behave. They do not think like objects.
This book aims to help programmers develop an in-depth understanding of object thinking by delving into its historical and philosophical roots, its values and principles, its metaphors and vocabulary, its methods and models, its techniques and practices. It also illustrates specific object-behavior practices that programmers can adopt for true object design and superior results.
In this article, I will provide a summary of each chapter of the book, followed by an evaluation of its strengths and weaknesses. I will then conclude with my personal opinion and rating of the book.
Summary of the book
Chapter 1: Object Thinking
This chapter introduces the concept of object thinking and contrasts it with traditional software engineering approaches. West argues that traditional software engineering is based on a mechanistic worldview that views software as a machine composed of parts that perform functions on data. This worldview leads to software development practices that emphasize formal processes, methods, models, data structures, algorithms, etc.
Object thinking, on the other hand, is based on an organic worldview that views software as a society composed of objects that have identity, state, and behavior. This worldview leads to software development practices that emphasize discovery, exploration, conceptualization, metaphor, vocabulary, communication, Chapter 2: Philosophical Context
This chapter traces the historical and philosophical origins of object thinking and how they influenced the development of object-oriented programming languages and methods. West discusses the contributions of philosophers such as Plato, Aristotle, Kant, Hegel, Wittgenstein, Heidegger, and others to the understanding of objects and their relations.
West also examines the contrast between two philosophical schools that have shaped software development: formalism and hermeneutics. Formalism is the view that reality can be represented by formal systems of logic, mathematics, and symbols. Hermeneutics is the view that reality can only be interpreted by human understanding and context. West argues that object thinking is more aligned with hermeneutics than formalism.
Finally, West critiques postmodernism and its implications for software development. Postmodernism is the view that reality is subjective, relative, and constructed by language and power. West contends that postmodernism undermines the validity and value of object thinking by denying the existence and meaning of objects.
Chapter 3: From Philosophy to Culture
This chapter explains the four presuppositions of object thinking and how they lead to object principles that guide software development. The four presuppositions are:
Everything is an object.
Simulation of a problem domain drives object discovery and definition.
Objects must be composable.
Distributed cooperation and communication must replace hierarchical centralized control as an organizational paradigm.
From these presuppositions, West derives several object principles that reflect the values and goals of object thinking. Some of these principles are:
Objects are responsible for themselves.
Objects have state-dependent behavior.
Objects communicate by sending messages.
Objects are specified by their interfaces.
Objects conform to protocols.
Objects are created by other objects.
West also discusses the cultural shift required for adopting object thinking in software development. He argues that traditional software engineering culture is based on a hierarchical, centralized, bureaucratic, and mechanistic model that hinders creativity and collaboration. He proposes a new software culture based on a distributed, cooperative, democratic, and organic model that fosters innovation and communication.
Chapter 4: Metaphor: Bridge to the Unfamiliar
This chapter explores the role of metaphors in object thinking and how they help programmers to bridge the gap between the problem domain and the software domain. West defines a metaphor as a way of understanding one thing in terms of another. He argues that metaphors are essential for object thinking because they enable programmers to conceptualize objects and their behaviors in familiar terms.
West provides several examples of metaphors that have been used for object thinking, such as Lego bricks, objects as persons, software as theater, and ants as objects. He explains how these metaphors capture some aspects of object thinking, such as identity, state, behavior, communication, composition, etc. He also acknowledges the limitations and pitfalls of these metaphors, such as oversimplification, ambiguity, inconsistency, etc.
West also offers some guidelines for choosing and using metaphors effectively for object thinking. Some of these guidelines are:
Select metaphors that are appropriate for the problem domain and the intended audience.
Use multiple metaphors to capture different perspectives and dimensions of objects.
Avoid mixing metaphors that may cause confusion or contradiction.
Evaluate metaphors for their accuracy, completeness, clarity, and usefulness.
Refine or replace metaphors as needed to reflect new insights or changes in requirements.
Chapter 5: Vocabulary: Words to Think With
This chapter introduces the essential terms and concepts of object thinking and how they help programmers to communicate and understand objects and their behaviors. West argues that vocabulary is important for object thinking because it provides a common language for describing and reasoning about objects. He also warns that vocabulary can be misleading or misused if not defined or applied correctly.
West defines and explains some of the key terms and concepts of object thinking, such as:
Object: An entity that has identity, state, and behavior.
Responsibility: A contract or obligation that an object has to perform a certain action or provide a certain service.
Message: A request or command that an object sends to another object to invoke its behavior.
Class: A description or template that defines the common state and behavior of a group of objects.
Inheritance: A mechanism that allows a class to inherit the state and behavior of another class.
Polymorphism: A mechanism that allows an object to behave differently depending on the context or the message it receives.
Encapsulation: A mechanism that hides the internal structure and implementation of an object from other objects.
Abstraction: A mechanism that simplifies or generalizes the state and behavior of an object by ignoring irrelevant details.
Composition: A mechanism that combines objects to form larger or more complex objects.
West also provides some examples and exercises to illustrate and practice these terms and concepts in various scenarios and languages.
Chapter 6: Method: Process and Models
This chapter critiques the traditional software engineering methods and models that are based on a formalistic and mechanistic worldview. West argues that these methods and models are incompatible with object thinking because they impose rigid and predefined processes, structures, and notations that constrain the creativity and flexibility of programmers. He also points out the limitations and failures of these methods and models in dealing with complex and dynamic domains.
West proposes an alternative approach to software development that is based on object thinking. This approach is characterized by discovery, exploration, conceptualization, metaphor, vocabulary, communication, etc. It does not prescribe a fixed or universal process or model, but rather adapts to the specific needs and context of each project. It does not rely on formal or graphical notations, but rather uses informal and textual tools that facilitate understanding and dialogue.
West introduces some of the tools that support object thinking, such as:
CRC cards: A technique that uses index cards to represent classes, their responsibilities, and their collaborators.
Interaction diagrams: A technique that uses simple diagrams to show the messages exchanged among objects in a scenario.
State diagrams: A technique that uses simple diagrams to show the states and transitions of an object in response to events.