En İyi Sorular
Zaman Çizelgesi
Sohbet
Bakış Açıları

Arayüz ayrımı ilkesi

Yazılımda, nesnelerin kullanmadıkları arayüzlere bağımlı kalmaması gerektiğini belirten ilke Vikipedi'den, özgür ansiklopediden

Remove ads

Arayüz Ayrım Prensibi (İngilizce: Interface Segregation Principle, ISP), nesne yönelimli programlamada kullanılan SOLID tasarım prensiplerinden biridir. Bu prensip, istemcilerin kullanmadıkları arayüz metodlarına bağımlı olmaması gerektiğini savunur. Büyük ve monolitik arayüzlerin, küçük ve özelleştirilmiş arayüzlere bölünmesini önerir.[1]

Tarihçe

Arayüz Ayrım Prensibi, Robert C. Martin tarafından 2000'lerin başında SOLID prensipleri kapsamında tanımlanmıştır. Martin, 2002'de yayınlanan Agile Software Development, Principles, Patterns, and Practices kitabında bu prensibi, "istemcilerin kullanmadıkları arayüzlere bağımlı olmaması gerektiği" şeklinde formüle etmiştir.[1] Prensip, özellikle büyük sistemlerde kodun esnekliğini ve bakımını iyileştirmeyi amaçlar.

Remove ads

Temel İlkeler

  • Arayüzler İstemci İhtiyaçlarına Göre Parçalanmalıdır: Bir arayüz, tüm istemcilerin ihtiyaç duyduğu metodları içermemeli; her istemci grubu için özelleştirilmiş arayüzler tasarlanmalıdır.
  • Gereksiz Bağımlılıklar Önlenmelidir: İstemciler, kullanmadıkları metodları implemente etmeye zorlanmamalıdır. Bu, Liskov'un yerine geçme ilkesi ile de uyumludur.
  • Karmaşıklık Azaltılmalıdır: Küçük arayüzler, kodun daha anlaşılır ve test edilebilir olmasını sağlar.
Remove ads

Uygulama Örneği

  • ISP Uyumsuz veya Hatalı Tasarım
// Tüm metodları içeren monolitik bir arayüz -java
interface ÇokAmaçlıAlet {
    void yazdır();
    void tarayıcıAç();
    void faksGönder();
}

// Sadece yazdırma özelliği gereken bir istemci
class Yazıcı implements ÇokAmaçlıAlet {
    public void yazdır() { /* ... */ }
    public void tarayıcıAç() { throw new UnsupportedOperationException(); } // Gereksiz!
    public void faksGönder() { throw new UnsupportedOperationException(); } // Gereksiz!
}
  • ISP Uyumlu Tasarım
interface Yazdırılabilir {
    void yazdır();
}

interface Taranabilir {
    void tarayıcıAç();
}

interface FaksGönderilebilir {
    void faksGönder();
}

class Yazıcı implements Yazdırılabilir {
    public void yazdır() { /* ... */ }
}

Etkileri

  • Bakım Kolaylığı: Arayüzlerde yapılan değişiklikler sadece ilgili istemcileri etkiler.
  • Esneklik: Yeni özellikler eklemek veya mevcutları değiştirmek daha az risklidir.
  • Test Edilebilirlik: Küçük arayüzler, birim testlerini basitleştirir.[2]

Ayrıca Bakınız

Kaynakça

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads