Problem Statement
When classes have unclear or mixed responsibilities, the code becomes hard to understand, maintain, and extend. This often leads to bugs and duplicated logic because behaviors are scattered or overloaded in the wrong places.
This diagram shows three classes each with focused responsibilities and behaviors: User handles login/logout, Order manages items and totals, Payment processes payments.
### Before: Mixed responsibilities in one class class User: def __init__(self, name, email): self.name = name self.email = email self.orders = [] def login(self): print(f"{self.name} logged in") def add_order(self, order): self.orders.append(order) def calculate_total_spent(self): total = 0 for order in self.orders: total += sum(item['price'] for item in order['items']) return total ### After: Clear responsibilities split into classes class User: def __init__(self, name, email): self.name = name self.email = email def login(self): print(f"{self.name} logged in") class Order: def __init__(self, order_id): self.order_id = order_id self.items = [] def add_item(self, item): self.items.append(item) def calculate_total(self): return sum(item['price'] for item in self.items) class UserOrders: def __init__(self): self.orders = [] def add_order(self, order): self.orders.append(order) def calculate_total_spent(self): return sum(order.calculate_total() for order in self.orders)