Object-Oriented Thinking: What Are Objects?

Object-oriented design has always fascinated me because it feels so natural and intuitive. Everything I encounter—whether physical or abstract—can be seen as an object with its own properties and behavior. That’s the real strength of this approach. It helps me divide complex systems into smaller, understandable units. In this article, I’ll guide you step by step through the idea of objects in object-oriented design and show how they shape clear, maintainable, and scalable solutions.

What Is an Object?

In object-oriented thinking, I treat an object as an identifiable element within the domain I want to understand or design.

For example, I might identify:

  • a customer
  • an order
  • a product
  • a warehouse
  • a contract
  • a delivery
  • an appointment

Each object represents something relevant to my problem.

An object does not need to exist physically. It only needs to represent something meaningful within the model.

Therefore, a customer and a warehouse can both be objects. However, so can an employment contract, an invoice, or a reservation.

Objects Have Identity, Properties, and Behavior

When I model an object, I usually consider three fundamental aspects.

First, the object has an identity. I can distinguish it from other objects. For example, two orders may contain identical products but still represent two different orders.

Second, the object has properties. These describe its current characteristics or state. An order might have an order number, a date, a status, and a total value.

Third, the object can participate in behavior. For example, I might create, confirm, cancel, or ship an order.

Identity tells me which object I mean, properties describe it, and behavior defines what can happen to it.

This distinction gives object-oriented models much of their structure.

Objects Can Represent Physical and Abstract Concepts

Physical objects often provide the easiest introduction to object-oriented thinking. A car has an engine, wheels, and a registration number. A building contains rooms. A book contains pages.

However, software systems rarely deal only with physical things.

Therefore, I also model abstract concepts such as:

  • memberships
  • insurance policies
  • payments
  • bookings
  • contracts
  • projects
  • approvals
  • claims

For example, I cannot physically touch a booking. Nevertheless, a booking has an identity, properties, relationships, and a lifecycle. Consequently, it can become an object in my model.

This broader interpretation makes object-oriented thinking useful for business analysis and requirements engineering.

Context Determines What Becomes an Object

I do not model every identifiable thing around me. Instead, I define a specific problem context.

Diagram showing several abstract objects inside a circular boundary labeled Context.
Objects gain meaning within a defined modeling context. I include only the objects that are relevant to the problem I want to analyze.

Suppose I analyze a warehouse management system. In that context, I may need objects such as:

  • Warehouse
  • Storage Location
  • Product
  • Inventory Item
  • Supplier
  • Delivery
  • Order

However, the weather outside the warehouse probably does not matter. Therefore, I leave it outside the model.

The same principle applies at a smaller scale. A warehouse building contains doors, walls, lights, cables, and thousands of other elements. Yet I only model them if they matter to the system.

Something becomes relevant as an object because of the problem I want to solve, not simply because it exists.

This principle prevents unnecessary complexity.

Objects and Abstraction

Real-world systems contain far more information than I can represent usefully in one model. Therefore, I use abstraction.

Abstraction means that I deliberately focus on relevant characteristics and ignore unnecessary details.

Consider a customer object. Depending on the system, I might model:

  • customer number
  • name
  • address
  • payment status

I probably do not need the customer’s height, favorite color, or shoe size.

However, another system could require completely different information. A medical system, for example, may need properties that would have no relevance in an online store.

Therefore, abstraction always depends on purpose.

A good object model does not reproduce reality completely. It represents the parts of reality that matter for a specific purpose.

Objects Exist Through Relationships

Objects rarely exist independently.

A customer places an order. An order contains products. A supplier delivers products. A warehouse stores inventory.

Therefore, relationships form an essential part of object-oriented modeling.

For example:

Customer → places → Order
Order → contains → Product
Supplier → provides → Product
Warehouse → stores → Inventory Item

These relationships help me understand the structure of a domain. Moreover, they often reveal requirements that would remain hidden if I examined each object separately.

For instance, the relationship between an order and a customer immediately raises useful questions:

  • Can an order exist without a customer?
  • Can one customer have several orders?
  • Can an order change its customer?
  • What happens to existing orders if I delete a customer?

Thus, object-oriented thinking supports requirements elicitation as well as modeling.

Objects and Classes Are Not the Same

I also distinguish between an object and a class.

An object represents one specific instance. A class describes the common structure of similar objects.

For example:

Class: Customer
Object: Customer 4711

Or:

Class: Vehicle
Object: Vehicle with registration F-AB 1234

Therefore, I use classes when I want to describe common characteristics and rules. I use objects when I refer to specific instances.

A class defines a type of thing, while an object represents one concrete instance of that type.

This distinction becomes especially important when I move from domain analysis toward UML class modeling or software design.

Objects in Requirements Modeling

Object-oriented thinking also helps me during requirements engineering.

Instead of beginning immediately with technical functions, I first ask:

  • What concepts exist in this domain?
  • Which concepts matter to the system?
  • What information must the system know about them?
  • What can happen to them?
  • How do they relate to each other?
  • Which rules restrict their behavior?

For a warehouse system, I may discover Product, Order, Shipment, Supplier, and Storage Location as important domain objects.

I can then examine their properties, relationships, states, and behavior.

For example, a Shipment might move through the states:

Created → Prepared → Dispatched → Delivered

This immediately leads to requirements about permitted transitions, responsibilities, validation rules, and exceptions.

Therefore, objects give me a stable structure around which I can organize requirements.

Avoid Modeling Too Much

Object-oriented modeling can become unnecessarily complicated if I identify every possible object and property.

I avoid this by asking a simple question:

Does this information help me understand or design the system?

If the answer is no, I usually leave it out.

More detail does not automatically create a better model. Instead, unnecessary detail can hide the important structure.

I consider a model successful when it contains enough information to support understanding and decisions without reproducing irrelevant complexity.

Final Thoughts

When I ask what are objects, I do not limit the answer to physical things or programming constructs. I use objects to represent identifiable concepts that matter within a specific domain.

They can represent people, products, contracts, orders, events, or other meaningful entities. I describe them through identity, properties, behavior, and relationships. At the same time, I use abstraction to keep only the information that serves the purpose of my model.

Object-oriented thinking helps me turn a complex domain into a structured network of meaningful elements and relationships.

That makes objects useful far beyond programming. They provide a practical foundation for requirements analysis, domain modeling, UML, and ultimately software design.

What’s Next?!

Now that you understand how requirements modeling connects business needs with object-oriented design, it is time to explore the tools and skills that make this work effective. Continue with Modeling Languages for Requirements Modeling to learn how notations and diagrams help express requirements clearly and consistently.

Then, deepen the communication side with Mastering Argumentation: A Requirements Engineer’s Guide to see how strong reasoning helps you explain decisions, defend ideas, and align stakeholders. Together, both topics help you turn requirements into clear models and support better collaboration from concept to implementation.

Turn Ideas into Successful Software

Begin with Requirements Engineering and see how early ideas become clear, realistic, and valuable software goals. It shows how strong requirements create focus, connect stakeholders, and guide better decisions from the start. As a result, you can understand how requirements engineering turns uncertainty into direction and helps teams build software that truly matters.

If I want to take the next step after that, I move into Requirements Modeling. There, I explore Modeling Concepts, Process Modeling with BPMN, and UML to understand how models make requirements easier to visualize, discuss, and refine. Together, these topics help me connect business needs, processes, and system structures in a clearer and more practical way.


Credits: Photo with wood by Markus Winkler from Pexels

Scroll to Top
WordPress Cookie Plugin by Real Cookie Banner