Lompat ke konten Lompat ke sidebar Lompat ke footer

Pengertian Polimorfisme Java dan Dynamic Method Dispatch

Pada artikel ini akan dijelaskan tentang pengertian konsep polimorfisme Java dan Dynamic Method Dispatch beserta contoh dan penjelasan fungsi-fungsinya.


Sebelum lebih lanjut mempelajari materi tentang Pengertian Polimorfisme Java dan Dynamic Method Dispatch, terlebih dahulu pelajari materi tentang: Menerima Turunan Program Java Menggunakan Inheritance, Enkapsulasi Java dan Fungsinya, dan Menampilkan Komponen Penting Java Menggunakan Abstraksi.

Polimorfisme adalah salah satu konsep utama dalam pemrograman berorientasi object yang memungkinkan object dari kelas yang berbeda untuk merespons metode yang sama dengan cara yang berbeda. Dalam bahasa pemrograman Java, polimorfisme diterapkan melalui konsep dynamic method dispatch yang memungkinkan pemanggilan metode yang sesuai dengan object aktual yang sedang dijalankan.

Pengertian Polimorfisme

Polimorfisme berasal dari kata Yunani "poly" yang berarti banyak, dan "morph" yang berarti bentuk. Dalam konteks pemrograman, polimorfisme mengacu pada kemampuan sebuah object untuk mengambil bentuk dari banyak tipe. Ini memungkinkan object yang memiliki relasi hierarkis (misalnya, turunan dari kelas yang sama) untuk diakses melalui referensi yang sama dan memanggil metode yang sama, tetapi perilaku yang sesuai dengan tipe object aktual akan dipanggil.

Polimorfisme di Java dapat dicapai melalui:
  • Overriding: Menerapkan metode yang sama yang didefinisikan dalam kelas induk (superclass) di kelas anak (subclass) dengan perilaku yang berbeda.
  • Dynamic Method Dispatch: Memungkinkan pemanggilan metode untuk ditentukan secara dinamis saat program berjalan berdasarkan tipe object aktualnya.

Method overriding adalah salah satu cara dalam bahasa Java untuk mendukung Runtime PolymorphismDynamic method dispatch adalah sebuah mekanisme dimana panggilan ke method override dapat diselesaikan pada saat runtime, ketimbang pada waktu kompilasi program.
  • Ketika method override dipanggil melalui referensi superclass, maka Java akan menentukan versi yang mana (superclass atau subclass) dari method tersebut yang akan dieksekusi berdasarkan tipe object yang dimaksud ketika waktu pemanggilan dilakukan. Proses tersebut dilakukan pada saat runtime.
  • Pada waktu runtime, hal ini tergantung pada tipe dari object referensi untuk (bukan tipe dari referensi variabel) menentukan versi dari method override yang akan dieksekusi.
  • Variabel referensi superclass dapat dilihat pada object subclass. Hal ini dikenal juga dengan istilah upcasting. Java menggunakan kemampuan ini untuk memanggil method override pada saat runtime seperti diperlihatkan pada gambar 1.

Gambar 1 Referensi superclass dapat dilihat pada object subclass pada Java
Gambar 1 Referensi superclass dapat dilihat pada object subclass pada Java

Dynamic Method Dispatch

Dynamic Method Dispatch adalah mekanisme di Java di mana pemanggilan metode yang dilakukan oleh compiler ditentukan secara dinamis saat program dijalankan, bukan pada waktu kompilasi. Ini memungkinkan pemanggilan metode untuk diarahkan ke metode yang sesuai dengan object aktual yang sedang dijalankan.

Contoh: dynamic method dispatch pada Java.

class Hewan 

{


void suara() 

{System.out.println("Hewan bersuara...");}

}


class Anjing extends Hewan {

void suara() 

{System.out.println("Guk guk");

}


}


class Kucing extends Hewan {

void suara() 

{System.out.println("Meong");}

}


public class Main {

public static void

