Composition nedir ?
Selamlar
Oluşturduğumuz bir sınıfı gerektiğinde başka bir sınıf içerisinde de kullanmak ve kodlamada aynı kodların yazılmasını önleyerek kod kalabalığının önüne geçerek hata riskini azaltmaktadır. Bu işlem için 2 temel yöntem bulunmaktadır:
1. Inheritence ( kalıtım)
2. Composition
İnheritance’da is-a ilişkisi vardır yani yönetici is-a calisan fakat compositionda has-a ilişkisi yani sahiplik ilişkisi bulunmaktadır.
Bilgisayar kasaya anakarta sahiptir.(Has-A). Bu örneğin kodlarını inceleyelim.
Anakart Sınıfı
package Composition; public class Anakart { private String model; private String uretici; private int yuvaSayisi; private String isletimSistemi; public Anakart(String model, String uretici , int yuvaSayisi, String isletimSistemi) { this.model=model; this.uretici=uretici; this.yuvaSayisi=yuvaSayisi; this.isletimSistemi=isletimSistemi; } public void istelimSitemiYukle(String isletiSistemi) { this.isletimSistemi=isletiSistemi; System.out.println("İşletim sistemi yuklendi..\nYeni işletim sisteminiz:" + isletiSistemi); } 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 getYuvaSayisi() { return yuvaSayisi; } public void setYuvaSayisi(int yuvaSayisi) { this.yuvaSayisi = yuvaSayisi; } public String getIsletimSistemi() { return isletimSistemi; } public void setIsletimSistemi(String isletimSistemi) { this.isletimSistemi = isletimSistemi; } }
Kasa Sınıfı
package Composition; public class Kasa { private String model; private String uretici; private String malzeme; public Kasa(String model, String uretici , String malzeme) { this.model=model; this.uretici=uretici; this.malzeme=malzeme; } public void bilgisayarıAc() { System.out.println("Bilgisayar 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; } }
Monitor Sinifi
package Composition; public class Monitor { private String model; private String uretici; private String boyut; private Resolution resolution; //Composition //Monitorun içini aslında resolution sınıfından bir tane nesneyi koymuş olduk. public Monitor(String model, String uretici, String boyut, Resolution resolution) {//Resolution clasından bir tane referans burada gözüküyor //Birden fazla obje olusturup 2 referansın aynı yeri işaret etmesini söyluyoruz this.model = model; this.uretici = uretici; this.boyut = boyut; this.resolution = resolution; } public void monitoruKapat() {System.out.println("Monitör 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; } }
Resolution Sınıfı
package Composition; public class Resolution { private int en; private int boy; public Resolution(int en, int boy) { this.en = en; this.boy = 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; } }
Bilgisayar Sinifi
package Composition; public class Bilgisayar { private Monitor monitor; private Kasa kasa; private Anakart anakart; public Bilgisayar(Monitor monitor, Kasa kasa, Anakart anakart) { this.monitor = monitor; this.kasa = kasa; this.anakart = 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; } }
Şimdi ise test sinifimiz ile testimizi gerçekleştirelim.
Test Sinifi
package Composition; public class Test { public static void main(String[] args) { Resolution resolution = new Resolution(1080, 760); Monitor monitor =new Monitor("Model", "Alpay", "18.5", resolution); Kasa kasa = new Kasa("KasaModel", "Toshiba", "Metal"); Anakart anakart= new Anakart("AnakartModel", "Asus", 3, "Ubuntu"); Bilgisayar bilgisayar = new Bilgisayar(monitor, kasa, anakart); bilgisayar.getKasa().bilgisayarıAc(); bilgisayar.getAnakart().istelimSitemiYukle("windows"); bilgisayar.getMonitor().monitoruKapat(); } }
Ekran Çıktısı:
Bilgisayar açılıyor.. İşletim sistemi yuklendi.. Yeni işletim sisteminiz:windows Monitör kapatılıyor....