MODUL XI,PBO 1

POLIMORPHISME (BERPERAN GANDA)
 

TUJUAN:
Membuat dan menjelaskan tentang Polimorphisme
Penggunaan polimorphisme dalam praktek
TEORI SINGKAT:
Polimorphisme adalah peran ganda yangdapat dilakukan oleh suatu method.
PELAKSANAAN PRAKTIKUM:
Listing program 1. Titik.java
public class Titik{
     protectedint x;
     //ataugunakan public int x;
     protectedint y;
     //ataugunakan public int y; jika menggunakan private akan error tidak bisa diaksesoleh kelas turunannya
//konstruktor tanpa argumen
     publicTitik(){
       System.out.println(“KonstruktorTitik tanpa argumen”);
       x=0;
       y=0;
     }
//Konstruktor dengan argumen x dan y
     publicTitik(int x, int y){
     System.out.println(“KonstruktorTitik dengan Argumen”);
       this.x=x;
       this.y=y;
     }
//set kordinator Titik: x dan y
     publicvoid setKoordinat(int xx, int yy){
       x=xx;
       y=yy;
     }
//ambil koordinat x
     publicint getX(){
       returnx;
     }
//ambil koordinat y
     publicint getY(){
       returny;
     }
//Cetak ke layar
     publicvoid cetak(){
       System.out.println(“X= ” + x + “, y = “+ y);
     }
}
Pada listing di atas ada beberapa konstruktor danmethod. Konstruktor non parametrik maupun konstruktor dengan argumen/parameteryang dapat dimanfaatkan untuk melakukan pengisian atau mengkonstruksi valuedari suatu variabel yang didefinisikan. Konstruktor tersebut yang akan menjadisuatu indikator pemanggilan di kelas main. Dengan konstruktor ini juga nantinyakita dapat menentukan suatu objek dan dapat mengetahui bagaimana suatu methoddapat dipanggil dan bagaimana kita dapat mengetahui suatu method dapat bersifatpolimorphisme.
Listingprogram Lingkaran.java
//Class Lingkaran mewarisi Titik
//Pusat lingkaran 9x,y) diambil dari class Titik
public class Lingkaran extends Titik{
protected double radius;//radius merupakanjari-jari lingkaran
//Konstruktor tanpa argumen
public Lingkaran(){
     super();
     radius=0.0;
     }
//Konstruktor argumen radius
public Lingkaran(int x, int y, double rad){
     super(x,y);
     setRadius(rad);
     }
//set radius dari Lingkaran
     publicvoid setRadius(double rad){
       radius=(rad>=0.0? rad :0.0);
     }
//ambil radius dari Lingkaran
     publicdouble getRadius(){
       returnradius;
     }
//hitung luas Lingkaran
     publicdouble luas(){
       returnMath.PI * radius * radius;
     }
//cetakhasil ke layar dengan override
     publicvoid cetak(){
       System.out.println(“Pusat  = [“+getX() +”,”+getY()+”]”);
       System.out.println(“Radius= “+radius);
       System.out.println(“Luas   = “+luas());
     }
}
Dapat listing program lingkaran ini kita membuatmethod sama dengan method yang berada pada kelas titik yaitu method cetak().Hal ini suatu yang aneh jika tidak dipahami bahwa java mempunyai kemampuanpolimorphisme atau fungsi ganda. Dengan kata lain bagaimana java mempunyaikemampuan untuk membedakan method cetak mana yang akan dijalankan. Demikianjuga  kita membuat method cetak() padakelas PersegiPanjang.
Listing  program PersegiPanjang.java
//class PersegiPanjang mewarisi Titik
//variabel protected x, y pada class Titik menjadi
//koordinat pojok kiri atas class PersegiPanjang
//class ini tinggal menambahkan x2, y2 sebagai
//koordinat pojok kanan bawah PersegiPanjang
public class PersegiPanjang extends Titik{
     publicint x2, y2;
     publicPersegiPanjang(){
       super();
       setPojokKananAtas(0,0);
     }
     publicPersegiPanjang(int x, int y, int x2, int y2){
       super(x,y);
       setPojokKananAtas(x2,y2);
     }
     publicvoid setPojokKananAtas(int x2, int y2){
       this.x2=x2;
       this.y2=y2;
     }
     @Override
     publicvoid cetak(){
       System.out.println(“x1,y1)  = (“+x+”,”+y+”)”);
       System.out.println(“x2,y2)  = (“+x2+”,”+y2+”)”);
       System.out.println(“Luas     = “+luas());
     }
     publicdouble luas(){
       return(x2-x)*(y2-y);
     }
}
Pada tiga buah kelas di atas akan ditampilkan padamethod void main di bawah ini dengan melakukan pemanggilan terhadapmethod-method yang berada dalam kelas-kelas di atas. Namun dengan catatan kitatidak akan dapat memanggil kelas-kelas tersebut apabila dalam listing tidakkita tambahkan kata @Overriding. Dengan statemen @Overriding kompiler akanmendeteksi apakah ada method yang sama dalam kelas-kelas yang terhubung baik disuper kelas maupun pada sub kelasnya. Apabila ada statemen @Overriding tetapitidak ada nama method yang sama maka kompiler akan berjalan sukses namun padasaat dieksekusi pada kelas main akan terjadi error yang menyatakan bahwa tidakditemukan method yang sama.
Dengan memanggil konstruktor berparameter kitadapat menciptakan objek yang kita ingikan sehingga dapat melakukan pemanggilanmethod. Walaupun nama method tersebut sama namun objek masih bisa membedakandengan adanya konstruktor berparameter. Banyaknya parameter yang digunakan,tipe parameter yang digunakan masih dapat membedakan sehingga method cetak()mana yang akan diakses. Dan hasilnya dapat dilihat pada tampilan gambar padasaat menjalankan clas TestBentuk ini.
Membuatprogram TestBentuk.java
public class TestBentuk{
     publicstatic void main(String[]args){
       Titiktt1=new Titik(5,6);
       tt1.cetak();
       Lingkaranling1=new Lingkaran(12,18,6.4);
       ling1.cetak();
       PersegiPanjangpp1=new PersegiPanjang(4,5,10,9);
       pp1.cetak();
     }
}
HasilProgram:
Ketikaprogram dipanggil dengan:
public class TestBentukModif{
     publicstatic void main(String[]args){
       Titiktt1=new Titik(5,6);
       tt1.cetak();
       Titiktt2=new Lingkaran(12,18,6.4);
       tt2.cetak();
       Titiktt3=new PersegiPanjang(4,5,10,9);
       tt3.cetak();
     }
}
Bagaimana dengan proses pembuatan objek di atas,kelas yang dipanggil berbeda-beda tidak seperti biasanya. Pola yang biasadipakai adalah nama_kelas [nama objek]=new nama_kelas (parameter). Sedangkan disini kita melihat bahwa nama kelas lain dipanggil pada kelas yang berbeda,yaitu kelas Titik dipakai untuk menciptakan objek kelas lingkaran. Yang dapatmembedakan adalah banyaknya parameter. Dan Kelas Titik juga digunakan untukmenciptakan objek tt3 pada kelas PersegiPanjang, inipun hanya dapat dibedakandalam dari bentuk dan jumlah parameter. Pada kelas Titik ada dua buahparameter, pada kelas Lingkaran ada 3 buah parameter dan pada kelasPersegiPanjang ada 4 buah kelas parameter.
Apabila disimak maka fungsi tersebut dikenalikanoleh @Overriding statemen yang memperbolehkan adanya method yang sama. Dengan adanya method yang sama maka akanmenyederhanakan kita dalam melakukan pengingat dalam pemanggilan. Hanya sajakita memang harus tahu karakter parameter yang digunakan agar kita dapatmengetahui method cetak() mana yang akan kita gunakan. Karena java hanyamelihat dari ciri-ciri parameter yang digunakan. Sebagai contoh di atas diaakan mengeksekusi method cetak() yang berada dalam kelas Titik ketika hanyadiisi dengan 2 parameter. Kemudia dia akan mengeksekusi method cetak() adakelas Lingkaran apabila diisi dengan 3 buah parameter (dua tipe integer dansatu buah parameter dapat diisi dengan double). Dan java akan mengindikasibahwa method cetak() yang digunakan adalah method cetak() pada kelasPersegiPanjang apabila dia melihat adanya parameter yang berjumlah 4 buahinteger.
Sedangkandi bawah ini adalah contoh penciptaan yang tidak benar, dimana kita menggunakanobjek untuk menciptakan objek lain. Mungkinkah?
Modifikasikelas TestBentukModif sebagai berikut:
public class TestBentukModif{
     publicstatic void main(String[]args){
       Titiktt1=new Titik(5,6);
       tt1.cetak();
       Titiktt2=new Lingkaran(12,18,6.4);
       tt2.cetak();
       Titiktt3=new PersegiPanjang(4,5,10,9);
       pp1.cetak();
     }
}
Modifikasilain untuk menampilkan:
public class TestBentukModif{
     publicstatic void main(String[]args){
       Titiktt1=new Titik(6,4);
       tt1.cetak();
       Titiktt2=new Lingkaran(14,13,12.4);
       tt2.cetak();
       tt1=newPersegiPanjang(2,23,8,9);
       pp1.cetak();
     }
}
HasilRunning Program:
D:\MY Document\Materi Kuliah\Semester 2\ObjectOriented Programming 1\Modul11-Polimorphisme\TestBentukModif.java:8: cannotfind symbol
symbol  :variable pp1
location: class TestBentukModif
       pp1.cetak();
       ^
