Memahami Komposisi Dalam Pemrograman Java

Sebelumnya Anda sudah mengetahui mengenai konsep pewarisan (inheritance) sebagai mekanisme yang kuat pada Java karena dapat menggunakan kembali kode program, meningkatkan organisasi sistem OOP, dan mengurangi redundansi data. Nah, sekarang kita akan membahas mengenai composition atau komposisi dalam pemrograman Java.

Apa Itu Komposisi?

Komposisi adalah mekanisme lain yang digunakan oleh pemrograman berorientasi objek untuk dapat menggunakan kembali implementasi.

Pada inheritance atau konsep IS-A (adalah), misalnya class Mobil extends class Kendaraan, dalam hal ini Mobil juga adalah Kendaraan. Jadi class Mobil akan memiliki semua fitur atau properti dari class Kendaraan selain dari properti lainnya yang dimiliki oleh class Mobil itu sendiri. Pada inheritance child class IS-A parent class.

memahami komposisi dalam pemrograman Java

Namun, komposisi menggunakan konsep HAS-A (memiliki). Ini berbeda dengan inheritance, di mana pada komposisi, suatu class akan menggunakan kembali fungsionalitas dengan membuat referensi ke suatu objek class yang ingin digunakan kembali. Contohnya mobil memiliki setir, rumah memiliki pintu, kantor memiliki karyawan.

Kenapa Menggunakan Komposisi?

Kenapa komposisi dalam pemrograman Java itu ada? Ini karena setiap objek dari class yang berbeda tidak bisa selalu berhubungan dengan inheritance. Misalnya class Mobil dan class Mesin, sekarang apakah mobil adalah mesin? Tentu bukan, jadi konsep inheritance tidak bisa digunakan.

Sekarang pertanyaannya adalah apakah mobil memiliki mesin? Ya, ini bisa diterima. Jadi untuk menghubungkan class semacam ini maka komposisi digunakan.

Komposisi dapat memodelkan objek yang terdiri dari objek lain sehingga hubungan HAS-A dapat terjadi di antara objek-objek tersebut. Komposisi juga merupakan asosiasi terkuat, ini artinya ketika suatu objek di musnahkan (di garbage collection) maka objek lain yang menyusun atau terkandung dalam objek tersebut juga akan ikut musnah.

Contoh Komposisi Pada Program Java

Berikut ini adalah contoh program Java yang memiliki konsep komposisi.

Output:

Warna Kendaraan = Merah jumlah roda= 4
Mesin mobil dinyalakan!

Anda bisa lihat pada kode class BMW di atas pada method setStart():

Class BMW terkait dengan class MesinBMW melalui komposisi. Dengan kata lain class BMW memiliki variable instance yang memegang referensi ke objek MesinBMW.

Perbedaan antara Komposisi dan Inheritance pada Java

Berikut ini adalah perbedaan antara komposisi dan inheritance pada program Java.

a. Fleksibilitas

Komposisi lebih fleksibel daripada inheritance. Karena ketika Anda menggunakan inheritance maka Anda harus menetapkan terlebih dahulu class mana yang akan diwariskan. Dan hal ini tidak bisa diubah pada saat runtime. Sedangkan pada komposisi Anda hanya mendefinisikan Tipe yang akan digunakan yang dapat memegang implementasi yang berbeda.

b. Dengan inheritance penggunaan kode kembali lebih terbatas

Ketika Anda menggunakan inheritance maka Anda hanya memperluas satu class, artinya Anda hanya dapat menggunakan kembali hanya satu class dan tidak lebih dari satu. Kalau Anda ingin memanfaatkan fungsionalitas dari beberapa class maka komposisi harus digunakan.

c. Tidak ada kontrol akses dalam inheritance

Dalam inheritance tidak ada kontrol akses. Dalam arti kita mengekspos semua method superclass ke class lain yang memiliki akses ke subclass. Jadi, ketika ada method baru atau celah keamanan di superclass maka subclass menjadi rentan.

Sedangkan dalam komposisi akses dapat dibatasi. Karena pada komposisi Anda memilih method mana yang akan digunakan sehingga lebih aman daripada inheritance.

d. Unit testing

Komposisi memiliki ruang lingkup pengujian yang lebih mudah dibandingkan dengan inheritance. Ini karena dalam komposisi Anda tahu tentang semua method yang digunakan dari class lain.

Sedangkan pada inheritance semuanya sangat bergantung pada superclass dan sulit mengetahui apakah semua method superclass akan digunakan. Dengan kata lain, pada inheritance Anda harus menguji semua method dari superclass untuk menguji subclass.

e. Enkapsulasi

Meskipun inheritance dan komposisi memungkinkan kembali penggunaan kode (reusable code) tapi inheritance memecah enkapsulasi. Alasannya adalah pada inheritance subclass akan tergantung pada perilaku superclass. Oleh sebab itu, ketika ada perubahan pada superclass maka subclass juga akan ikut terpengaruh.

Jadi, ketika suatu class tidak didokumentasikan dengan baik dan subclass tidak menggunakan superclass dengan cara yang semestinya maka setiap perubahan yang terjadi di superclass dapat merusak fungsionalitas subclass.

f) Class final

Seperti yang sudah Anda ketahui, ketika class dideklarasikan final maka class tersebut tidak bisa diwariskan. Jadi kode yang ada pada class tersebut tidak bisa digunakan kembali (non-reusable). Tapi dengan komposisi Anda tetap bisaa menggunakan kode dari class final.

Nah, itulah pembahasan mengenai komposisi dalam pemrograman Java. Semoga bisa membantu Anda untuk memahaminya. Tolong share jika Anda rasa bermanfaat untuk orang lain, happy coding!.

Be the first to comment

Leave a Reply

Your email address will not be published.


*