Modul 9 : Polymorphism - IvanSholana/Pemrograman-Berbasis-Objek-Sistem-Informasi GitHub Wiki

Definisi Polymorphism

Polymorphism adalah sebuah konsep di dalam pemrograman berbasis objek yang berasal dari dua kata yaitu poly yang berarti banyak dan morphism yang berarti bentuk. Jika kita definisikan dari dua kata tersebut maka polymorphism merupakan sebuah konsep mengenai fleksibelitas dari bentuk atau tipe object. Fleksibelitas disini adalah kemampuan object class turunan untuk menjadi atau dianggap menjadi class parentnya.

image

Polymorphism sangat berkaitan dengan overloading dan overidding yang telah dijelaskan pada pertemuan sebelumnya.

Masih bingung?

calculating-puzzled

Jika masih bingung maka mari kita perhatikan kode program di bawah ini:

class animal{
    public void suara(){
        System.out.println("brrrrr");
    }
}

class ayam extends animal{
    public void suara(){
        System.out.println("kukuruyuk");
    }
}

class buaya extends animal{
    public void suara(){
        System.out.println("aku kalau ngechat kamu ada yang marah ga?");
    }
}

public class Polymorphsm {
    public static void main(String[] args) {

        ayam ayam_1 = new ayam();
        buaya buaya_1 = new buaya();

        animal[] kandang = {ayam_1,buaya_1};
        kandang[0].suara();
        kandang[1].suara();
    }
}

Pada contoh di atas dapat dilihat terdapat sebuah class parent dengan dua buah class childnya. Kemudian pada bagian main terdapat sebuah array dengan tipe data animal yang menampung object dari class ayam dan buaya.

Sebagaimana kita ketahui sebuah array hanya dapat menyimpan data dengan tipe data yang sama saja tetapi kenapa pada kasus di atas array dengan tipe data animal dapat menyimpan data dengan tipe data ayam dan data dengan tipe data buaya sekaligus? Nah, hal tersebutlah yang disebut dengan polymorphism. Dengan polymorphism sebuah object terurama object dari class turunan atau child memiliki beberapa bentuk sekaligus. Pada contoh di atas object ayam_1 selain dia memiliki bentuk ayam dia juga memiliki bentuk animal, begitu pula dengan buaya_1 sehingga kemampuan tersebut yang disebut dengan polymorphism atau banyak bentuk.

mind-blow-galaxy

Jenis - Jenis Polymorphism

Polymorphism dibagi menjadi 2 jenis yaitu static polymorphism dan dynamic polymorphism.

Static Polymorphism

Static polymorphism merupakan jenis polymorphism yang dilakukan saat compile time atau sebelum run time. Compile time sendiri merupakan waktu ketika sebuah syntax dari suatu bahasa pemrograman diubah menjadi bahasa mesin sehingga program kita dapat dimengerti dan dijalankan oleh mesin.

image

Bentuk dari static polymorphism adalah pendeklarasian overloading dan overidding. Hal tersebut dikarenakan kita melakukan pembuatan overloading constructor dan overidding method pada saat compile time seperti contoh di bawah ini:

class animal{
    String Makanan;
    Integer JumlahKaki;
    animal(String Makanan,Integer JumlahKaki){
        this.Makanan = Makanan;
        this.JumlahKaki = JumlahKaki;
    }

    animal(String Makanan){
        this.Makanan = Makanan;
    }
    public void suara(){
        System.out.println("brrrrr");
    }
}

class ayam extends animal{
    ayam(String Makanan, Integer JumlahKaki) {
        super(Makanan, JumlahKaki);
    }

    public void suara(){
        System.out.println("kukuruyuk");
    }
}

class buaya extends animal{
    buaya(String Makanan) {
        super(Makanan);
    }
    public void suara(){
        System.out.println("aku kalau ngechat kamu ada yang marah ga?");
    }
}

public class Polymorphsm {
    public static void main(String[] args) {

        ayam ayam_1 = new ayam("Biji Bijian",2);
        buaya buaya_1 = new buaya("Daging");

        animal[] kandang = {ayam_1,buaya_1};

        kandang[0].suara();
        kandang[1].suara();
    }
}

Pada contoh di atas dapat dilihat bahwa penulisan dan pendeklarasian dari overloading dan overidding pada saat compile time sehingga kita tidak dapat merubah overidding dan overloading pada saat running time. Dari contoh di atas sebuah class memiliki 2 bentuk pendeklarasian yang berbeda berdasarkan jenis dari constructor yang dipanggilnya sehingga hal tersebut disebut dengan static polymorphism.

Dynamic Polymorphism

Dynamic Polymorphism merupakan polymorphism yang terjadi saat runtime, hal ini terjadi ketika kita mendeklarasikan sebuah object dengan class yang kita pilih saat runtime. Perhatikan contoh berikut:

import java.util.Scanner;

class Animal{
    String Makanan;
    Integer JumlahKaki;
    Animal(String Makanan,Integer JumlahKaki){
        this.Makanan = Makanan;
        this.JumlahKaki = JumlahKaki;
    }

    Animal(String Makanan){
        this.Makanan = Makanan;
    }
    public void suara(){
        System.out.println("brrrrr");
    }
}

class Ayam extends Animal{
    Ayam(String Makanan, Integer JumlahKaki) {
        super(Makanan, JumlahKaki);
    }

    public void suara(){
        System.out.println("kukuruyuk");
    }
}

class Buaya extends Animal{
    Buaya(String Makanan) {
        super(Makanan);
    }
    public void suara(){
        System.out.println("aku kalau ngechat kamu ada yang marah ga?");
    }
}

public class Polymorphsm {
    public static void main(String[] args) {

        Animal animal_1;
        Scanner inputan = new Scanner(System.in);
        System.out.print("Pilihan Hewan Kesukaanmu : ");
        Integer pilihan = inputan.nextInt();
        if(pilihan == 1){
            animal_1 = new Ayam("Biji Bijian",2);
            animal_1.suara();
        }else{
            animal_1 = new Buaya("Daging");
            animal_1.suara();
        }
    }
}

Implementasi dari konsep di atas biasanya diimplementasikan di dalam pemilihan karakter dalam sebuah game seperti di bawah ini:

SuperMarioAdvanceGbaGIF

Dalam contoh di atas kita tidak mengetahui character dari class apa yang akan kita implementasikan ke dalam object character kita, untuk itu dapat digunakan konsep dynamic polymorphism terhadap kasus tersebut.

Selesai!!!

WeBareBearsIceBearGIF