S — Single Responsibility Principle (Robert Martin): sinfin dəyişməsi üçün yalnız bir səbəb olmalıdır. "Səbəb" kodun parçası deyil, dəyişiklik tələb edən insan və ya qrupdur (aktor): mühasibatlıq, HR, DBA və s. SRP "sinif bir metod etsin" demək deyil: sinif bir aktora xidmət etməlidir.

Solda üç aktor bir sinifə bağlıdır, sağda hər birinin öz sinfi var
Solda üç aktor bir sinifə bağlıdır, sağda hər birinin öz sinfi var

Pozuntu: "tanrı sinfi"

Employee üç iş görür: maaşı hesablayır (mühasibatlıq), hesabat mətni qurur (HR), bazaya yazır (DBA). Mühasibatlıq əlavə iş saatlarının əmsalını dəyişəndə eyni sinfə toxunuruq: save və hesabat da risk altındadır.

python
class Employee:
    def __init__(self, name, rate, hours):
        self.name, self.rate, self.hours = name, rate, hours

    def calculate_pay(self):               # changed by Accounting
        overtime = max(0, self.hours - 160)
        return (self.hours - overtime) * self.rate + overtime * self.rate * 1.5

    def hours_report(self):                # changed by HR
        return f"{self.name}: {self.hours} h"

    def save(self, db):                    # changed by the DBA
        db[self.name] = self.hours