Langsung ke konten utama

Belajar Java OOP: Memahami Prinsip Polimorfisme dalam OOP

Belajar Java OOP: Memahami Prinsip Polimorfisme dalam OOP


 
Belajar Java OOP: Polimorfisme
Pemrograman berorientasikan objek atau OOP, memiliki beberapa pilar atau konsep penting yang harus dipahami.
Diantaranya ada: Class, Objek, Enkapsulasi, Inheritance, dan lainnya.
Pada tutorial sebelumnya, kita sudah belajar tentang:
Berikutnya, kita akan belajar tentang Polimorfisme.
Apa itu Polimorfisme dan bagaimana contohnya?
Mari kita bahas…

Apa itu Polimorfisme?

Poly artinya banyak, morfisme artinya bentuk.
Polimorfisme (bahasa inggris polymorphism) adalah sebuah prinsip dalam biologi di mana oraganisme atau spesias dapat memiliki banyak bentuk atau tahapan (stages)1
Prinsip ini juga diadopsi pada pemrograman berorientasikan objek.
Sehingga kita dapat definisikan sebagai berikut:
Polimorfisme dalam OOP adalah sebuah prinsip di mana class dapat memiliki banyak “bentuk” method yang berbeda-beda meskipun namanya sama.
“Bentuk” di sini dapat kita artikan: isinya berbeda, parameternya berbeda, dan tipe datanya berbeda.
Polimorfisme pada Java ada dua macam:
  1. Static Polymorphism (Polimorfisme statis);
  2. Dynamic Polymorphism (Polimorfisme dinamis).
Beda dari keduanya terletak pada cara membuat polimorfismenya.
Polimorfisme statis menggunakan method overloading sedangkan polimorfisme dinamis menggunakan method overriding.
Karena kamu baru mendengar kedua hal ini, mari kita bahas perbedaanya lebih detail:

Perbedaan Method Overloading dengan Method Overriding

Method overloading terjadi pada sebuah class yang memiliki nama method yang sama tapi memiliki parameter dan tipe data yang berbeda.
Kata kunci yang perlu kamu ingat:
“Dalam satu class”
“Nama method sama”
“Tipe data dan parameter beda”
Itulah method Overloading.
Contohnya giaman?
Contohnya misalkan kita memiliki class Lingkaran.java. Pada class ini terdapat method luas().
Nah, si method luas() ini bisa saja memiliki parameter yang berbeda.
Misalnya kita ingin menghitung luas berdasarkan jari-jari (radius) atau diameter.
Maka kita dapat membuat class-nya seperti ini:
class Lingkaran {

    // method menghitung luas dengan jari-jari
    float luas(float r){
        return (float) (Math.PI * r * r);
    }

    // method menghitung luas dengan diameter
    double luas(double d){
        return (double) (1/4 * Math.PI * d);
    }

}
Coba perhatikan!
Class Lingkaran memiliki dua method yang namanya sama, yakni luas().
Tapi parameter dan tipe datanya berbeda..
..dan juga isi atau rumus di dalamnya berbeda.
Inilah yang disebut polimorfisme satatis.
Sudah paham ‘kan?
Lalu Polimorfisme yang dinamis giamana?
Plimorfisme dinamis biasanya terjadi saat kita menggunakan pewarisan (inheritance) dan implementasi interface.
Seperti yang sudah kita ketahui:
Pada pewarisan, kita bisa mewariskan atribut dan method dari class induk ke class anak.
Class anak akan memiliki nama method yang sama dengan class induk dan anak yang lainnya.
Nah! Di sinilah akan terjadi polimorfisme.
Diagram Class Polimorfisme
Class anak akan memiliki nama method yang sama, tapi nanti isi dan parameternya bisa berbeda dari class induk.
Karena si class anak melakukan method overriding (mendindih method) yang diwariskannya.
Polimofirme dinamis juga bisa terjadi saat menggunakan interface.
Diagram Class Polimorfisme
Oh iya, buat kamu yang belum tahu interface..
Interface adalah class kosong yang berisi nama-nama method yang nanti harus diimplementasikan pada class lain. Dalam pengimplementasiannya bisa saja tiap-tiap class akan mengimplementasikan secara berbeda dengan nama method yang sama.
Nah! kelihatan kan bedanya?
Jadi polimorfisme statis hanya terjadi dalam satu class saja.
Sedangkan polimorfisme dinamis terjadi pada saat ada hubungan dengan class lain seperti inheritance.
Oke sekarang mari kita lihat contohnya:

