Senior
Barbara Liskov'un yerine koyma ilkesini açıklayın.
sobes.tech yapay zeka
AI'dan gelen yanıt
Bir programda, S T'nin bir alt türü ise, programdaki T türündeki nesneler, programın işlevselliğini bozmayacak şekilde S türündeki nesnelerle değiştirilebilir.
Ana noktalar:
- Davranışın korunması: Alt tür, dışarıdan gözlemci açısından temel türü gibi davranmalıdır.
- Değişmezlikler: Temel sınıfın değişmezlikleri, alt sınıflarda korunmalıdır.
- Postkoşullar: Alt sınıfın postkoşulları (bir yöntemin çalıştırılmasından sonra doğru olması gereken koşullar), temel sınıfınkilerle aynı veya daha güçlü olmalıdır.
- Önkoşullar: Alt sınıfın önkoşulları (bir yöntemin çalıştırılmadan önce doğru olması gereken koşullar), temel sınıfınkilerle aynı veya daha zayıf olmalıdır.
Python örneği:
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 # İlke ihlali: genişliği değiştirmek yüksekliği de değiştirir
def set_height(self, height):
self._width = height # İlke ihlali: yüksekliği değiştirmek genişliği de değiştirir
self._height = height
# LSP'yi ihlal eden kullanım örneği:
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"Enlarge_rectangle(rect) sonrası alan: {enlarge_rectangle(rect)}") # Beklenen 12
square = Square(2)
print(f"Enlarge_rectangle(square) sonrası alan: {enlarge_rectangle(square)}") # Beklenen 9, ancak Square'taki set_width/set_height nedeniyle 16 olur. İhlal!
Bu ilke, kalıtım ve çok biçimlilikte doğruluğu sağlamak ve kodu daha güvenilir ve öngörülebilir hale getirmek için önemlidir.