1 error
Tool completed with exit code 1
Pada listing kelas pemanggilan TestBentukModif di atassemua menimbulkan error yang sama yaitu sama-sama menyamaikan pesan bahwa tidakditemukan variabel ppi yang terdifinisi. Namun apabila kita memasukkan salahsatu objek hasil bentukan dari kelas yang sudah ada di atasnya maka objektersebut dimodifikasi menjadi objek sesuai dengan objek yang baru sajadiintaniasikan. Sebagaimana di bawah ini ketika pp1 kita ganti menjadi tt1padahal tt1 pada awal program sudah menjadi objek dari kelas Titik. Tetapiketika diinstaniasikan lagi menjadi objek berparameter empat bilangan inter diadiinstaniasi menjadi objek baru dan mengeluarkan hasil dari cetak() pada kelasPersegiPanjang.
HasilRunning Program:
public class TestBentukModifLain{
     publicstatic void main(String[]args){
       Titiktt1=new Titik(6,4);
       tt1.cetak();
       Titiktt2=new Lingkaran(14,13,12.4);
       tt2.cetak();
       tt1=newPersegiPanjang(2,23,8,9);
       tt1.cetak();
     }
}
Membuatkelas tabung dengan override luas dan cetak
//kelas tabung turunan kelas lingkaran
public class Tabung extends Lingkaran{
     privatedouble tinggi;
     //Konstruktordengan argumen x, y, radius dan tinggi
     publicTabung(int x, int y, double radius, double tinggi){
       this.x=x;
       this.y=y;
       this.radius=radius;
       this.tinggi=tinggi;
     }
     //Methodluas yang mengoverride method luas() pada kelas Lingkaran
     @Override
     publicdouble luas(){
       returnMath.PI * radius * radius;
     }
     publicdouble volume(){
       returnMath.PI * radius * radius*tinggi;
     }
     //Methodcetak yang mengoverride method cetak() pada kelas Lingkaran
     @Override
     publicvoid cetak(){
            System.out.println(“Pusat  = [“+getX() +”,”+getY()+”]”);
            System.out.println(“Radius= “+tinggi);
            System.out.println(“Radius= “+radius);
            System.out.println(“Luas   = “+luas());
            System.out.println(“volume= “+volume());
     }
}
Membuatkelas pemanggil an TestBentuk.java dengan method main:
public class TestBentuk{
     publicstatic void main(String[]args){
       Titiktt1=new Titik(5,6);
       tt1.cetak();
       Titiktt2=new Lingkaran(12,18,6.4);
       tt2.cetak();
       Titiktt3=new PersegiPanjang(4,5,10,9);
       tt3.cetak();
       Titiktt4=new Tabung(4,5,6,7);
       tt4.cetak();
       Lingkaranling=new Tabung(7,6,5,4);
       ling.cetak();
     }
}
HasilRunning program:
TUGAS:
publicclass Balok extends PersegiPanjang{
     public int z;
     public Balok(){
       System.out.println(“Kelas Balok tanpaparameter”);
       this.x=x;
       this.y=y;
       this.x2=x2;
       this.y2=y2;
       this.z=z;
     }
     public Balok(int x, int y, int x2, int y2,int z){
       System.out.println(“Kelas Balok denganparameter”);
       this.x=x;
       this.y=y;
       this.x2=x2;
       this.y2=y2;
       this.z=z;
     }
     //Panjang = x2-x1; Lebar=y2-y; tinggi=z;
     @Override
     public double luas(){
       return (x2-x) * (y2-y);
     }
     //Panjang= x2-x1; Lebar=y2-y; tinggi=z;
     publicdouble volumeBalok(){
       return luas() * z;
     }
     public void cetak(){
       volumeBalok();
       System.out.println(“Diketahui denganadanya 2 buah titik, yaitu :”);
       System.out.println(“Pojok Kiri Atas (x1,y1) di titik[“+x+”,”+y+”]”);
       System.out.println(“PojokKanan Bawah (x2,y2) di titik [“+x2+”,”+y2+”] Maka :”);
       System.out.println(“Panjang= “+(x2-x));
       System.out.println(“Lebar   = “+(y2-y));
       System.out.println(“Tinggi  = “+z);
       System.out.println(“Volume  = “+volumeBalok());
     }
}
Membuat kelas pemanggilan:
publicclass TestBalok{
     public static void main(String[]args){
       Balok blk1=new Balok();
       blk1.cetak();
       Balok blk2=new Balok(3,8,4,12,5);
       blk2.cetak();
       Titik blk3=new Balok(2,4,9,18,10);
       blk3.cetak();
     }
}
Hasil running:
KESIMPULAN:
  1. Sifat polimorphisme method dapat diciptakan dengan adanya method dengan nama sama di dalam kelas yang berbeda tetapi mempunyai fungsi yang berbeda.
  2. Penggunaan method yang mempunyai polimorhisme ini kita harus jeli biasanya method ini mendefinisikan fungsinya melihat dari karakter parameter yang digunakan.

Method-method ini dapat dipanggil denganmenciptakan objek dari kelas-kelas yang berhubungan khususnya dari kelas super.Dengan kelas super ini objek dari kelas turunannya dapat diciptakan. Sekaligusdapat digunakan sebagai media pemanggilan method-method yang polimorhisme.

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s