Sobes.tech
Senior

Barbara Liskov-un yerinə qoyma prinsipini izah edin.

sobes.tech Süni İntellekt

AI-dan cavab

Əgər proqramda S T-nin alt növüdürsə, onda proqramdakı T növü obyektləri, proqramın işləmə qabiliyyətinə zərər vermədən S növü obyektləri ilə əvəz oluna bilər.

Əsas nöqtələr:

  • Davranışın saxlanması: Alt növ, xarici müşahidəçi baxımından, əsas növ kimi davranmalıdır.
  • Dəyişməzliklər: Əsas sinfin dəyişməzlikləri, alt siniflərdə saxlanılmalıdır.
  • Postşərtlər: Alt sinifin postşərtləri (metodun icrasından sonra doğru olmalı olan şərtlər), əsas sinifin şərtləri ilə eyni və ya daha güclü olmalıdır.
  • Əvvəlki şərtlər: Alt sinifin əvvəlki şərtləri (metodun icrasından əvvəl doğru olmalı olan şərtlər), əsas sinifin şərtləri ilə eyni və ya daha zəif olmalıdır.

Python nümunəsi:

class Rectangle:
    def __init__(self, width, height):
        self._width = width
        self._height = height

    def set_width(self, width):
        self._width = width

    def set_height(self, height):
        self._height = height

    def area(self):
        return self._width * self._height

class Square(Rectangle):
    def __init__(self, side):
        super().__init__(side, side)

    def set_width(self, width):
        self._width = width
        self._height = width # Prinsip pozulması: eni dəyişdirmək hündürlüyü də dəyişir

    def set_height(self, height):
        self._width = height # Prinsip pozulması: hündürlüyü dəyişdirmək eni də dəyişir
        self._height = height

# LSP-ni pozan istifadə nümunəsi:
def enlarge_rectangle(rectangle):
    rectangle.set_width(rectangle._width + 1)
    rectangle.set_height(rectangle._height + 1)
    return rectangle.area()

rect = Rectangle(2, 3)
print(f"Rectanglenin sahəsi: {enlarge_rectangle(rect)}") # Gözlənilir 12

square = Square(2)
print(f"Kvadratın genişləndirilmiş sahəsi: {enlarge_rectangle(square)}") # Gözlənilir 9, amma Square-də set_width/set_height səbəbindən 16 olacaq. Pozulma!

Bu prinsip irsiyyət və çox formallıqda düzgünlüyü təmin etmək və kodu daha etibarlı və əvvəlcədən bilinə bilən etmək üçün vacibdir.