[B]anyak orang yang bingung dengan penerapan Composition dan Aggregation pada sebuah bahasa pemrograman, bagaimana menerjemahkan istilah yang panjang lebar dari Composition dan Aggregation tersebut kedalam baris-baris kode program. Kedua istilah ini biasanya pertama dijumpai pada saat belajar diagram kelas pada UML pada bagian hubungan/relasi antar kelas.
Tulisan ini tidak akan membahas kembali masing-masing pengertian dari Composition dan Aggregation, juga tidak akan membahas contoh dari keduanya dalam dunia nyata seperti hubungan mesin dengan mobil dsb, silahkan cari sendiri di google jika ingin mengetahuinya. Tulisan ini akan langsung memberikan contoh kode program dalam bahasa C# untuk hubungan Composition dan juga Aggregation.
Composition
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class AccountService { private AccountRepository accountRepository; public AccountService() { accountRepository=new AccountRepository(); } public void Save(Account account) { accountRepository.Save(account); } } |
Aggregation
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class AccountService { private AccountRepository accountRepository; public AccountService(AccountRepository accountRepository) { this.accountRepository=accountRepository; } public void Save(Account account) { accountRepository.Save(account); } } |
Spot the difference!
Dalam teorinya dikatakan bahwa Composition adalah hubungan yang jika parent mati maka child juga akan mati, artinya life cycle dari child sangat tergantung dari life cycle parent-nya. Dari kode di atas dapat dilihat bahwa yang bertindak sebagai child adalah AccountRepository dimana kelas ini di-instantiate di dalam kelas parent-nya yaitu AccountService yang menyebabkan jika life cycle dari kelas AccountService berakhir maka hal yang sama terjadi pada kelas AccountRepository.
Beda halnya dengan Aggregation. Hubungan ini menyatakan kalau antara parent dan child terdapat hubungan memiliki namun life cycle dari kedunya berdiri sendiri artinya life cycle kelas child tidak bergantung pada life cycle dari kelas parent. Lihat lagi kode di atas maka terlihat kelas child AccountRepository tidak di-instantiate di dalam kelas parent namun dimasukkan/di-inject dari luar melalui constructor kelas parent AccountService. Karena kelas AccountRepository di-instantiate di luar kelas parent maka otomatis dia memiliki life cycle-nya sendiri.
permisi mas. saya lagi nyari2 bahan tentang UML nih, khususnya composition dan aggregation. dan saya lihat penjelasan dari mas ini cukup jelas. ada referensi ahlinya gak mas? dari jurnal2 misalnya. soalnya dosen saya butuh bukti referensi nih. hhe
dulu jaman saya TA referensi UML pakai buku ini http://www.amazon.com/UML-Distilled-Standard-Modeling-Language/dp/0321193687