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