Hubungan, penggabungan, dan komposisi dalam OOP dijelaskan

Unified Modeling Language (UML) adalah standard de-facto untuk memodelkan sistem berorientasikan objek. Di UML terdapat lima jenis hubungan: pergaulan, penggabungan, komposisi, kebergantungan, dan pewarisan. Artikel ini memaparkan perbincangan mengenai tiga konsep pertama ini, meninggalkan yang lain ke catatan blog yang lain.

Perkaitan dalam pengaturcaraan berorientasikan objek

Pergaulan adalah hubungan semantik yang lemah (ketergantungan semantik) antara objek yang tidak berkaitan. Pergaulan adalah hubungan "menggunakan" antara dua atau lebih objek di mana objek tersebut mempunyai jangka hayat mereka sendiri dan tidak ada pemiliknya.

Sebagai contoh, bayangkan hubungan antara doktor dan pesakit. Seorang doktor boleh dikaitkan dengan beberapa pesakit. Pada masa yang sama, satu pesakit boleh mengunjungi beberapa doktor untuk mendapatkan rawatan atau perundingan. Setiap objek ini mempunyai kitaran hidupnya sendiri dan tidak ada "pemilik" atau ibu bapa. Objek yang menjadi sebahagian daripada hubungan pergaulan dapat dibuat dan dimusnahkan secara bebas.

Di UML hubungan persatuan diwakili oleh satu anak panah. Hubungan pergaulan dapat diwakili sebagai satu-ke-satu, satu-ke-banyak, atau banyak-ke-banyak (juga dikenali sebagai kardinaliti). Pada asasnya, hubungan perkaitan antara dua atau lebih objek menunjukkan jalan komunikasi (juga disebut pautan) di antara mereka sehingga satu objek dapat menghantar mesej ke yang lain. Coretan kod berikut menggambarkan bagaimana dua kelas, BlogAccount dan BlogEntry, saling berkaitan antara satu sama lain.

BlogAccount kelas awam

   {

       BlogEntry peribadi [] blogEntries;

       // Ahli kelas BlogAccount yang lain

   }

BlogEntry kelas awam

   {

       Int32 blogId;

       kapsyen tali;

       teks rentetan;

       // Ahli kelas BlogEntry yang lain

   }

Gabungan dalam pengaturcaraan berorientasikan objek

Agregasi adalah bentuk pergaulan khusus antara dua atau lebih objek di mana setiap objek mempunyai kitaran hidupnya sendiri tetapi ada hak milik juga. Gabungan adalah hubungan keseluruhan / sebahagian atau ibu bapa / anak yang khas tetapi mungkin atau mungkin tidak menunjukkan pembendungan fizikal. Harta penting dari hubungan agregasi adalah keseluruhan atau ibu bapa (iaitu pemilik) dapat wujud tanpa bahagian atau anak dan sebaliknya.  

Sebagai contoh, pekerja mungkin tergolong dalam satu atau lebih jabatan dalam organisasi. Walau bagaimanapun, jika jabatan pekerja dihapuskan, objek pekerja tidak akan musnah tetapi akan terus hidup. Perhatikan bahawa hubungan antara objek yang berpartisipasi dalam penggabungan tidak boleh timbal balik - iaitu, jabatan mungkin "memiliki" pekerja, tetapi pekerja tidak memiliki jabatan tersebut. Dalam contoh kod berikut, hubungan agregasi dapat dilihat antara kelas BlogAuthor dan BlogAccount.

BlogAuthor kelas awam

   {

       pengarang Int32 peribadi;

       rentetan peribadiNama pertama;

       rentetan peribadi nama akhir;

       // Ahli kelas BlogAuthor yang lain

   }

BlogAccount kelas awam

   {

       BlogEntry peribadi [] blogEntries;

       // Ahli kelas BlogAccount yang lain

   }

Gabungan biasanya diwakili di UML menggunakan garis dengan berlian berlubang. Seperti pergaulan, penggabungan boleh melibatkan hubungan satu-ke-satu, satu-ke-banyak, atau banyak-ke-banyak antara objek yang mengambil bahagian. Dalam kes hubungan satu-ke-banyak atau banyak-ke-banyak, kita mungkin mengatakan bahawa ia adalah hubungan yang berlebihan.

Komposisi dalam pengaturcaraan berorientasikan objek

Komposisi adalah bentuk gabungan yang khusus. Secara komposisi, jika objek induk hancur, maka objek anak juga tidak ada lagi. Komposisi sebenarnya adalah jenis gabungan yang kuat dan kadang-kadang disebut sebagai hubungan "kematian". Sebagai contoh, sebuah rumah boleh terdiri daripada satu atau lebih bilik. Sekiranya rumah itu musnah, maka semua bilik yang menjadi bahagian rumah juga musnah. Coretan kod berikut menggambarkan hubungan komposisi antara dua kelas, Rumah dan Bilik.

Rumah kelas awam

{

   bilik Bilik persendirian;

   rumah Awam()

   {

       bilik = Bilik baru ();

   }

}

Seperti agregasi, komposisi juga merupakan hubungan keseluruhan / sebahagian atau ibu bapa / anak. Walau bagaimanapun, dalam komposisi kitaran hidup bahagian atau anak dikendalikan oleh keseluruhan atau ibu bapa yang memilikinya. Perlu diingatkan bahawa kawalan ini boleh dilakukan secara langsung atau transitif. Maksudnya, ibu bapa mungkin bertanggungjawab secara langsung atas penciptaan atau pemusnahan anak atau ibu bapa boleh menggunakan anak yang telah dibuat. Begitu juga, objek induk mungkin menyerahkan kawalan kepada ibu bapa lain untuk memusnahkan objek anak. Komposisi diwakili di UML menggunakan garis yang menghubungkan objek dengan berlian padat di hujung objek yang memiliki objek lain.

Saya harap perbincangan mengenai hubungan persatuan, penggabungan, dan komposisi ini dapat membantu anda memahami bagaimana ketiga-tiga konsep ini berbeza. Ingatlah bahawa penggabungan dan komposisi adalah kedua-dua kumpulan perkaitan. Dalam penggabungan dan komposisi, objek satu kelas dapat menjadi pemilik objek kelas lain. Dan dalam pengagregatan dan komposisi, objek anak tergolong dalam objek induk tunggal, iaitu objek tersebut mungkin hanya mempunyai satu pemilik.

Akhirnya, dalam hubungan agregasi, kitaran hidup objek induk dan objek anak adalah bebas. Dalam hubungan komposisi, kematian objek ibu bapa juga bermaksud kematian anak-anaknya.