Merhaba arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslerimize, Java Nesne Yönelimli Programlama Dersleri serisi altında Composition Nedir konusu ile devam ediyoruz.
Composition Nedir
Composition, Nesne Yönelimli Programlamanın temel taşlarından biridir. Composition’ da sahiplik (has-a) ilişkisi vardır. Burada ki temel yapı; oluşturulan sınıfların birbiri içerisinde kullanılabilirliğini sağlamaktır. Bu sayede kod tekrarı ve kod kirliliğinide önlemiş olacağız. Örnek olarak bir bilgisayar bileşenlerini düşünelim. Bunlar; Kasa , Anakart, Monitör vb. Sonrasında bunları birleştirdiğimizde bir bilgisayar oluşturduğumuzu görelim. Yani biz bu bilgisayarı Nesne Yönelimli Programlamaya göre tasarlayacaksak eğer aşağıda ki görselde belirtmiş olduğumuz basit bir tasarım ortaya çıkmış olacaktır.
Burada bir kasa sınıfı oluşturup obje yaratacağız. Yaratmış olduğumuz kasa objesini ise direkt bilgisayar objesine yerleştireceğiz. Anakart ve Monitör içinde aynısını yaptıktan sonra Monitör sınıfı içerisinde bir tane daha composition uygulamaya çalışacağız. Gelelim bu anlatmış olduğumuz örneği koda dökmeye…
package composition; public class Anakart { private String model; private String uretici; private int yuva_sayisi; private String isletim_sistemi; public Anakart(String model, String uretici, int yuva_sayisi, String isletim_sistemi) { this.setModel(model); this.setUretici(uretici); this.setYuva_sayisi(yuva_sayisi); this.setIsletim_sistemi(isletim_sistemi); } public void isletimSistemi_yukle(String isletim_sistemi) { this.isletim_sistemi = isletim_sistemi; System.out.println("İşletim Sisteminiz :" + isletim_sistemi); } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public String getUretici() { return uretici; } public void setUretici(String uretici) { this.uretici = uretici; } public int getYuva_sayisi() { return yuva_sayisi; } public void setYuva_sayisi(int yuva_sayisi) { this.yuva_sayisi = yuva_sayisi; } public String getIsletim_sistemi() { return isletim_sistemi; } public void setIsletim_sistemi(String isletim_sistemi) { this.isletim_sistemi = isletim_sistemi; } }
package composition; public class Kasa { private String model; private String uretici; private String malzeme; public Kasa(String model, String uretici, String malzeme) { this.setModel(model); this.setUretici(uretici); this.setMalzeme(malzeme); } public void bilgisayariAc() { System.out.println("Bilgisayaar Açılıyor..."); } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public String getUretici() { return uretici; } public void setUretici(String uretici) { this.uretici = uretici; } public String getMalzeme() { return malzeme; } public void setMalzeme(String malzeme) { this.malzeme = malzeme; } }
package composition; public class Resolution { private int en; private int boy; public Resolution(int en, int boy) { this.setEn(en); this.setBoy(boy); } public int getEn() { return en; } public void setEn(int en) { this.en = en; } public int getBoy() { return boy; } public void setBoy(int boy) { this.boy = boy; } }
Yukarıdaki görselde Monitör Objesi içerisinde bir de Resolution objesini eklemiştik. Resolution sınıfında en ve boy tanımlaması yaptıktan sonra monitör sınıfında bu sınıfı çağırarak composition örneğini de tekrarlamış olacağız.
package composition; public class Monitor { private String model; private String uretici; private String boyut; private Resolution resolution; // composition public Monitor(String model, String uretici, String boyut, Resolution resolution) { this.setModel(model); this.setUretici(uretici); this.setBoyut(boyut); this.setResolution(resolution); } public void monitoruKapat(){ System.out.println("Monitor kapatılıyor..."); } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public String getUretici() { return uretici; } public void setUretici(String uretici) { this.uretici = uretici; } public String getBoyut() { return boyut; } public void setBoyut(String boyut) { this.boyut = boyut; } public Resolution getResolution() { return resolution; } public void setResolution(Resolution resolution) { this.resolution = resolution; } }
package composition; public class Bilgisayar { private Monitor monitor; private Kasa kasa; private Anakart anakart; public Bilgisayar(Monitor monitor, Kasa kasa, Anakart anakart) { this.setMonitor(monitor); this.setKasa(kasa); this.setAnakart(anakart); } public Monitor getMonitor() { return monitor; } public void setMonitor(Monitor monitor) { this.monitor = monitor; } public Kasa getKasa() { return kasa; } public void setKasa(Kasa kasa) { this.kasa = kasa; } public Anakart getAnakart() { return anakart; } public void setAnakart(Anakart anakart) { this.anakart = anakart; } }
Bilgisayar sınıfına baktığımızda anakart, kasa , monitör sınıflarını eklemiş olduğumuzu görüyoruz. Burada ki asıl amaç; Bir sınıfı oluşturduktan sonra başka bir sınıf içerisinde o sınıfı kullanmamızı sağlayan yapıya composition denildiğini görmüş olduk.
package composition; public class Test { public static void main(String[] args) { Resolution resolution = new Resolution(1920,1080); Monitor monitor = new Monitor("VS197DE","ASUS","25",resolution); Kasa kasa = new Kasa("Shadow Blade", "Shadow", "Temperli Cam"); Anakart anakart = new Anakart("B250-PRO","ASUS",10,"Windows 10"); Bilgisayar bilgisayar = new Bilgisayar(monitor,kasa,anakart); bilgisayar.getKasa().bilgisayariAc(); bilgisayar.getMonitor().monitoruKapat(); bilgisayar.getAnakart().isletimSistemi_yukle("Linux Mint"); } }
Composition Faydaları Nelerdir
Composition düşünürken gerçek dünya ile bağlantı kurarak birden fazla ilişki kurabilir konuyu daha iyi kavrayabiliriz. Peki Composition oluşturduktan sonra bunun bize faydası ne olacaktır diye düşündüğünüzü duyar gibiyim. Faydaları aslında bizim çoğu projemizde yaşamış olduğumuz sıkıntıları giderebilecek durumdadır. Bunlar ;
- Mevcut kodu tekrar kullanabiliriz,
- Genişletebiliriz,
- Kod tekrarını önleyebiliriz ve bunun sayesinde temiz kod elde etmiş oluruz.
Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı Mobilhanem Soru&Cevap bölümünden sorabilirsiniz. İlgili örneğe buradan ulaşabilirsiniz…
Kaynaklar :
Tüm Java Dersleri için tıklayınız..
45
Eline sağlik Aybuke, guzel bir yazi olmus. Bir kac tavsiyem olacak, object oriented iliskileri aciklarken, uml gosterim bicimlerini ve kullanimini da yazilarina eklersen daha faydali olabilecegini dusunuyorum. Bir de referans, varsa ben goremedim yazida. Teknik sentezi yaparken kullandigin referanslarida paylasman ekstra fayda saglayabilir okuyucularina
Çok teşekkür ederim abi, tavsiyelerin benim için çok değerli. Bunlara önem vererek devam edeceğim yazılarıma.