Asosiasi, agregasi, dan komposisi dalam OOP dijelaskan

Unified Modeling Language (UML) adalah standar de-facto untuk pemodelan sistem berorientasi objek. Dalam UML ada lima jenis hubungan: asosiasi, agregasi, komposisi, ketergantungan, dan warisan. Artikel ini menyajikan pembahasan tentang tiga konsep pertama ini, meninggalkan sisanya ke posting blog lain.

Asosiasi dalam pemrograman berorientasi objek

Asosiasi adalah hubungan yang lemah secara semantik (ketergantungan semantik) antara objek yang tidak terkait. Sebuah asosiasi adalah hubungan "menggunakan" antara dua atau lebih objek di mana objek memiliki masa hidupnya sendiri dan tidak ada pemiliknya.

Sebagai contoh, bayangkan hubungan antara dokter dan pasien. Seorang dokter dapat dikaitkan dengan banyak pasien. Pada saat yang sama, satu pasien dapat mengunjungi banyak dokter untuk perawatan atau konsultasi. Masing-masing objek ini memiliki siklus hidupnya sendiri dan tidak ada "pemilik" atau orang tua. Objek yang merupakan bagian dari hubungan asosiasi dapat dibuat dan dimusnahkan secara independen.

Dalam UML, hubungan asosiasi diwakili oleh satu panah. Hubungan asosiasi dapat direpresentasikan sebagai satu-ke-satu, satu-ke-banyak, atau banyak-ke-banyak (juga dikenal sebagai kardinalitas). Pada dasarnya, hubungan asosiasi antara dua atau lebih objek menunjukkan jalur komunikasi (juga disebut tautan) di antara mereka sehingga satu objek dapat mengirim pesan ke objek lainnya. Cuplikan kode berikut menggambarkan bagaimana dua kelas, BlogAccount dan BlogEntry, dikaitkan satu sama lain.

public class BlogAccount

   {

       pribadi BlogEntry [] blogEntries;

       // Anggota lain dari kelas BlogAccount

   }

kelas publik BlogEntry

   {

       Int32 blogId;

       teks string;

       teks string;

       // Anggota lain dari kelas BlogEntry

   }

Agregasi dalam pemrograman berorientasi objek

Agregasi adalah bentuk asosiasi khusus antara dua atau lebih objek di mana setiap objek memiliki siklus hidupnya sendiri tetapi ada juga kepemilikannya. Agregasi adalah hubungan keseluruhan / bagian atau induk / anak yang khas tetapi mungkin atau mungkin tidak menunjukkan penahanan fisik. Properti penting dari hubungan agregasi adalah bahwa keseluruhan atau induk (yaitu pemilik) dapat ada tanpa bagian atau turunan dan sebaliknya.  

Sebagai contoh, seorang karyawan mungkin termasuk dalam satu atau lebih departemen dalam suatu organisasi. Namun, jika departemen karyawan dihapus, objek karyawan tidak akan dihancurkan tetapi akan tetap hidup. Perhatikan bahwa hubungan antara objek yang berpartisipasi dalam agregasi tidak dapat bersifat timbal balik — misalnya, departemen dapat "memiliki" seorang karyawan, tetapi karyawan tersebut tidak memiliki departemen tersebut. Dalam contoh kode berikut, hubungan agregasi terlihat jelas antara kelas BlogAuthor dan BlogAccount.

kelas publik BlogAuthor

   {

       private Int32 authorId;

       string pribadi firstName;

       string pribadi lastName;

       // Anggota lain dari kelas BlogAuthor

   }

public class BlogAccount

   {

       pribadi BlogEntry [] blogEntries;

       // Anggota lain dari kelas BlogAccount

   }

Agregasi biasanya direpresentasikan dalam UML menggunakan garis berlubang berlian. Seperti pengaitan, agregasi dapat melibatkan hubungan satu-ke-satu, satu-ke-banyak, atau banyak-ke-banyak antara objek yang berpartisipasi. Dalam kasus hubungan satu-ke-banyak atau banyak-ke-banyak, kita dapat mengatakan bahwa itu adalah hubungan yang berlebihan.

Komposisi dalam pemrograman berorientasi objek

Komposisi adalah bentuk agregasi khusus. Dalam komposisi, jika objek induk dimusnahkan, maka objek turunan juga tidak ada lagi. Komposisi sebenarnya adalah jenis agregasi yang kuat dan terkadang disebut sebagai hubungan "kematian". Sebagai contoh, sebuah rumah dapat terdiri dari satu ruangan atau lebih. Jika rumah hancur, maka semua ruangan yang menjadi bagian dari rumah juga ikut hancur. Cuplikan kode berikut menggambarkan hubungan komposisi antara dua kelas, House dan Room.

Rumah kelas publik

{

   kamar kamar pribadi;

   rumah umum()

   {

       kamar = Kamar baru ();

   }

}

Seperti agregasi, komposisi juga merupakan hubungan keseluruhan / sebagian atau hubungan induk / anak. Namun, dalam komposisi, siklus hidup bagian atau turunan tersebut dikendalikan oleh seluruh atau orang tua yang memilikinya. Perlu dicatat bahwa kontrol ini bisa langsung atau transitif. Artinya, orang tua mungkin bertanggung jawab langsung atas pembuatan atau pemusnahan anak atau orang tua dapat menggunakan anak yang telah dibuat. Demikian pula, objek induk mungkin mendelegasikan kontrol ke beberapa induk lain untuk menghancurkan objek anak. Komposisi direpresentasikan dalam UML menggunakan garis yang menghubungkan objek dengan berlian padat di ujung objek yang memiliki objek lain.

Saya harap pembahasan tentang asosiasi, agregasi, dan hubungan komposisi ini telah membantu Anda memahami bagaimana ketiga konsep ini berbeda. Ingatlah bahwa agregasi dan komposisi adalah himpunan bagian dari asosiasi. Baik dalam agregasi maupun komposisi, objek dari satu kelas dapat menjadi pemilik objek kelas lain. Dan dalam agregasi dan komposisi, objek turunan milik objek induk tunggal, yaitu, mereka hanya dapat memiliki satu pemilik.

Akhirnya, dalam hubungan agregasi, siklus hidup objek induk dan objek turunan adalah independen. Dalam hubungan komposisi, kematian objek induk juga berarti kematian anaknya.