Contoh Program Polimorfisme Dinamis

Contoh program polimorfisme dinamis sebenarnya sudah pernah kita buat pada pembahasan inheritance.
Kita coba bahas lagi ya…
Perhatikan diagram ini:
Diagram polimorfisme inheritance
Pada diagram tersebut, terdapat class BanungDatar yang memiliki tiga subclass, yaitu: PersegiLingkaran, dan Segitiga.
Setiap class memiliki method yang sama yaitu luas() dan keliling(). Akan tetapi method-method ini memiliki isi rumus yang berbeda.
Mari kita coba buat dalam progarm Java…
Buatlah proyek baru di Netbeans,
Membuat Project di Netbeans
Berikan nama ContohPolimorfisme:
Nama proyek
Setelah itu, buat package baru dengan nama bangundatar.
Membuat Package bangun datar
Buat class baru di dalam package bangundatar. Caranya, klik kanan lalu pilih New Java Class.
Membuat class baru di Netbeans
Buatlah class baru dengan BangunDatar, kemudian isi dengan kode berikut:
package bangundatar;

public class BangunDatar {
    float luas(){
        System.out.println("Menghitung luas bangun datar");
        return 0;
    }
    
    float keliling(){
        System.out.println("Menghitung keliling bangun datar");
        return 0;
    }
}
Berikutnya buat class lagi dengan nama Persegi dan isi kodenya seperti ini:
package bangundatar;

public class Persegi extends BangunDatar{
    int sisi;
    
    public Persegi(int sisi) {
        this.sisi = sisi;
    }
    
    @Override
    public float luas() {
        return this.sisi * this.sisi;
    }
    
    @Override
    public float keliling(){
        return this.sisi * 4;
    }
}
Berikutnya buat class Segitiga dengan isi sebagai berikut:
package bangundatar;

public class Segitiga extends BangunDatar{
   int alas;
   int tinggi;

    public Segitiga(int alas, int tinggi) {
        this.alas = alas;
        this.tinggi = tinggi;
    }
   
    
   @Override
   public float luas(){
       return this.alas * this.tinggi;
   }
}
Berikutnya buat class Lingkaran dengan isi sebagai berikut:
package bangundatar;

public class Lingkaran extends BangunDatar {
    int r;

    public Lingkaran(int r) {
        this.r = r;
    }
    
    @Override
    public float luas(){
        return (float) (Math.PI * r * r);
    }
    
    @Override
    public float keliling(){
        return (float) (2 * Math.PI * r);
    }
    
}
Terakhir, buat class Main dengan isi sebagai berikut:
package bangundatar;

public class Main {
    public static void main(String[] args) {
        
        BangunDatar bangunDatar = new BangunDatar();
        Persegi persegi = new Persegi(4);
        Segitiga segitiga = new Segitiga(6, 3);
        Lingkaran lingkaran = new Lingkaran(50);
        
        // memanggil method luas dan keliling
        bangunDatar.luas();
        bangunDatar.keliling();
        
        System.out.println("Luas persegi: " + persegi.luas());
        System.out.println("keliling persegi: " + persegi.keliling());
        System.out.println("Luas segitiga: " + segitiga.luas());
        System.out.println("Luas lingkaran: " + lingkaran.luas());
        System.out.println("keliling lingkaran: " + lingkaran.keliling());
    }
}
Sekarang kita sudah punya lima class di dalam package bagnundatar.
Class di dalam package bangundatar
Class yang bisa dijalankan hanyalah class Main, karena ia memiliki method main.
Untuk menjalankannya, silahkan klik kanan pada class main.. lalu pilih Run File.
Maka hasilnya:
Contoh program polimorfisme di Java

