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')