 main(String[] args

{

Hewan hewan1 = new Anjing();

Hewan hewan2 = new Kucing();

        

hewan1.suara(); 

// Output: Guk guk

hewan2.suara(); 

// Output: Meong

}


}

Dari contoh yang diperlihatkan sebelumnya, meskipun kedua object hewan1 dan hewan2 dideklarasikan sebagai tipe Hewan,, namun metode suara() yang dipanggil ditentukan oleh tipe object aktualnya saat runtime. Hal ini memungkinkan pemanggilan metode yang sesuai dengan perilaku object aktual, sehingga menciptakan polimorfisme.

Baca Juga:

Jika superclass mengandung method yang override oleh sebuah subclass, maka ketika ada tipe object yang berbeda dipanggil melalui referensi variabel superclass, maka method dengan versi yang berbeda akan dieksekusi. Berikut adalah contoh dari ilustrasi dynamic method dispatch:

Contoh:

// Program java

// mengilustrasikan Dynamic

// Method Dispatch menggunakan

// hierarchical inheritance.

class

void m1() 

{System.out.println("Method"

+" di dalam A m1");} 

 

class B extends

/* overriding m1() */

void m1() 

{System.out.println("Method"

+" di dalam B m1");} 

 

class C extends

/* overriding m1() */

void m1() 

{System.out.println("Method"

+" di dalam C m1");} 

 

/* Driver class */

class Dispatch 

 

public static void main(String args[]

/* object tipe A */ 

A a = new A(); 

 

/* object tipe B */ 

B b = new B(); 

 

/* object tipe C */ 

C c = new C(); 

 

// dapatkan referensi tipe A

A ref; 

  

// ref mengacu pada object A

ref = a; 

 

// memanggil versi A dari m1() 

ref.m1(); 

 

// sekarang ref mengacu pada

// object B

ref = b; 

 

// memanggil versi B dari m1() 

ref.m1(); 

 

// sekarang ref mengacu pada

// object C

ref = c; 

 

// memanggil versi C dari m1()

ref.m1(); 

}

 

}

Output:
Method di dalam A m1
Method di dalam B m1
Method di dalam C m1

Penjelasan: Pertama, program sebelumnya menciptakan satu superclass yang disebut A dan dua subclass yang disebut B dan C. Kedua, subclass tersebut overrides m1() method.

satu, Pada dalam main() method dispatch class, inisialisasi object dari tipe A, B, dan C dideklarasikan seperti pada gambar 2.

A a = new A(); //object tipe A
B b = new B(); //object tipe B
C c = new C(); //object tipe C

Gambar 2 Inisialisasi objek dari tipe A, B, dan C pada Java
Gambar 2 Inisialisasi object dari tipe A, B, dan C pada Java

dua, Selanjutnya referensi dari tipe A, yang disebut juga ref dideklarasikan, yang selanjutnya akan dinisialisasi dengan nilai null seperti pada gambar 3.

A ref; //dapatkan referensi tipe A

Gambar 3 Referensi dari tipe A, yang disebut juga ref dideklarasikan pada Java
Gambar 3 Referensi dari tipe A, yang disebut juga ref dideklarasikan pada Java

tiga, Selanjutnya adalah menugasi setiap tipe dari object (baik itu A, B, atau C) ke ref satu per satu, dan menggunakan referensinya untuk memanggil m1(). Seperti diperlihatkan pada output, dimana versi dari m1() yang dieksekusi ditentukan oleh tipe dari object yang dimaksud ketika waktu panggil dilaksanakan seperti diperlihatkan pada gambar 4, 5, dan 6.

ref = a; //r mengacu pada object A
ref.m1(); //memanggil versi A dari m1()

Gambar 4 r mengacu pada object A pada Java
Gambar 4 r mengacu pada object A pada Java

ref = b; //r mengacu pada object B
ref.m1(); //memanggil versi B dari m1()

Gambar 5 r mengacu pada object B pada Java
Gambar 5 r mengacu pada object B pada Java

ref = c; //r mengacu pada object C
ref.m1(); //memanggil versi C dari m1()

Gambar 6 r mengacu pada object C pada Java
Gambar 6 r mengacu pada object C pada Java

Runtime Polymorphism dengan Data Anggota

Pada bahasa Java, override hanya dapat dilakukan pada method tetapi tidak pada variabel (data member), jadi runtime polymorphism tidak bisa dilakukan pada data member

Contoh:

// Program Java

// mengilustrasikan fakta

// bahwa runtime polymorphism

// tidak bisa dilakukan pada

// data member.

 

/* class A */

class

{int x = 10;} 

 

/* class B */

class B extends

{int x = 20;} 

 

/* Driver class */

public class Test 

 

