Problem Statement
When software grows, code becomes tangled and hard to change. Small changes cause bugs in unrelated parts, and adding new features takes too long because the design is rigid and unclear.
This diagram shows the five SOLID principles as steps leading to maintainable design, illustrating how each principle builds on the previous to improve code structure.
### Before applying SOLID principles (violating SRP and OCP): class Report: def __init__(self, data): self.data = data def calculate(self): # calculate report data return sum(self.data) def print_report(self): print(f"Report total: {self.calculate()}") def save_to_file(self, filename): with open(filename, 'w') as f: f.write(str(self.calculate())) ### After applying SOLID principles (SRP and OCP applied): from abc import ABC, abstractmethod class Calculator(ABC): @abstractmethod def calculate(self): pass class SumCalculator(Calculator): def __init__(self, data): self.data = data def calculate(self): return sum(self.data) class ReportPrinter: def print(self, calculator: Calculator): print(f"Report total: {calculator.calculate()}") class ReportSaver: def save(self, calculator: Calculator, filename): with open(filename, 'w') as f: f.write(str(calculator.calculate())) # Usage calculator = SumCalculator([1, 2, 3]) printer = ReportPrinter() saver = ReportSaver() printer.print(calculator) saver.save(calculator, 'report.txt')
class Shape:
def area(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius * self.radius
class Square(Shape):
def __init__(self, side):
self.side = side
def area(self):
return self.side * self.side
shapes = [Circle(2), Square(3)]
areas = [shape.area() for shape in shapes]
print(areas) What will be the output?class Database:
def connect(self):
print('Connecting to MySQL')
class UserService:
def __init__(self):
self.db = Database()
def get_user(self):
self.db.connect()
return 'User data'Pass the test and this pattern moves unknown