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....