“Interface Segregation Principle” (ISP) Kullanımı

Bu yazımızda, “I” harfiyle gösterilen ve SOLID ilkelerinden biri olan “Interface Segregation Principle” kavramına odaklanacağız.

“Interface Segregation Principle” Nedir?

Konumuza ilk olarak “Interface” ve “Segregation” kelimelerinin anlamlarını açıklayarak başlayalım; “Interface”, genellikle bilgisayar bilimleri ve yazılım mühendisliği alanlarında, farklı sistemler, yazılım bileşenleri veya programlar arasında etkileşimi sağlayan yapı olarak tanımlanır. Bu yapı, genelde bir sınıfın veya modülün dış dünyaya sunduğu metod ve özellikler topluluğunu ifade eden bir arayüzdür. Öte yandan, “Segregation” kelimesi, ayrım yapmak, ayırmak veya bölümlemek anlamına gelir ve bu bağlamda, büyük ve karmaşık yapıların daha küçük, yönetilebilir ve ihtiyaca yönelik parçalara ayrılmasını vurgular. Yani prensibimizi “Arayüzlerin Ayrımı” şeklinde Türkçeleştirebiliriz.

Kelime anlamını da öğrendiğimize göre artık prensibin ne iş yaptığını inceleyebiliriz. “Interface Segregation Principle” (ISP), bir yazılım tasarım prensibi olarak, büyük ve genel amaçlı interfacelerin daha küçük, daha spesifik ve kullanıma daha uygun arayüzlere bölünmesi gerektiğini ifade eder.

Tüm sorumlulukları tek bir arayüzde birleştirmek yerine, daha spesifik, birden fazla arayüz oluşturmamızı sağladığı için kodumuzun esnekliği, bakımı ve yeniden kullanılabilirliği artar.

O halde prensibimizin nasıl kullanıldığını bir örnek üzerinden inceleyelim. Diyelim ki kodumuzda, yazdırma, tarama ve faks gönderme gibi işlevleri yerine getiren bir sınıf (class) olsun. İşte tüm bu işlevleri tek bir arayüz aracılığıyla sağladığımızda ortaya çıkan curcunayı hayal edelim. Bakınız:

Yukarıdaki kodumuzda sadece yazdırma işlevine ihtiyaç duyan bir sınıf oluşturmak istersek, IMultiFunctionDevice interface’ini implemente etmek zorunda kalırız. Ancak sınıfımızın scan() ve fax() işlevlerine ihtiyacı bulunmaktadır. Dolayısıyla bu durum gereksiz kod ve karmaşık bir sınıf yapısına yol açmaktadır. İşte ISP’yi uygulayarak, yazdırma, tarama ve faks işlevleri için ayrı ayrı arayüzler tanımlayabiliriz. Bu sayede, her sınıf sadece ihtiyaç duyduğu işlevleri içerecek şekilde düzenlenir.

Bu durumda, SimplePrinter yalnızca IPrinter arayüzünü uygular ve gereksiz scan ve fax metodlarından kurtulmuş olur. Haliyle, kodumuz daha temiz, anlaşılır ve yönetilebilir olduğundan gereksiz bağımlılıkları azaltmış oluruz.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu