DEV Community

Saras Growth Space
Saras Growth Space

Posted on

LLD Object-Oriented Design: Classes & Objects (Deep Understanding)

After shifting your thinking toward objects and responsibilities, the next step is to understand the most basic building block of object-oriented design:

Classes and objects are not just syntax — they are a way to model real-world systems.

Many people learn them early in programming, but never truly understand their design meaning in LLD.


What is a Class Really?

A class is not just a template for code.

A class is a blueprint for behavior and state of a real-world entity.

It defines:

  • what data an entity holds (state)
  • what it can do (behavior)

Example

class BankAccount:
    def __init__(self, balance):
        self.balance = balance

    def deposit(self, amount):
        self.balance += amount
Enter fullscreen mode Exit fullscreen mode

Here:

  • balance → state
  • deposit() → behavior

What is an Object?

An object is a real instance created from a class.

It represents a specific entity in the system with actual data.


Example

account1 = BankAccount(5000)
account2 = BankAccount(12000)
Enter fullscreen mode Exit fullscreen mode

Now:

  • account1 → has its own state (5000)
  • account2 → has its own state (12000)

Same class, different reality.


Key Insight: Class vs Object

Concept Meaning
Class Blueprint / definition
Object Real instance / live entity

A class defines structure.
An object carries actual data.


Why This Matters in LLD

In low-level design, systems are built using objects that represent real entities.

Example:

Food Delivery System

  • User → object
  • Order → object
  • Restaurant → object
  • DeliveryPartner → object

Each object:

  • holds state
  • performs behavior
  • interacts with other objects

State vs Behavior (Critical Distinction)

State

Represents data held by an object.

Examples:

  • balance in bank account
  • order status
  • user details

Behavior

Represents actions an object can perform.

Examples:

  • deposit money
  • place order
  • assign delivery

Rule of Thumb

State tells “what it is”, behavior tells “what it does”.


Common Mistake: Passive Data Classes

Beginners often design classes like this:

class Order:
    def __init__(self, id, status):
        self.id = id
        self.status = status
Enter fullscreen mode Exit fullscreen mode

And then put all logic outside.

This leads to:

  • anemic models
  • scattered business logic
  • hard-to-maintain systems

Better Approach: Active Objects

class Order:
    def mark_paid(self):
        if self.status != "CREATED":
            raise Exception("Invalid state")
        self.status = "PAID"
Enter fullscreen mode Exit fullscreen mode

Now:

  • object controls its state
  • rules are enforced locally
  • invalid transitions are prevented

Core Design Principle

Objects should manage their own state and behavior.

Not:

  • external services manipulating internal state freely

Why Objects Make Systems Scalable

When systems grow:

  • functions become unmanageable
  • shared state becomes dangerous
  • logic becomes scattered

Objects solve this by:

  • encapsulating state
  • bundling behavior
  • reducing global complexity

Real-World Mapping

Think of objects as real entities:

System Object
Bank System Account
E-commerce Order
Delivery Rider
Booking Ticket

Each object has:

  • identity
  • state
  • behavior

Design Intuition

When designing a system, always ask:

“What does this entity know, and what can it do?”

If the answer is unclear, the design is incomplete.


One-Line Takeaway

Classes define structure, objects represent real instances, and together they model real-world systems through state and behavior.

Top comments (2)

Collapse
 
sapana1418 profile image
Sapana

Very nicely written, but too basic