19 Februari 2012

Pemrograman Berorientasi Obyek: Polimorphisme

Definisi dari polimorphisme mengambil dari prinsip ilmu biologi, yang mana artinya sebuah spesies atau organisme bisa memiliki bentuk dan tahapan yang berbeda. Prinsip ini bisa juga diterapkan pada pemrograman berorientasi obyek, misalnya pada bahasa pemrograman Java. Subclass dari sebuah class bisa mendefinisikan metode mereka sendiri yang unik, namun tetap berbagi beberapa metode yang sama dengan superclass. Pada bahasa pemrograman Java konsep polimorphisme dapat dilakukan dengan dua fitur, yaitu Overriding dan Overloading


Overriding

Dengan overriding, kita berarti menggantikan metode yang ada di superclass dengan metode yang ada di subclass. Seperti yang kita ketahui, subclass memiliki semua yang ada di superclass. Akan tetapi, terkadang kita ingin metode yang diturunkan dari superclass, memberikan hasil yang berbeda pada subclass. Kita bisa mendefinisikan ulang metode yang diturunkan dari superclass di subclass. Metode tersebut memiliki nama, parameter, dan tipe data pengembalian yang sama dengan superclass, tetapi hasil pengembalian yang berbeda dengan superclass. Itulah yang disebut dengan overriding, berikut ini adalah contoh programnya:

class Mamalia {
 public void habitat() {
  System.out.println("Kami hidup di darat");
 }
}

class Paus extends Mamalia {
 public void habitat() {
  System.out.println("Kami hidup di laut");
 }
}

class UjiOverriding {
 public static void main(String[] args) {
  Paus ikanBesar = new Paus();
  ikanBesar.habitat();
                Mamalia kakiEmpat = new Mamalia();
                kakiEmpat.habitat();
 }
}
Cobalah, dan perhatikanlah hasilnya.


Overloading

Kadang kita ingin dalam satu class terdapat sebuah metode yang sama, tapi bisa memberikan nilai pengembalian yang berbeda tergantung dari input parameter yang diberikan. Dibandingkan membuat banyak metode, dengan banyak nama, akan lebih baik bila kita membuat satu nama metode, dan melakukan overload terhadap metode tersebut. Tidak seperti overriding yang menggantikan metode superclass dengan metode subclass, dengan overloading kita justru menambah variasi input dan output suatu metode tanpa menghapus metode asal. Kita bisa melakukan overloading pada metode baru, yang bukan metode turunan dari superclass.

Berikut ini adalah contoh overload terhadap sebuah metode.

class BangunDatar {
 public void gambarBangunDatar() {
  System.out.println("Data tidak lengkap, masukan parameter");
 }
 
 public void gambarBangunDatar(int r) {
  System.out.println("Lingkaran: Jari-jari = " + r);
 }
 
 public void gambarBangunDatar(int sisi1, int sisi2, int sisi3) {
  System.out.println("Segitiga: sisi1 = " + sisi1 + ", sisi2 = " + sisi2
                      + ", sisi3 = " + sisi3);
 }
 
 public void gambarBangunDatar(int sisi1, int sisi2, int sisi3, int sisi4) {
  System.out.println("Segiempat: sisi1 = " + sisi1 + ", sisi2 = " + sisi2
          + ", sisi3 = " + sisi3 + ", sisi4 = " + sisi4);
 }
}

class UjiOverloading {
 public static void main(String[] args) {
  BangunDatar gambar = new BangunDatar();
  gambar.gambarBangunDatar();
  gambar.gambarBangunDatar(7);
  gambar.gambarBangunDatar(3,4,5);
  gambar.gambarBangunDatar(5,5,5,5);
 }
}
Selain metode, kita juga bisa melakukan overloading pada konstruktor class. Silahkan coba propgram di atas dan perhatikan hasilnya.



Tidak ada komentar:

Posting Komentar