Problem Statement
When a class or module handles multiple responsibilities, changes in one area can cause unexpected bugs in others. This makes the code hard to understand, test, and maintain, slowing down development and increasing errors.
The diagram shows a single class doing multiple jobs versus splitting those jobs into separate classes each with one responsibility.
### Before applying Single Responsibility Principle class UserManager: def __init__(self, user_data): self.user_data = user_data def save_user(self): # code to save user data pass def send_welcome_email(self): # code to send email pass ### After applying Single Responsibility Principle class UserDataManager: def __init__(self, user_data): self.user_data = user_data def save_user(self): # code to save user data pass class EmailSender: def send_welcome_email(self, user_email): # code to send email pass