Technology

Memahami Konsep Polymorphism dalam Pemrograman Java

Published on
Min read
7 min read
time-icon
Anisa Sekarningrum

Content writer experiences in digital marketing, startup, and writing feature article. 

H1_1._Memahami_Konsep_Polymorphism_Dalam_Pemrograman_JAVA.jpg

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):

getColor(Toyota)
→ 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:

for (element in list):
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):

3 + 4
"Foo" + "bar"

Menghasilkan nilai dari tipenya masing-masing, yaitu int dan string.

→ 7
→ "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:

int(43.2) #Converts a double to an int
float(45) #Converts an int to a float

Java mungkin akan melakukan konversi tipe hanya dengan mendefinisikan tipe:

int num = 23;
double dnum = num;

atau:

double dnum = Double.valueOf(inum);

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:

class Shape
{
  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 = &circ;
  // call Circle Draw function 
  s->Draw();
  return 0;
}
Output:
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
0

Tags

Share

Apakah Kamu Sedang Mencari Pekerjaan?

    Already have an account? Login

    Artikel Terkait

    H1_jadwal_fyp_tiktok.jpg

    Technology

    Jadwal FYP TikTok 2022: Jam Terbaik untuk Upload Video

    Nurina Ulfah

    16 January 2023
    5 min read
    0-cara-cek-nomor-indosat.jpg

    Technology

    5 Cara Cek Nomor Indosat dengan Mudah dan Cepat 2022

    Arin Khurota

    19 December 2022
    5 min read
    Ssstiktok_Download_Video_TikTok_tanpa_Watermark_Secara_Online_2022.jpg

    Technology

    SSSTikTok

    Sylvia Rheny

    19 December 2022
    5 min read

    Video