L — Liskov Substitution Principle Nedir
Düşündüğümüzde kediler, kaplanlar ve aslanlar arasında çok fazla benzerlik vardır, hepsi kedi soyundan gelir, avlanır, dna’ları ve anatomileri ortaktır. Liskova göre herhangi bir değişiklik yapmak zorunda kalmadan bir aslandan kedi olmasını ve bir kediden de bir aslan gibi davranabilmesini bekleyebilmeliyiz.
Liskov’un yerine geçme prensibi, Barbara Liskov tarafından 1987'de “Veri soyutlama” konferansında tanıtılmıştır. Ardından ise Robert Martin bu prensibi düzenleyerek kendi yazısında SOLID içinde tanıtmıştır.
Φ(x), T türündeki x nesneleri hakkında kanıtlanabilir bir özellik olsun. O halde Φ(y), S’nin T’nin bir alt türü olduğu S türündeki y nesneleri için doğru olmalıdır. — Barbara Liskov.
Yukarıda yazdığımız Sibertron dili’ne benzeyen açıklama yerine sadeleştirilmiş olan aşağıdaki açıklamayı baz alabiliriz.
Alt türler, temel türleri için yer değiştirilebilir olmalıdır. — Barbara Liskov.
Basit Nesne Yönelimli Dizayn’a göre elementler arası ilişki iki türlü olabilir;
- Bir X elementi, bir XP olabilir. (Something IS-A something else)
Bir kartal, bir kuştur. — IS-A ilişkisi.
- Bir Y elementi, bir XP elementine sahip olabilir. (Something HAS-A property)
Bir adres, şehre sahiptir. — HAS-A ilişkisi.
LSP’ye göre ise;
IS-A ilişkisi iyi bir dizayn için yeterli değildir, bu tür ilişkiler yerine-geçebilir-ilişki (IS-SUBSTITUABLE-FOR) ile değiştirilmelidir. Yani bu da demektir ki bir X elementi atası olan Y elementi yerine veya atası olan Y elementini miras almış bir Z elementi yerine geçebilmelidir.
Bir dizaynda LSP’ye uyulmadığını şu şekilde anlayabilir ve çözümleyebiliriz;
- Kodumuzda herhangi bir değişkenin tipini kontrol ettiğimizde.
Düzeltilmiş hali:
- Kalıtım aldığımız elementte yer alan bir elementin boş olup olmadığını kontrol ettiğimizde.
Düzeltilmiş hali:
- Her NotImplementedException aldığımızda.
Düzeltilmiş hali:
LSP’ye uyar isek elimize geçecek olan ‘yerine kullanılabilirlik’ teriminin bize kazandırdıklarını şu şekilde açıklayabiliriz;
Böylece HuntingShow’da tipi ne olursa olsun (kedi, kaplan) ICanHuntable arayüzünden türemiş olan her sınıf aynı şekilde davranacak ve herhangi bir bozulmaya neden olmayacak.