Liskov Substitution Principle - LSP

C# Da Liskov Substitution Principle Kullanımı

Barbara Liskov tarafından geliştirilmiştir.

İlkenin açıklaması Alt sınıflar üst sınıfların yerini sorunsuz bir şekilde alabilmelidir.

  • Alt sınıflardan oluşturulan nesneler üst sınıfların nesneleriyle tamamen yer değiştirebilmeli ve yer değiştirdiklerinde aynı davranışı göstermelidir.
  • Üst sınıftan oluşturulmuş bir nesneyi kullanan bir fonksiyon, üst sınıf yerine bu üst sınıftan türemiş bir alt sınıftan oluşturulmuş bir nesneyi de aynı yerde kullanabilmelidir.
  • Üst sınıf ve Alt sınıf arasında farklılık yoktur.

Üst sınıf ile alt sınıf nesne örnekleri yer değiştirdiklerinde, üst sınıf kullanıcısı alt sınıfın operasyonlarına erişmeye devam edebilmelidir.

Üst Sınıfı : Base Class Alt Sınıf : Sub Class

Örnek:  Bir bankada çalışan gurubu vardır. Her bir çalışan Personel abstract sınıfını şablon olarak kullanmaktadır. Çalışanlar gün içinde normal mesaisini varsa fazla mesaisini yapmaktadır. Ve gün sonunda kasalarını kapatarak devir yapmaktadır.

2 tip çalışan vardır. Calisan1 ve Calisan2 açık kasa tutarak para alma ve verme işlemlerini yapmaktadır.

Daha sonra yeni bir çalışan tipi ihtiyacı doğmuştur ve Calisan3 olarak adlandırılmıştır. Calisan3’de personel sınıfını referans almıştır. Normal ve Fazla mesai yapmaktadır. Fakat bir kasa sahibi değildir ve ödeme işlemleri yapmamaktadır.

 

 

Gün sonunda GunlukMesaiBitir sınıfı tüm calisanları dolaşarak GunSonuKasaDevriYap() metotlarını çağırmaktadır. Çağrılan bu metotlar kasadaki paraları int tipinde döndürmektedir.

foreach (Personel p in personel)

{

p.GunSonuKasaDevriYap();

}

Bu durumda Calisan1 ve Calisan2 için sorun yoktur fakat Calisan3 bu metot çağrısına ödeme işlemlerinde yer almadığı için ne cevap verecektir. Metot çağrıldığında bir exception dönderebilir.

public int GunSonuKasaDevriYap()

{

throw new System.NotImplementedException();

}

Yada geriye return 0 dönderir. Eğer void tanımlanmışsa metod gövdesi boş bırakılabilir.

public int GunSonuKasaDevriYap()

{

return 0;

}

 

Bu örnekte Calisan1,2,3 tümü aynı davranışı gösterememiştir. Örnekteki Alt sınıf, Üst sınıf ilişkileri Liskov ilkesine uymamaktadır. İlkeye uyması için Calisan3 ödeme işlemleri yapabilmeli ve GunSonuKasaDevri() alabilmeli 3 tipte birbirinin yerine geçebilmeli.

Bu şekilde kullanıcı istisnai durumlardan, geriye boş dönen metot sonuçlarından, alt sınıfların varlığından bile haberdar olmamalı. Tek bilmesi gereken tümünün yer değiştirme durumunda bile aynı davranışları göstermeli.

Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git