SOLID: Liskov Substitution Principle (LSP)
Liskov Substitution Principle (LSP), SOLID prensiplerinin üçüncüsüdür ve bir nesnenin, onun alt sınıflarıyla yer değiştirilebilir olması gerektiğini belirtir. Bu prensip, alt sınıfların, üst sınıflarının tüm davranışlarını miras alarak, bu davranışları değiştirmeden genişletebilme yeteneğine sahip olmaları gerektiğini vurgular.
Önemi
LSP, kodun esnekliğini ve yeniden kullanılabilirliğini artırır. Alt sınıflar, üst sınıflarının yerine kullanılabildiğinde, kodda değişiklik yapmadan yeni işlevsellikler ekleyebiliriz. Bu durum, yazılımın sürdürülebilirliğini ve genişletilebilirliğini artırır.
İyi Uygulamalar
- Davranış Tutarlılığı: Alt sınıflar, üst sınıflarının davranışını değiştirmemeli, sadece genişletmelidir.
- Interface ve Abstract Sınıf Kullanımı: Alt sınıfların davranışlarını sınırlandırmak için arayüzler ve soyut sınıflar kullanılmalıdır.
- Override Edilen Metotların Anlamlılığı: Alt sınıflarda override edilen metotlar, üst sınıfların metotlarının anlamını korumalıdır.
Örnek
// Kötü Örnek
public class Bird
{
public virtual void Fly()
{
Console.WriteLine("Uçuyor");
}
}
public class Ostrich : Bird
{
public override void Fly()
{
throw new InvalidOperationException("Devekuşları uçamaz");
}
}
// İyi Örnek
public abstract class Bird
{
public abstract void Move();
}
public class FlyingBird : Bird
{
public override void Move()
{
Console.WriteLine("Uçuyor");
}
}
public class Ostrich : Bird
{
public override void Move()
{
Console.WriteLine("Yürüyor");
}
}
Clean Code kitabında, Robert C. Martin, LSP‘nin önemini şu şekilde açıklar: “Bir programdaki nesneler, alt sınıflarıyla yer değiştirilebilir olmalıdır.” Martin, bu prensibin uygulanmasının yazılımda nasıl esneklik ve sürdürülebilirlik sağladığını örneklerle açıklar. LSP, yazılımın modülerliğini ve yeniden kullanılabilirliğini artırır. Alt sınıflar, üst sınıfların davranışlarını bozmadan genişletir, böylece kod tabanı daha esnek ve bakımı kolay hale gelir.