27 Ocak 2014 Pazartesi

Kompozisyon (Composition) C++ - Java

    Merhaba arkadaşlar bugün yazımızda kompozisyon olayını işleyeceğiz. Kompozisyon nesne yönelimli programlamada kısaca içinde barındırma sahip olma (...has a...) ilişkisidir diyebiliriz. Yani Araba ve Motor sınıflarımız olsun Araba sınıfı içerisinde bir Motor nesnesi barındırırsa kompozisyon olur. Şimdi örneğimizi kodla inceleyelim.

C++ :

class Motor{

    int a;

public:

    int b;

    int foo();

    Motor(int x, int y){ a = x; b = y; }

 };

class Araba{

public:

    Motor r;

    Araba(int x, int y): r(x, y){ }

};
Burada Araba sınıfı Motor sınıfı türünden bir nesneye sahiptir. Java kodlarını da yazdıktan sonra açıklamalara devam edelim.

Java :

class Motor {

    private int a;
    public int b;
    public int foo(){
        return 1;
    }
    public Motor(int a, int b){ this.a = a; this.b = b; }

}
class Araba {

    private Motor m;

    public Araba(int x, int y){
        m = new Motor(x, y);
    }

}
Burada da olay aynı java syntax'ı ile şimdi asıl kurallarımıza gelir isek.

C++ :
- Araba nesnesi hayata geldiğinde Motor nesnesi de hayata gelir.

- Araba nesnesi construct edilmeden önce Motor nesnesi construct edilir.Bunun sebebi Motor nesnesine MIL syntax'ı ile ilk değer verdik MIL syntax'ına göre ilk değer vermeler constructor çağırılmadan önce yapılır. Dinamik Motor nesnesi kullansaydık. Nesneyi constructor'ın neresinde hayata getirirsek orasında Motor nesnesi construct olacaktı. (Kodunu yazacağım 1a)

- Araba nesnesi Motor'den önce destruct edilir.

- Araba nesnesi Motor nesnesinin private bölümlerine erişemez! Yani Araba'nın üye fonksiyonları içersinde   " r.a " error olur.

- Aralarında ömürsel bir ilişki olmuş olur.

Java : 

- Araba nesnesi hayata geldiğinde Motor nesnesi de hayata gelir.

- Javada nesneler dinamik ömürlü olduğundan biz kodumuzda Motor nesnesini Araba'nın constructor'ı içinde hayata getirdik bu nedenle önce Araba construct olurken Motor o arada olacak. İlk değer ile hayata getirseydik (Kodunu yazacağım 1b) ilk Motor hayata gelirdi.

- Javada destructtorlar çöp toplayıcı (Garbage Collection) 'nın ne zaman öldüreceğine göre değişir.

- Araba nesnesi Motor nesnesinin private bölümlerine erişemez! Yani Araba'nın üye fonksiyonları içersinde "m.a " error olur.

Kodunu yazacağım 1a :

class Araba{

public:

    Motor *r;

    Araba(int x, int y): { r = new Motor(x, y); }

}; // Burada önce Araba cons. olur içersinde Motor cons. olur.

Kodunu yazacağım 1b :

class Araba {
    private Motor m = new Motor(3, 5);

    public Araba(int x, int y){
          System.out.println("Araba cons.");
    }
}

Evet arkadaşlar kısaca bir özet geçersek sahip olma ilişkisi olan senaryolarda kompozisyon kullanabiliriz. Kullanımı iki dilde açıklamaya çalıştım temel mantıkları aynı olduğundan ayrı ayrı açıklamak istemedim. Yazımın sonuna geldim umarım faydalı olmuştur. Hatam var ise güncellerken düzeltmeleri yapacağım. Teşekkürler.

Hiç yorum yok:

Yorum Gönder