Ana Sayfa

Liskov Yerine Koyma Prensibi: SOLID'in Ötesinde Bir Anlam

1 dk okuma

Yazılım dünyasında SOLID prensipleri sıkça tartışılsa da, Liskov Yerine Koyma Prensibi (LSP) genellikle sadece "SOLID'in L'si" olarak görülür ve miras alma (inheritance) ile sınırlı olduğu düşünülür. Ancak, Barbara Liskov ve Jeannette Wing tarafından ortaya konan bu prensip, alt tiplerin (subtypes) üst tiplerin (supertypes) yerine sorunsuz bir şekilde geçebilmesini sağlayan çok daha derin bir anlam taşır. Orijinal makalede, "doğru" bir alt tipleme için üç temel koşul belirlenmiştir: alt tipin her bir metodunun, ilgili üst tip metoduna göre aynı veya daha zayıf ön koşullara (preconditions) ve aynı veya daha güçlü son koşullara (postconditions) sahip olması; alt tipin üst tipin tüm durum değişmezlerini (state invariants) sağlaması; ve alt tipin üst tipin tüm "geçmiş özelliklerini" (history properties) koruması (örneğin, üst tipte değişmez bir alan varsa, alt tipin bunu değiştirilebilir yapmaması). Bu koşullar, daha sonra "alt tipin, üst tip için tasarlanmış tüm kara kutu testlerini geçmesi" ile eşdeğer olduğu şeklinde yorumlanmıştır.

LSP'nin temelini oluşturan bu koşullardan ilki, yani ön koşullar ve son koşullar kuralı, metodun sözleşmesiyle (contract) ilgilidir. Bir fonksiyonun ön koşulu, fonksiyona girilmeden önce doğru olması gereken durumu ifade ederken, son koşulu ise fonksiyonun yürütülmesi sonucunda garanti ettiği durumu belirtir. Matematiksel olarak, bir fonksiyonun "doğru" kabul edilmesi için tüm girişler için ön koşulun son koşulu ima etmesi gerekir. Bu tanımlama sayesinde, LSP'nin ilk alt tipleme gereksinimi resmi olarak türetilebilir. Eğer bir çağıran kod ve kullanılan bir üst tip metodu doğruysa, üst tipin yerine doğru bir alt tip metodu konulduğunda da sistemin doğruluğunun korunması beklenir. LSP, sadece miras alma durumlarında değil, genel olarak tür sistemlerinde ve davranışsal uyumlulukta kritik bir rol oynar, böylece daha sağlam ve bakımı kolay yazılımlar geliştirmeye yardımcı olur.

İçgörü

Yazılım sistemlerinde alt tiplerin üst tiplerin yerine geçebilme yeteneğini garanti ederek kodun sağlamlığını ve yeniden kullanılabilirliğini artırır.

Kaynak