Polymorphism adalah istilah pemrograman yang harus dipahami seorang programmer. Simak penjelasan mengenai polymorphism berikut ini.
Apa itu polymorphism?
Polymorphism adalah sebuah konsep di mana sebuah interface tunggal digunakan pada entitas yang berbeda-beda - Pexels
Dalam konteks pemrograman OOP (Object Oriented Programming), istilah polymorphism sering digunakan karena berkaitan erat dengan salah satu pilar seperti class, object, method, atau inheritance. Polymorphism adalah banyak bentuk atau bermacam-macam. Dalam istilah pemrograman, polymorphism adalah sebuah konsep di mana sebuah interface tunggal digunakan pada entitas yang berbeda-beda. Umumnya, penggunaan suatu simbol tunggal berfungsi untuk mewakili beberapa jenis tipe entitas.
Polymorphism adalah konsep pemrograman yang berorientasi pada objek yang mengacu pada kemampuan variabel, fungsi atau objek untuk mengambil beberapa bentuk. Polymorphism adalah penggunaan salah satu item seperti fungsi, atribut, atau interface pada berbagai jenis objek yang berbeda dalam bahasa pemrograman. Dalam bahasa pemrograman yang menunjukkan polimorfisme, objek kelas miliki hierarki yang sama yang diwariskan dari kelas induk yang sama, mungkin memiliki fungsi dengan nama yang sama, tetapi dengan perilaku berbeda.
Polymorphism memiliki beberapa keuntungan seperti:
- Membantu programmer menggunakan kembali kode dan kelas setelah ditulis, diuji dan diimplementasikan.
- Nama variabel tunggal dapat digunakan untuk menyimpan variabel dari beberapa tipe data (float, double, long, int, dll).
- Membantu menyusun abstraksi yang kuat dan kompleks dari yang lebih sederhana.
Baca juga: Java: Definisi, Komponen, 4 Fitur, Keunggulan, dan Kekurangannya
Bedanya aturan metode overloading dan metode overriding
Ada dua aspek implementasi polymorphism yaitu static dan dynamic polymorphism - Pexels
Ada dua aspek implementasi polymorphism, yaitu compile time polymorphism (contohnya metode overloading) dan runtime polymorphism (contohnya metode overriding).
1. Static polymorphism
Static polymorphism adalah tipe yang dilakukan pada waktu compile, yang dapat bekerja lebih cepat namun membutuhkan bantuan compiler tambahan. Contoh penggunaan tipe static polymorphism adalah static binding, compile-time binding, early binding, dan metode overloading pada sebuah class.
2. Dynamic polymorphism
Dynamic polymorphism adalah tipe yang dilakukan pada waktu program berjalan atau runtime. Implementasi dari dynamic polymorphism dianggap lebih fleksibel, namun bekerja lebih lambat dari tipe static polymorphism. Contoh penggunaan tipe dynamic polymorphism adalah dynamic binding, runtime binding, late binding, metode overriding pada class yang berbeda.
Berikut perbedaan aturan metode overloading dan metode overriding:
Metode overloading | Metode overriding |
Nama metode yang digunakan harus serupa dengan metode lainnya | Mode akses metode harus sama atau lebih luas daripada metodenya |
Parameter yang digunakan berbeda | Subclass hanya dapat dan diizinkan melakukan metode ini pada superclass sebanyak satu kali saja. Sehingga tidak diizinkan jika lebih dari satu metode yang sama pada class |
Return yang digunakan dapat serupa atau berbeda | Pada setiap subclass tidak diizinkan untuk memiliki hak akses metode overriding yang ketat dibandingkan dengan hak akses metode pada superclass atau parent class |
Baca juga: Memahami lebih dalam Object Oriented Programming
Tipe-tipe polymorphism
Ada beberapa tipe polymorphism yaitu subtype, parametric, ad hoc, dan coercion - Pexels
Beberapa tipe polymorphism adalah sebagai berikut.
1. Subtype polymorphism (runtime)
Subtype polymorphism adalah jenis polymorphism yang paling umum yang juga direferensikan sebagai objek dari polymorphism, yang menggunakan satu nama kelas untuk mereferensikan beberapa jenis subtipe sekaligus. Contohnya, ketika membuat kelas objek “mobil”, maka definisi beberapa subtype-nya adalah merek-merek mobil seperti Toyota, Honda, Nissan, Ford, Chevrolet, BMW, dll. Semua subtype dapat direferensikan secara bergantian menggunakan kelas “mobil”. Setiap mobil memiliki properti, warna, dan sekarang didapatkan warna dari setiap subtipe kelas “mobil”.
Polymorphism terjadi saat runtime, maka dapat dituliskan sebuah fungsi untuk mengambil warna dari salah satu subtype mobil. Fungsinya mungkin terlihat seperti ini (tidak ditulis dalam bahasa pemrograman tertentu):
→ returns black
getColor(Honda)
→ returns red
getColor(Nissan)
→ returns white
2. Parametric polymorphism (overloading)
Parametric polymorphism secara khusus menyediakan cara untuk menggunakan fungsi (kode yang sama) untuk berinteraksi dengan beberapa jenis. Contohnya adalah daftar tipe. Parametric polymorphism dapat menghapus, menambah, atau mengganti elemen daftar ini terlepas dari jenis elemennya. Kode yang bisa menjadi fungsi parametric polymorphism yang ditulis dengan Python:
list.remove(element)
3. Ad hoc polymorphism (compile-time)
Ad hoc polymorphism adalah fungsi dengan nama yang sama namun bekerja secara berbeda untuk tipe yang berbeda. Python diketik secara dinamis (tanpa memerlukan jenis yang akan ditentukan). Fungsi penambahan Python adalah ad hoc polymorphism karena merupakan fungsi tunggal dengan nama yang sama, “+” yang bekerja pada beberapa jenis. Keduanya (Python):
"Foo" + "bar"
Menghasilkan nilai dari tipenya masing-masing, yaitu int dan string.
→ "Foobar"
Untuk nilai bertipe int, fungsi penambahan menambahkan dua nilai bersama-sama, jadi 3+4 menghasilkan 7. Untuk nilai bertipe string, fungsi tambahan menggabungkan dua string, jadi “foo” + “bar” menghasilkan “foobar”.
4. Coercion polymorphism (casting)
Coercion polymorphism adalah transformasi langsung dari satu jenis ke jenis lainnya yang terjadi ketika satu jenis dilemparkan ke jenis lain. Sebelumnya polymorphism terjadi melalui interaksi dengan berbagai jenis melalui kelas objek atau fungsi. Jenis objek dapat dipilih saat program dijalankan. Satu fungsi dapat bekerja dengan tipe yang berbeda.
Contoh sederhana adalah mengubah nilai angka dari int, menjadi double, float, dan sebaliknya. Bergantung pada bahasa pemrograman, tipe dapat didefinisikan pada variabel atau terkadang ada metode pada tipe untuk mengubah nilainya ke tipe lain. Python akan melakukan konversi tipe seperti:
float(45) #Converts an int to a float
Java mungkin akan melakukan konversi tipe hanya dengan mendefinisikan tipe:
double dnum = num;
atau:
Baca juga: 5 Tips belajar pemrograman yang perlu kamu ketahui
Contoh polymorphism
Perbedaan dalam implementasi atas sebuah fungsi yang sama adalah contoh penerapan dari polymorphism - Pexels
Contoh sederhana dari konsep polymorphism adalah bagaimana seekor hewan bersuara. Setiap hewan mengeluarkan suara, baik secara jelas atau tidak. Jika hewan bersuara dikonsepkan sebagai fungsi, maka fungsi ini akan diimplementasikan oleh makhluk hidup yang berada dalam kategori hewan secara berbeda-beda.
Contohnya kucing mengimplementasikan fungsi dengan suara “meong”, selanjutnya anjing mengimplementasikan fungsi dengan suara “gug gug”, sapi mengimplementasikan fungsi dengan suara “mooo”, dan sebagainya. Perbedaan dalam implementasi atas sebuah fungsi yang sama inilah yang menjadi contoh penerapan dari polymorphism.
Berikut adalah contoh dari bagaimana polymorphism umumnya digunakan:
{
public:
Shape(){}
//defining a virtual function called Draw for shape class
virtual void Draw(){cout<<"Drawing a Shape"<<endl;}
};
class Rectangle: public Shape
{
public:
Rectangle(){}
//Draw function defined for Rectangle class
virtual void Draw(){cout<<"Drawing a Rectangle"<<endl;}
};
class Triangle: public Shape
{
public:
Triangle(){}
//Draw function defined for Triangle class
virtual void Draw(){cout<<"Drawing a Triangle"<<endl;}
};
class Circle: public Shape
{
public:
Circle(){}
//Draw function defined for Circle class
virtual void Draw(){cout<<"Drawing a Circle"<<endl;}
};
int main() {
Shape *s;
Triangle tri;
Rectangle rec;
Circle circ;
// store the address of Rectangle
s = &rec;
// call Rectangle Draw function
s->Draw();
// store the address of Triangle
s = &tri;
// call Triangle Draw function
s->Draw();
// store the address of Circle
s = ˆ
// call Circle Draw function
s->Draw();
return 0;
}
Drawing a Rectangle
Drawing a Triangle
Drawing a Circle
Pada contoh di atas, digunakan kata kunci virtual saat mendefinisikan fungsi Draw() karena fungsi virtual adalah fungsi anggota yang telah dideklarasikan di kelas dasar dapat didefinisikan ulang (override) oleh kelas turunan. Saat dijalankan, kompilator melihat isi dari pointer *s, karena alamat objek tri, rec, dan circ disimpan dalam *s, masing-masing fungsi Draw() disebut. Masing-masing anak kelas memiliki implementasi terpisah untuk fungsi Draw().
Baca juga: Apa itu OOP? Berikut pengertian, 4 prinsip, beserta kelebihan dan kekurangannya
Itu tadi penjelasan selengkapnya mengenai polymorphism. Semoga dapat membantumu untuk lebih memahaminya, ya. Apakah kamu seorang programmer yang sedang mencari kerja? Yuk, daftarkan diri kamu untuk menjadi talent di EKRUT. Semua proses dan bantuan profesional di talent marketplace EKRUT gratis. Kamu – sebagai talent atau employer – bisa langsung direkrut dan merekrut kandidat yang sesuai. Jadi, tunggu apa lagi? Yuk, daftar sekarang di EKRUT!
Sumber:
- educative.io
- kumparan.com
- socs.binus.ac.id