green chilli

Interface Segregation Principle (Arayüz Ayrımı Prensibi)

Arayüz Ayrımı Prensibinin odak noktası; eğer bir sınıf implement ettiği interface’e ait tüm nesneleri kullanmıyor ya da o interface ilgili sınıf için eksik kalıyor ise tüm ihtiyaçların doğru şekilde belirlendiği yeni bir interface oluşturulmalı ve artık bu yeni interface kullanılmalıdır.

Bu sayede interface kullanımında ortaya çıkan olası karmaşıklıkların önüne geçebiliriz.

Kısaca bu prensibi uygulamadığımızda ortaya çıkabilecek basit bir problemi örneklendirelim;

Elimizde ICar adında bir interface olsun ve ICar içerisinde turnLight, openDoor, closeDoor metodları bulunsun. A sınıfı ICar‘ı implement eden bir sınıf ve inherit ettiği tüm metodları destekliyor. Fakat B sınıfında closeDoor işlevi bulunmuyor fakat implement etmek zorunda olduğu için gövdesini tanımlıyor ve içerisinde NotImplementedException gibi bir Exception fırlatıyor. Bundan sonra da oluşturulacak ve ICar‘ı implement eden her sınıfta desteklenemeyen işlevler için aynı kötü yolu takip etmek zorunda olacağız.

Bu aynı zamanda interface’e göre logic belirlediğimiz durumlarda da bizi zora sokacak bir durum. Nedeni ise bir metodun ICar türünde nesne kabül ettiğini düşünecek olursak B sınıfı geldiğinde ve closeDoor çağırıldığında handle etmemiz gereken bir Exception’ımız olur. Ama bunun yerine ICanOpenDoorCar adında bir interface’imiz olsaydı hiç böyle sorunlarımız olmayacak ve nesne yönetimimiz çok daha kolay olacaktı.

İşte bu ve daha onlarca kötü örneği başımıza bela etmemek, gerçekten sürdürülebilir projeler geliştirebilmek için interfacelerimizi dikkatli kullanalım, kullanmayan arkadaşlarımızı uyaralım, PR’larını Approve etmeyelim, geceleri kabusları olalım 🙂 Interfaceler ile aranızdan suların sızmadığı temiz projelerde görüşmek dileğiyle…