Pengantar
Bagi mahasiswa yang mengambil jurusan yang berkaitan dengan komputer mungkin tidak asing dengan istilah polymorphisme. Pada pemrograman berorientasi objek, konsep polymorphisme merupakan konsep penting yang harus dipahami. Pada artikel kali ini kita akan membahas sedikit mengenai konsep polymorphisme yang mana semoga dapat memberikan tambahan wawasan dan pengetahuan khususnya di bidang pemrograman berorientasi objek. Baiklah, pertama sekali ada baiknya kita pahami dulu maksud dari polymorphisme.
Konsep Polymorphisme
Secara sederhana, polymorphisme dapat diartikan dengan dapat memiliki banyak bentuk. Dalam bidang pemrograman, bentuk disini dapat kita korelasikan dengan data atau proses yang dimiliki oleh sebuah objek. Dengan menggunakan konsep polymorphisme kita dapat menghasilkan beberapa objek yang berbeda dari kelas yang sama.
Sebagai contoh sederhana, sebuah perusahaan memiliki karyawan yang mana terbagi menjadi dua kategori yaitu karyawan tetap dan karyawan tidak tetap. Pada pemrograman konvensional, kita dapat membuat dua buah class terpisah untuk masing - masing kategori pegawai. Jika terdapat data atau atribut yang sama yang dimiliki oleh kedua kategori karyawan seperti ID karyawan, nama, alamat, dsb, maka atribut - atribut tersebut harus dibuat pada masing - masing class.
Hal ini tentu saja akan menyebabkan pemborosan dan tidak efisien. Belum lagi jika terdapat method atau proses yang sama antara kedua kategori tersebut, maka metod atau proses tersebut harus dibuat di masing - masing class. Untuk meningkatkan efisiensi penggunaan objek yang berbeda namun masih dalam ruang lingkup class yang sama seperti kasus inilah maka muncullah konsep polymorphisme.
Pada pemrograman berorientasi objek, polymorphisme dapat diterapkan dengan dua cara yaitu :
- Inheritance atau pewarisan
- Interface
Polymorphisme Inheritance
Dalam inheritance, kita dapat mengambil sifat dari satu kelas ke kelas lainnya. Polymorphism dengan inheritance mengacu pada kemampuan objek untuk memperlihatkan perilaku yang berbeda sesuai dengan kelas turunan atau kelas yang mewarisi sifat dari kelas induknya. Sebagai contoh dari kasus kategori karyawan diatas, kita dapat mengaplikasikan polymorphisme sebagai berikut :
Pada contoh diatas, kita menyediakan sebuah class karyawan yang memiliki atribut - atribut umum yang dimiliki oleh semua kategori karyawan beserta method nya. Menggunakan class karyawan sebagai dasarnya, kemudian kita membuat class untuk masing - masing kategori karyawan yaitu class KarTetap dan class KarTidakTetap yang mewarisi class Karyawan sehingga atribut umum karyawan secara otomatis dimiliki oleh class KarTetap dan class KarTidakTetap yang kemudian masing - masing class cukup melakukan override pada method GaPok untuk dapat menghasilkan nilai gaji pokok untuk masing - masing kategori karyawan.
Cara diatas lebih efisien dibandingkan jika kita membuat class untuk masing - masing kategori secara terpisah. Jika dimasa yang akan datang terdapat penambahan data atribut atau method untuk karyawan atau penambahan jenis kategori karyawan maka perubahan yang dilakukan akan jauh lebih sederhana dibandingkan jika harus merubah semua class kategori karyawan satu per satu.
Polymorphisme Interface
Polymorphism dengan interface memungkinkan kita untuk membuat kelas-kelas yang dapat digunakan secara umum, tanpa harus bergantung pada implementasi spesifik dari kelas-kelas tersebut. Interface menyediakan sebuah kerangka yang harus diikuti oleh kelas-kelas yang mengimplementasikannya, sehingga membuat kelas-kelas tersebut memiliki perilaku atau method yang sama walaupun isi atau proses yang dimiliki oleh method - method tersebut boleh saja berbeda.
interface berbeda dengan inheritance, dimana interface menyediakan abstraksi untuk konstanta dan method yang dapat digunakan oleh class lainnya. Konsep interface akan kita bahas lebih dalam pada artikel lainnya. Pada contoh diatas, objek Budi dan Andi merupakan hasil dari polymorphisme dimana berasal dari class yang sama namun memiliki bentuk yang berbeda, dimana pada contoh diatas perbedaan bentuk yang dapat kita lihat terletak dari isi proses dari method GaPok().
Penutup
Setelah kita membahas konsep dari polymorphisme diatas maka sebenarnya konsep ini tidaklah serumit yang dibayangkan, hanya saja terkadang sulit untuk mengilustrasikannya dalam kasus nyata. Adapun keuntungan dari aplikasi polymorphism antara lain:
-
Mengurangi kode yang duplikat: Dengan menggunakan polimorfisme, kita dapat mengurangi kode yang duplikat di dalam aplikasi. Misalnya, dalam kasus inheritance, kita dapat mewarisi sifat dari satu kelas ke kelas lainnya sehingga kita tidak perlu menuliskan kembali kode yang sama di setiap kelas.
-
Meningkatkan fleksibilitas: Dengan polimorfisme, kita dapat membuat kelas-kelas yang dapat digunakan secara umum dan dapat diimplementasikan dalam berbagai situasi yang berbeda.
-
Meningkatkan maintainability: Dalam aplikasi yang menggunakan polimorfisme, perubahan pada kelas-kelas yang mendasar dapat dilakukan tanpa harus mempengaruhi kelas-kelas turunannya. Hal ini dapat memudahkan proses pemeliharaan aplikasi.
Namun, ada juga beberapa kerugian dari penggunaan polimorfisme, di antaranya:
-
Memerlukan pengaturan yang kompleks: Dalam aplikasi yang kompleks, penggunaan polimorfisme dapat memerlukan pengaturan yang kompleks dan sulit untuk dipahami. Hal ini dapat meningkatkan kompleksitas aplikasi dan membuatnya sulit untuk diatur dan dipelihara.
-
Performa yang lebih lambat: Dalam beberapa kasus, penggunaan polimorfisme dapat mengakibatkan penurunan performa aplikasi. Hal ini terjadi karena polimorfisme memerlukan mekanisme pemrosesan yang lebih kompleks dibandingkan dengan metode pemrosesan yang sederhana.
-
Kesulitan dalam debugging: Dalam aplikasi yang menggunakan polimorfisme, debugging dapat menjadi lebih sulit karena objek dapat memiliki beberapa bentuk dan perilaku yang berbeda. Hal ini dapat membuat kesulitan dalam menemukan dan memperbaiki kesalahan yang terjadi.
Dalam penggunaan polimorfisme, kita perlu mempertimbangkan keuntungan dan kerugian yang terkait dengan aplikasi yang sedang kita kembangkan, sehingga kita dapat memilih pendekatan yang paling sesuai untuk memenuhi kebutuhan aplikasi tersebut. Sekian dulu artikel kali ini, semoga bermanfaat bagi kita semua 😉