Til: English O’zbek

Interface Segregation Principle (ISP)

Klientlar o’zlari ishlatmaydigan interfeyslarga bog’liq bo’lmasligi kerak.

Katta, bir butun interfeyslarni kichik va aniq interfeyslarga ajratish lozim. Har bir klass faqat o’ziga tegishli metodlarni implement qilishi kerak.

Diagramma

ISP klass diagrammasi

Noto’g’ri yondashuv

violation.py dagi bitta katta Worker interfeysi uni implement qiluvchi barcha klasslarni work(), eat() va sleep() metodlarini yozishga majbur qiladi:

class Worker(ABC):
    @abstractmethod
    def work(self) -> str: ...

    @abstractmethod
    def eat(self) -> str: ...

    @abstractmethod
    def sleep(self) -> str: ...

Robot ovqatlanmaydi va uxlamaydi, lekin interfeys uni bu metodlarni yozishga majbur qiladi:

class Robot(Worker):
    def eat(self) -> str:
        raise NotImplementedError("Robots don't eat")

    def sleep(self) -> str:
        raise NotImplementedError("Robots don't sleep")

To’g’ri yondashuv

correct.py da esa katta interfeys uchta kichik interfeysga ajratilgan:

Interfeys Metod
Workable work()
Eatable eat()
Sleepable sleep()

Har bir klass faqat o’ziga kerakli interfeyslarni implement qiladi:

class Human(Workable, Eatable, Sleepable):
    ...

class Robot(Workable):  # eat() va sleep() talab qilinmaydi
    def work(self) -> str:
        return f"Robot {self.model} is working"

Faqat ishchi kerak bo’lgan funksiya Workable interfeysini qabul qiladi — keraksiz eat() yoki sleep() metodlariga bog’liq bo’lmaydi.