Mau Contoh Lagi?

Oke, di contoh yang kedua ini.. kita akan membuat aplikasi untuk mengirim notifikasi dengan Interface.
Ini adalah bentuk diagramnya:
Diagram Class Polimorfisme
Mari kita coba buat..
Pada proyek ContohPolimorfisme, buatlah package baru dengan nama notifikasi.
Package notifikasi
Setelah itu, di dalam package notifikasi.. buatlah class baru dengan nama InterfaceNotifikasi dan isi kodenya seperti ini:
package notifikasi;

public interface InterfaceNotifikasi {
    void sendMessage(String receiver, String content);
}
Berikutnya, di dalam package yang sama.. buatlah class baru dengan nama EmailNotification dan isi seperti ini:
package notifikasi;

public class EmailNotification implements InterfaceNotifikasi{

    @Override
    public void sendMessage(String receiver, String content) {
        System.out.println("Mengirim email ke " + receiver + " dengan isi:");
        System.out.println(content);
    }
    
}
Berikutnya, di dalam package yang sama.. buatlah class baru dengan nama SMSNotification dan isi seperti ini:
package notifikasi;

public class SMSNotification implements InterfaceNotifikasi{

    @Override
    public void sendMessage(String receiver, String content) {
        System.out.println("Mengirim SMS ke " + receiver + " dengan isi:");
        System.out.println(content);
    }
    
}
Berikutnya, di dalam package yang sama.. buatlah class baru dengan nama PushNotification dan isi seperti ini:
package notifikasi;

public class PushNotification implements InterfaceNotifikasi{

    @Override
    public void sendMessage(String receiver, String content) {
        System.out.println("Mengirim Push Notif ke " + receiver + " dengan isi:");
        System.out.println(content);
    }
    
}
Terakhir, buatlah class Main di dalam package notifikasi dan isi kodenya seperti ini:
package notifikasi;

public class Main {

    public static void main(String[] args) {
        String emailPenerima = "dian@petanikode.com";
        String nomerHp = "+628111111111";
        String mobileId = "android-123456";

        EmailNotification emailNotif = new EmailNotification();
        SMSNotification smsNotif = new SMSNotification();
        PushNotification pushNotif = new PushNotification();

        String message = "Tutorial Polimorfisme sudah terbit di Petani Kode, cek sekarang di https://www.petanikode.com/java-oop-polimorfisme";
        
        emailNotif.sendMessage(emailPenerima, message);
        smsNotif.sendMessage(nomerHp, message);
        pushNotif.sendMessage(mobileId, message);
    }
}
Hasilnya:
Aplikasi notifikasi dengan polimorfisme
Walapun semua isi method sendMessage() sama, namun nanti pada implementasinya di dunia nyata akan beda-beda.
EmailNotification biasanya akan mengirim email dengan metode SMTP atau API. Sedangkan SMS bisa melalui SMS Gateway.
Begitu juga dengan PushNotofication, nanti akan menggunakan API yang berbeda.
Nah itulah contoh polimorfisme dengan interface..
Source code dari tutorial ini, bisa kamu download di Github

Apa Selanjutnya?

Polimorfisme tidak sulit dipahami.
Intinya:
“Bentuk method-nya beda-beda, tapi namanya sama.”

Komentar

Postingan populer dari blog ini

PROSEDUR PEMBUATAN INDIKATOR

