Interface Segregation Principle (ISP) – Arayüz Ayırma Prensibi

Kas 17th, 2009 | Yazar: Özcan Acar | Kategori: Tasarım Prensipleri

Birbiriyle ilişkili olmayan birçok metodu ihtiva eden büyük bir interface sınıf yerine, birbiriyle ilişkili (cohesive) metotların yer aldığı birden fazla interface sınıfı daha makbuldür.
ISP uygulanmadığı taktirde, birden fazla sorumluluğu olan interface sınıflar oluşur. Zaman içinde yüklenen yeni sorumluluklarla bu interface sınıflar daha da büyür ve kontrol edilemez bir hale gelebilir. Bunun bir örneğini resim 1 de görmekteyiz.

Resim 1 de yer alan Connector interface sınıfı bünyesinde JMS (Java Message Service) için gerekli iki metot bulunmaktadır: commit ve rollback. Bu metodlarin RMIConnector implementasyonunda implemente edilmeleri anlamsız olur. Büyük bir ihtimalle RMIConnector sınıfında bu metotların implementasyonu kod 1 de yer aldığı şekilde olacaktır.


package shop;

public class RMIConnector implements Connector
{

	public void commit() 
	{
		throw new RuntimeException("not implemented");	
	}

	public void rollback() 
	{
		throw new RuntimeException("not implemented");
	}
}

Kod 1 de yer alan yapı LSP ile uyumlu değildir. Connector sınıfını kullananlar RuntimeException oluşabileceğini göz önünde bulundurmak zorunda bırakılmaktadırlar.

ISP uygulandığı taktirde resim 1 de yer alan Connector interface sınıfını yok ederek, yerine sorumluluk alanları belli iki yeni interface sınıf oluşturabiliriz. Resim 2 de bu çözüm yer almaktadır.

Programcı olarak bir interface sınıfa birden fazla sorumluluk yüklememek için, interface sınıfın sistemdeki görevini iyi anlamamız gerekmektedir. Bu sadece bir sorumluluk alanı olan bir interface sınıf oluşturmamızı kolaylaştıracaktır.

Bu yazıyı PDF dosyası olarak aşağıdaki linkten edinebilirsiniz.

  Interface Segregation Principle (ISP) -Arayüz Ayırma Prensibi (39,0 KiB, 3.779 yükleme)


EOF (End of Fun)
Özcan Acar

Share Button

Özcan Acar

Bilgisayar mühendisi olan Özcan Acar 1997 yılından beri programcı olarak çalışıyor.

KurumsalJava.com, SmartHomeProgrammer.com ve Mikrodevre.com adresleri altında blog yazıyor. Kurduğu BTSoru.com'da ona yazılımla ile ilgili sorularınızı yöneltebilirsiniz. Pratik Programcı Yayınları bünyesinde Pratik Spring, Pratik Agile, Pratik Git ve Design Patterns ismini taşıyan kitapları bulunmaktadır. 21.12.2009 tarihinde Java Champion olarak seçildi.
  • Share/Bookmark
4 yorum | 8.108 kez okundu |

1 Yıldız2 Yıldız3 Yıldız4 Yıldız5 Yıldız (2 değerlendirme, ortalama: 5, toplam oy 5)
Loading ... Loading ...
Tags: ,

4 YORUM “Interface Segregation Principle (ISP) – Arayüz Ayırma Prensibi”

  1. hakdogan diyor ki:

    Özcan bey değerli çalışmalarınızı ilgi ile takip ediyorum ve katkılarınızın paylaşımınızın devamını diliyorum…

  2. Ahmet Refik ÖZBEK diyor ki:

    Özcan Bey JMSConnector interface sınıfında sadece commit ve rollback metotlarını oluştursak ve bu sınıfı uygulamak isteyen sınıflar hem JMSConnector hem de RMIConnector interface sınıfını uygulasa daha iyi olmaz mı?

  3. Özcan Acar diyor ki:

    Bu durumda JMSConnector semantik anlamda tam tesekküllü olmaz. Hem JMSConnector interface sinifini, hem de RMIConnector interface sinifini implemente eden bir sinif nedir? Bence birden fazla sorumluluk altina giren ve iki isi birden yapmaya calisan bir siniftir. Tek sorumluluk prensibine göre siniflarin tek bir nedenden dolayi degistirilmeleri dogaldir.

BU YAZI İÇİN BİR YORUM YAPABİLİRSİNİZ.