public static void main(String args[]

{

/* object dari tipe B */

A a = new B();  

// data member dari class A

// akan diakses. 

System.out.println(a.x);

}

 

}

Output:
10

Penjelasan: Pada program sebelumnya, kedua class A (superclass) dan class B (subclass) memiliki variabel yang sama yaitu 'X'. Selanjutnya akan dibuat object class B, dari referensi 'a' yang merupakan tipe dari class A. Karena variabel tidak bisa override, maka statement "a.X" akan selalu memperlihatkan data anggota dari superclass.

Keunggulan dari Dynamic Method Dispatch:
  • Dynamic method dispatch memungkinkan Java untuk mendukung override dari method yang mana merupakan pusat untuk runtime polymoorphism.
  • Memungkinkan class untuk melakukan spesifikasi method yang dapat digunakan secara umum untuk semua derivatifnya, sementara memungkinkan untuk subclass untuk mendefinisikan secara spesifik implementasi dari sebagian atau keseluruhan dari method.
  • Memungkinkan untuk subclass menambahkan method spesifik pada subclass untuk mendefinisikan beberapa implemetasi spesifik.

Static vs dynamic binding:
  • Static binding selesai dijalankan prosesnya pada saat waktu kompilasi sedangkan dynamic binding selesai dijalankan prosesnya pada saat waktu runtime.
  • privatefinal, dan static method serta variabel lain menggunakan static binding dan terikat oleh kompilator, sementara method override terikat selama runtime berdasarkan tipe dari runtime object.

Manfaat Polimorfisme dan Dynamic Method Dispatch:
  • Fleksibilitas: Polimorfisme memungkinkan fleksibilitas dalam desain dan implementasi, karena memungkinkan penggunaan object dengan cara yang berbeda melalui referensi yang sama.
  • Penggunaan Kode Ulang: Polimorfisme memungkinkan penggunaan kembali kode melalui penggunaan kelas induk dan kelas turunannya.
  • Keterbacaan dan Pemeliharaan Kode: Dynamic Method Dispatch memungkinkan pemanggilan metode yang sesuai dengan perilaku object aktual, membuat kode lebih mudah dimengerti dan dipelihara.

Dengan memahami konsep polimorfisme dan dynamic method dispatch dalam Java, pengembang dapat membuat kode yang lebih fleksibel, mudah dimengerti, dan mudah dikelola. Ini adalah prinsip penting dalam pengembangan perangkat lunak berorientasi object dan memainkan peran kunci dalam pembuatan aplikasi yang skalabel dan mudah diubah.

Referensi Tambahan:

Artikel ini didedikasikan kepada: Ibnu Adrianto, Icha Sabrina Milenia Khansa, Inggit Herfilia Prativi Edianti, Ismi Zulfani, dan Mauluda Fitriyana.

5 komentar untuk "Pengertian Polimorfisme Java dan Dynamic Method Dispatch"

  1. Apakah polimorfisme atau polymorphism adalah dua konsep yang sama pada bahasa pemrograman Java?

    BalasHapus
    Balasan
    1. Polimorphism atau polimorfisme dapat juga dimaknai sebagai "banyak bentuk", dan hal tersebut dapat terjadi ketika user memiliki banyak class yang barkaitan satu sama lain melalui mekanisme inheritance atau pewarisan. Polimorfisme menggunakan method tersebut untuk melakukan beberapa tugas yang berbeda, dimana hal ini memungkinkan untuk melakukan satu tindakan dengan cara atau pendekatan yang berbeda.

      Hapus
  2. Secara sederhana apa yang dimaksud dengan polimorfisme pada bahasa pemrograman Java?

    BalasHapus
    Balasan
    1. Polimorfisme merupakan kemampuan bahasa pemrograman untuk menampilkan antarmuka yang sama untuk beberapa tipe data dasar yang berbeda. Polimorfisme adalah kemampuan object yang berbeda untuk merespons pesan yang sama dengan cara yang unik.

      Hapus
  3. Polimorfisme menggambarkan pola dalam pemrograman berorientasi object dimana class memiliki fungsionalitas yang berbeda sambil berbagi antaramuka yang sama.

    Keindahan dari polimorfisme adlaah bahwa kode yang bekerja dengan class yang berbda tidak perlu sama sekali mengetahui class mana yang digunakannya karena semua class tersebut digunakan dengan cara yang sama.

    BalasHapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -