Skip to content

Latest commit

 

History

History
82 lines (62 loc) · 5.82 KB

File metadata and controls

82 lines (62 loc) · 5.82 KB

Object Thinking by David West

Introduction

Object Thinking explores the object-oriented paradigm (OO) beyond its technical aspects and highlights how object thinking should guide software design, problem-solving, and application modeling. David West emphasizes that adopting an object-oriented mindset is more than just using object-oriented programming languages. It involves a deeper understanding of objects as the central abstraction in modeling real-world problems.


Part 1: The Essence of Object Thinking

1. What Is Object Thinking?

  • Object thinking is a mindset, a way of approaching problems by focusing on objects, their relationships, and their behaviors.
  • It involves designing systems where objects encapsulate both data and the methods that operate on them.
  • An object-oriented approach is more than just classes or inheritance; it’s about understanding how real-world concepts can be represented as objects in code.

2. Objects as Abstractions

  • Objects in object thinking are abstractions that represent real-world entities.
  • An object’s state is defined by its attributes, and it operates through methods that reflect its behavior in the real world.
  • The focus is on what an object does rather than its internal implementation details.

Part 2: Modeling with Objects

3. Identifying Objects

  • In object thinking, objects emerge from examining the problem domain and identifying real-world entities.
  • The goal is to map these real-world concepts into objects with a clear purpose and responsibility.
  • Objects should be modeled based on their behavior, which is the core aspect of the object.

4. Designing Interactions between Objects

  • Objects interact with each other through messages (i.e., method calls), and this interaction should reflect real-world relationships.
  • The interactions between objects should be loosely coupled and should avoid unnecessary dependencies.
  • Well-designed objects collaborate to achieve the overall system’s behavior, without tightly binding each other together.

5. Object-Oriented Design Principles

  • Embrace key principles like encapsulation, polymorphism, and abstraction.
  • Encapsulation allows an object to hide its internal state and expose only the necessary functionality.
  • Polymorphism enables objects to interact in a more flexible way, allowing the same interface to be used with different object types.
  • Abstraction helps in focusing on the essence of behavior while ignoring irrelevant details.

Part 3: Thinking in Terms of Behavior

6. Focusing on Behavior, Not Just Structure

  • In traditional programming, much of the design focuses on data structures and the storage of information.
  • Object thinking shifts the focus from data storage to behavior and how objects collaborate.
  • Objects should be modeled not just by the data they hold but by the actions they perform in response to messages.

7. Designing with Intent

  • Every object should have a clear intention or purpose in the system.
  • Objects should be designed with well-defined responsibilities and should not try to do too much.
  • By defining the intent of each object, developers can create more cohesive and maintainable systems.

Part 4: The Philosophy of Object Thinking

8. Object Thinking vs. Procedural Thinking

  • Object thinking contrasts with procedural thinking, where systems are structured as sequences of actions or procedures.
  • Object thinking focuses on defining objects that encapsulate both state and behavior rather than focusing on separate data and functions.
  • This paradigm encourages decentralized control and localizes behavior within objects, promoting a more modular and flexible system.

9. Understanding the Object Lifecycle

  • Objects have a lifecycle, meaning they are created, modified, and destroyed during the course of the system's execution.
  • This lifecycle should reflect how objects evolve in response to messages and changes in state, much like how real-world entities evolve over time.

10. Managing Complexity with Object Thinking

  • Object thinking helps manage complexity by dividing a complex system into smaller, manageable objects that interact with each other.
  • By focusing on small, self-contained objects with clear responsibilities, systems become more scalable, flexible, and maintainable.

Part 5: Object-Oriented Design in Practice

11. Mapping Business Domains to Objects

  • Object thinking encourages mapping business concepts directly to objects, ensuring that software solutions reflect real-world processes.
  • A deep understanding of the business domain allows for accurate modeling and ensures that objects’ behaviors align with domain rules and requirements.

12. The Role of Design Patterns

  • Design patterns serve as solutions to recurring problems in object-oriented design.
  • They are not the end goal, but tools that help implement object thinking effectively.
  • Patterns such as Factory, Strategy, and Observer help define common behaviors and interactions in object-oriented systems.

Conclusion

Object Thinking is a philosophy and mindset that encourages designers to think in terms of objects and behavior, not just classes and data. By focusing on real-world entities and their interactions, software can be designed in a more natural, modular, and maintainable way. Object thinking promotes encapsulation, polymorphism, and abstraction to create flexible, scalable, and cohesive systems that truly reflect the problem domain.