PROSEDUR PEMBUATAN INDIKATOR 1. EBT (ERIOCROM BLACK T) Timbang 100 mg serbuk zat warna EBT ,10 gram Kristal NaCl atau Kristal Na2SO4 an hidrat. Kedua zat tersebut dicampur dengan cara menggerus didalam mortar sampai halus dan merata. Penggunaannya 100 mg (seujung spatel ) untuk satu kali titrasi. 2. Merah metil Larutkan 25 mg metil P dengan 0,95 ml larutan Natrium hidroksida 0,05 N dan 5 ml etanol 95 % setelah larut sempurna, tambahkan etanol 50 % secukupnya hingga 250,0 ml 3. Jingga metil Larutkan jingga metil P 0,04 % b/v dalam etanol 20 % 4. BTB Larutkan 100 mg biru brom timol P dengan 3,2 ml Natrium Hidroksida 0,05 N dan 5 ml etanol 90 % ,setelah larut sempurna tambahkan etanol 20 % secukupnya hingga 250,0 ml. 5. MUREXIDE Haluskan 100 mg serbuk murexide dengan 10 gram KNO3 atau 10 gram NaCl . Pada pemakaiannya 100 gram serbuk murexide tiap volume 150 sampai 200 ml. 6. Larutan indicator Fenolftalein 0,035 %. Timbang ± 0,035 gram Fenolftalein ,lar

LARUTAN PADA KIMIA ANALITIK KUANTITATIF

LARUTAN PADA KIMIA ANALITIK KUANTITATIF 1.        LARUTAN NaOH 0,1  N                 4 gram NaOH dalam 1 Liter 2.        LARUTAN HCl 0,1 N HCl pekat = 37% HCl pekat = 12 M = 12 N                 8,33 mL HCl pekat = 1 Liter 0,1 N 3.        LARUTAN H 2 SO 4 0,1 N H 2 SO 4 pekat = 96 % H 2 SO 4 pekat = 17,63 M = 18 M = 36 N        2,78 mL H 2 SO 4 pekat = 1 liter 0,1 N 4.        LARUTAN CH 3 COOH 0,1 N CH 3 COOH pekat = 99,5 % CH 3 COOH pekat = 17 M = 17 N        5,88 mL CH 3 COOHpekat = 1 liter 0,1 N 5.        LARUTAN Na 2 S 2 O 3 0,1 N             26 gram Na 2 S 2 O 3 dengan 0,2   g Na 2 CO 3 dilarutkan dalam air bebas CO 2 segar sampai volume 1000 ml 6.        LARUTAN KIO 3 0,1 N             3 , 5 g KIO 3 encerkan dengan air hingga 1000 m L 7.        LARUTAN KMnO 4 0,1 N      3,3 gram Kalium Permanganat P adat dilarutkan dalan air hingga 1000 ml 8.        LARUTAN IODIUM (I 2 ) 0,1 N 12,69 gram I 2 P adat ke dalam la

C++ #03 Mengenal Fungsi Input dan Output

Belajar C++ #03: Mengenal Fungsi Input dan Output pada C++ #  C++ Pada dasarnya, program komputer hanya terdiri dari tiga bagian: Input  adalah sesuatu data yang kita masukan ke dalam program. Input biasanya diambil dari perangakat inputan seperti keyboard, mouse, kamera, microphone, dll. Proses  adalah langkah-langkah yang harus dilakukan program untuk menghasilkan output. Output  adalah informasi yang dihasilkan setelah dilakukan proses. Output biasanya ditampilkan ke layar komputer. Pada bahasa pemrograman C++, terdapat beberapa fungsi dasar untuk menampilkan output dan mengambil input. Apa saja itu? Mari kita bahas… Fungsi Output pada C++ C++ memiliki empat fungsi dasar untuk menampilkan output: cout  untuk menampilkan teks ke layar; cerr  untuk menampilkan error; clog  untuk menampilkan log; printf()  untuk menampilkan output, fungsi ini dari C; Kita akan fokus memabahas yang dua saja, yakni  cout  dan  printf() . Soalnya  cerr  dan  clog