Capaian dan Indikator
1. Capaian Pembelajaran
Setelah mempelajari bab ini, mahasiswa diharapkan:
- Mengetahui konsep polymorphism dan overriding method
- Mengetahui implemtasi polymorphism dan overrid ing method
2. Indikator
- Mampu menjelaskan konsep polymorphism dan overriding method
- Mampu mengimplementasikan polymorphism dan overriding method di dalam program
Uraian Materi
Saya mempunyai sebuah kata "bisa" dan kata tersebut akan saya gunakan dalam kalimat sebagai berikut:
- a. Praktikan bisa memahami konsep Polymorphism dalam Praktikum Pemrograman Berorientasi Objek
- b. Ular itu mempunyai bisa yang sangat berbahaya
Kata "bisa" pada kalimat pertama memiliki arti dapat atau mampu. Sedangkan kata "bisa" pada kalimat kedua memiliki arti racun. Dalam kalimat di atas, kata yang sama memiliki 2 makna yang berbeda. Itulah salah satu konsep Polymorphism. Untuk lebih jelas mengenai konsep polymorhism, saya akan menjelaskannya pada sub bab berikutnya.
A. Polymorphism
Polymorhism merupakan konsep OOP dimana variable/method dari sebuah kelas,
dipanggil ulang pada kelas turunannya dengan perilaku yang berbeda-beda antar tiap kelas.
Perhatikan contoh gambar berikut ini :
Setiap hewan memiliki suara. Namun suara pada masing-masing hewan berbeda-beda. Perilaku yang berbeda-beda itulah yang menjadi ciri khas polymorphism. Penggunaan teknik polymorphism dapat diketahui melalui pembuatan instance-of-class pada class Utama.
Seperti halnya gambar di atas, maka pendeklarasian objek yang dibuat (di-instanskan) berasal dari class induknya, yakni class Hewan. Sehingga objek tersebut berbentuk array-of-class.
Penerapan konsep polymorphism dapat dilihat di soal latihan.
Kriteria penggunaan Polymorphism
Dalam penggunaan polymorphism, ada 2 kriteria yang harus dipenuhi, antara lain:
- Method dari kelas turunan yang akan dieksekusi, dipanggil oleh objek dari kelas induk Nama method yang digunakan pada kelas induk harus ditulis ulang (overriding method) pada kelas turunannya, dengan asumsi nama dan tipe data method harus sama
B. Overriding Method
Overriding method adalah proses pendeklarasian ulang nama method pada kelas utama kepada kelas turunannnya, Dalam pembuatan overriding method, nama dan tipe data method harus sama dengan kelas induknya guna pembuatan polymorphism. Untuk lebih jelasnya, akan saya bahas pada soal latihan.
Latihan
Perhatikan gambar di bawah ini!
Buatlah class untuk menghitung Berat Badan Ideal sesuai dengan rancangan gambar diatas! Rumus hitung berat badan ideal adalah sebagai berikut :
Laki-Laki = (tinggi badan(cm)-1 00) kg x 90%
Untuk Perempuan = (tinggi badan( cm)-100) kg x 80%
Tambahkan pula class utama yang digunakan untuk memanggil class Mahasiswa. Ketika class Utama dijalankan, hasilnya akan tampak seperti di bawah ini :
Jawabannya adalah ...
Setelah anda membaca soal tersebut dengan baik dan seksama, langkah pertama yang harus anda lakukan adalah mengidentifikasi class mana yang harus dibuat terlebih dahulu.
Langkah 1:class Manusia (ketikkan script berikut)
a. Setelah anda membuat class Manusia, simpan file tersebut dengan nama Manusia.java.
Di dalam class Manusia, saya juga menyediakan tempat untuk mendeklarasikan variabel, constructor, getter dan method HtgBBI() untuk menghitung berat badan ideal.
b. Mendeklarasi variabel yang dibutuhkan
Setelah kita membuat kerangka class, maka dIperlukan pendeklarasian variabel yang nantinya digunakan sebagai tempat menyimpan data yang bersifat sementara (temporary). Gambar dibawah ini menunjukkan pendeklarasian variabel.
c. Mendeklarasi constructor
Setelah membuat variabel yang dibutuhkan pada class Manusia, langkah selanjutnya anda membuat constructor Manusia. Constructor ini nantinya akan digunakan dalam class Laki_Laki dan class Perempuan. Gambar di bawah ini men unjukkan deklarasi constructor.
Coba perhatikan kembali script yang telah anda buat seperti gambar di atas. Karena terdapat perbedaan deklarasi nama variabel pada class Manusia dan deklarasi variabel pada constructor Manusia, maka keyword this boleh digunakan atau tidak (optional). Untuk lebih jelas mengenai keyword this, anda dapat melihat modul 1.
d. Membuat method getter Setelah membuat constructor, anda tinggal membuat method getter untuk mengambil nilai dari masing-masing variabel. Hal ini bertujuan untuk mengambil nilai dari variabel pada class Manusia yang nantinya akan kita gunakan ke dalam class Laki_Laki maupun class Perempuan. Perlu diketahui pula, bahwa dalam pembuatan variabel pada parameter di method getter, harus sesuai dengan tipe data pada variabel yang dideklarasikan di kelas. Gambar di bawah ini menunjukkan deklarasi getter.
e. Membuat method HtgBBI()
Setelah membuat method getter(), anda tinggal membuat method HtgBBI() yang bertugas untuk menghitung berat badan ideal berdasarkan tinggi badan. Karena di dalam class Manusia, belum terdapat rumus (hanya mendeklarasikan saja) dan meminta nilai balik (return), maka diberikan nilai default 0.0. Gambar d i bawah ini menu njukkan deklarasi method HtgBBI().
Code
class Manusia { //deklarasi variabel private double TinggiBadan; //constructor public Manusia (double TB) { TinggiBadan = TB; } //getter public double getTB() { return TinggiBadan; } //method HtgBBI public double HtgBBI() { return 0.0; } }
Langkah 2: class Laki_ Laki (ketikkan script berikut)
class Laki_laki extends Manusia { //constructor public Laki_laki (double TB) { super(TB); } //Method HtgBBI() merupakan method overidding dari superclass-nya public double HtgBBI() { return (super.getTB()-100)*0.9; } }
Setelah anda membuat class Laki_Laki, simpan file tersebut dengan nama Laki_Laki.java. Di dalam class Laki_Laki, terdapat penggunaan extends yang menunjukkan bahwa class Laki_Laki merupakan turunan dari class Manusia.
Coba perhatikan kembali script yang telah anda buat seperti gambar di atas. Pada constructor Laki_Laki, terdapat keyword "super". Keyword ini akan memanggil constructor Manusia (sesuai isi parameter) yang merupakan class. induk. Sedangkan pada method HtgBBI() dilakukan pendeklarasian kembali (overriding method) sesuai dengan kelas induknya, dimana method HtgBBI() diberi rumus untuk menghitung berat badan ideal laki-laki.
Langkah 3: class Perempuan (ketikkan script berikut)
class Perempuan extends Manusia { //constructor public Perempuan (double TB) { super(TB); } //Method HtgBBI() merupakan method overidding dari superclass-nya public double HtgBBI() { return (super.getTB()-100)*0.8; } }
Setelah anda membuat class Perempuan, simpan file tersebut dengan nama Perempuan.java. Di dalam class Perempuan, terdapat penggunaan extends yang menunjukkan bahwa class Perempuan merupakan turunan dari class Manusia.
Seperti halnya dengan class Laki_Laki, class Perempuan memiliki constructor dan method HtgBBI() yang sama. Perbedaannya terletak pada nama class, nama constructor, dan isi rumus method HtgBBI().
Langkah 4: class Utama (ketikkan script berikut)
a. Membuat kerangka class Utama
Setelah anda membuat class Utama, simpan file tersebut dengan nama Utama.java. Di dalam class inilah, program anda akan dijalankan. Sebagai catatan, dalam pembuatan class di atas, saya sudah menambahkan class BufferedReader (line 6) yang berada pada package java.io.* (line l) yang digunakan untuk menerima inputan user.
b. Membuat instance of class
Setelah anda membuat class Utama, langkah berikutnya yang anda lakukan adalah membuat sebuah objek yang bertipe kelas induknya, yaitu class Manusia. Di sinilah konsep polymorphism digunakan. Karena class Manusia memiliki 2 kelas turunan, maka objek yang kita buat berbentuk array-of class. Untuk itu, diperlukan panjang elemen array guna menampung data, baik yang terdapat pada class Laki_ Laki maupun class Perempuan (dimisalkan panjang elemen adalah 2). Perlu diketahui pula, bahwa panjang elemen array yang diberi nilai 2, bukan berasal dari 2 kelas turunan pada kelas induknya, melainkan karena inputan yang ingin di lakukan adalah sebanyak 2 kali. Data bisa diperoleh dari 2 orang laki-laki , 2 orang perempuan, atau 1 orang laki-laki dan 11 orang perempuan.
c. Mendeklarasikan variable dan perulangan inputan user
Langkah berikutnya adalah mendeklarasikan variabel guna membantu dalam menghitung index array pada objek "m". Selain itu, diperlukan perulangan dalam mengisi inputan user.
Pada line 20, yang berisi "x++;", terdapat proses increment untuk menambah isi+ lpada variable x
d. Membuat inputan yang diisi user
Selanjutnya kita membutuhkan inputan user untuk mengisi data tersebut.
Berikut adalah contoh script-nya.
e. Mengecek inputan user dan mencetak penghitungan berat badan ideal
Setelah membuat inputan user, maka di lakukan pengecekan apakah jenis kelamin yang dipilih adalah laki-laki atau perempuan. Hal ini akan menentukan kelas turunan mana yang akan diakses.
- Line 24: penggunaan method "equals()" untuk mengeceki nputan bertipe String dan String. Sedangkan method "toUpperCase()" digunakan untuk menconvert semua inputan user (baik ditulis dalam huruf kecil atau huruf besar) menjadi huruf besar semua.
- Line 26 dan line 32: menunjukkan penggunaan objek pada kelas turunannya.
Full Coding
import java.io.*; class Utama { public static void main (String[] args) throws Exception { BufferedReader br = new BufferedReader (new InputStreamReader (System.in)); //instance of class Manusia[] m = new Manusia[2]; //deklarasi variabel int x = 0; do { //input System.out.println("User "+(x+1)); System.out.print("Masukkan tinggi badan anda (cm) = "); double t = Double.parseDouble(br.readLine()); System.out.print("Masukkan jenis kelamin anda (L/P) = "); String jk = br.readLine(); //proses + output if (jk.toUpperCase().equals("L")) { m[x] = new Laki_laki(t); System.out.println("Berat badan ideal laki-laki ini anda adalah "+m[x].HtgBBI()); System.out.println(); } else { m[x] = new Perempuan(t); System.out.println("Berat badan ideal perempuan ini anda adalah "+m[x].HtgBBI()); System.out.println(); } x++; }while(x<2); } }
Keterangan program :
Output:
Tugas
- Perhatikan program di bawah ini
// Nama file : Polimorphism.java // Contoh penerapan konsep polimorphism public class Polimorphism{ public static void main(String[ ] args){ cetakObyek(new Balok()); cetakObyek(new PersegiPanjang()); cetakObyek(new BangunDatar()); cetakObyek(new Object()); } public static void cetakObyek(Object obyek){ System.out.println(obyek); } } // Akhir kelas Polimorphism class Balok extends PersegiPanjang{ public String toString(){ return "Mempunyai sisi panjang, lebar dan tinggi"; } } class PersegiPanjang extends BangunDatar{ public String toString(){ return "Mempunyai sisi panjang dan lebar"; } } class BangunDatar extends Object{ public String toString(){ return "Mempunyai berbagai bentuk"; } }
a. Berikan penjelasan tentang program tersebut.
b. Gambarkan skema yang mungkin dibuat
c. Ketikkan program dan lakukan kompilasi, apakah terjadi kesalahan syntax? Jika masih ada yang salah, silakan dibenarkan
d. Apa luarannya