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.