MODUL IV,PBO 1

            OVERLOADING

 

TUJUAN:
·        Membuat dan menjelaskan tentang methodoverloading
·        Menggunakan method overloading dari kelas diJava
TEORI SINGKAT:
OverloadingMethods
Overloading method mengijinkan sebuah method dengan nama yangsama namun memiliki parameter yang berbeda sehingga mempunyai implementasi danreturn value yang berbeda pula.
Overloading method memiliki property sebagai berikut:
1.       Namayang sama
2.       Parameteryang berbeda
3.       Nilaikembalian (return) bisa sama ataupun berbeda.
PELAKSANAAN PRAKTIKUM:
Praktik 1. Membuat method overloadingdengan kelas SegiEmpat
public class SegiEmpat{
      //daftarfield
      doublepanjang;
      doublelebar;
      publicvoid setPanjang(double panjang){
            this.panjang=panjang;
            }
      publicvoid setLebar(double lebar){
            this.lebar=lebar;
            }
      //LuasSegiempat method 1. Tanpa parameter
      publicdouble luas(){
            return(this.panjang * this.lebar);
            }
      //LuasSegiempat method 2. Dengan dua parameter double
      publicdouble luas(double panjang, double lebar){
            return(this.panjang * this.lebar);
            }
      //LuasSegiempat method 3. Dengan dua parameter Integer
      publicint luas(int panjang, int lebar){
            return(panjang * lebar);
            }
      //LuasSegiempat method 4. Dengan tanpa parameter Integer
      publicint luas(int sisi){
            return(sisi * sisi);
            }
}
                ProgramtestSegiEmpat1.java
public class TestSegiEmpat1{
       publicstatic void main(String args[]){
              SegiEmpatsegi4=new SegiEmpat ();
              segi4.setPanjang(10);
              segi4.setLebar(20);
              System.out.println(“HasilHitungan Luas Segiempat”);
              System.out.println(“=====================================”);
              System.out.println(“Panjang    : “+segi4.panjang);
              System.out.println(“Lebar      : “+segi4.lebar);
              System.out.println(“Luas1     : “+segi4.luas());
              System.out.println(“Luas2     : “+segi4.luas(2.6,3.7));
              System.out.println(“Luas3     : “+segi4.luas(5,10));
              System.out.println(“Luas4     : “+segi4.luas(15));
       }
}
Pembahasan Praktikum:
Kelas SegiEmpat adalah sebuah kelas yang berisi beberapamethod yang berfungsi untuk melakukan hitungan luas sebuah segi empat. Padapenghitungan segi empat kita dapat melakukan dengan berbagai jenis tipe bilangan.Kita dapat menggunakan bilangan bulat sebagai ukuran panjang dan lebarnya, ataukita dapat menggunakan bilangan pecahan atau mungkin campuran, panjang dengannilai bilangan bulat sedangkan lebarnya dengan bilangan pecahan atau sebaliknyajuga. Agar di dalam memanggil method atau dalam penghitungan luas sebuah segiempat tidak harus melakukan pemanggilan beberapa method dengan kata lain cukupkita memanggil satu method saja tetapi dengan tipe data yang dapat berbeda-bedamaka kita menggunakan nama yang sama. Inilah yang disebut method overloading,dimana dua method atau lebih ini mempunyai nama yang sama tetapi dengan tipeparameter yang berbeda atau jumlah parameter yang berbeda pula. Sebagai contohprogram di atas, kita melakukan pemanggilan method dengan nama yang sama tetapiakan menghasilkan nilai yang berbeda-beda. Pada luas 2 nilainya sama denganluas 1 yaitu 200, dikarenakan method setter yang digunakan telah mendefinisikanvalue dan tidak dapat diubah
Hasil Running:
Lain halnya ketika sedikitkita ubah program menjadi berikut:
public classTestSegiEmpat1{
     public static void main(String args[]){
       Segiempat segi4=new Segiempat ();
       segi4.setPanjang(4.5);
       segi4.setLebar(3.2);
       System.out.println(“Hasil HitunganLuas Segiempat”);
       System.out.println(“=====================================”);
       System.out.println(“Panjang    : “+segi4.panjang);
       System.out.println(“Lebar      : “+segi4.lebar);
       System.out.println(“Luas 1     : “+segi4.luas());
       System.out.println(“Luas 2     : “+segi4.luas(3.1,10.1));
       System.out.println(“Luas 3     : “+segi4.luas(5,10));
       System.out.println(“Luas 4     : “+segi4.luas(15));
     }
}
Hasil Running Program:
Dapatkita lihat hasil dari kelas TestSegiEmpat1 di atas setelah diubah menghasilkannilai Luas 1 dan nilai luas 2 tidak lagi sama karena default setter dangetternya menggunakan variable double maka ketika kita isi dengan nilai pecahanyang akan dipanggil adalah method luas nomor 1 dengan variable this.panjang danthis.lebarnya. Sedangkan pada waktu variable luas 2 diisi dengan nilai (3,10)maka yang akan dipanggil sebenarnya adalah method luas ke 3 yang mempunyainilai value integer. Untuk itu agar menghasilkan nilai sebagaimana hasil diatasmaka ada sedikit kesalahan yang kami lakukan yaitu dengan menghilangkanthis.panjang dan this.lebar pada return value luas 2, sehingga menjadi:
      //LuasSegiempat method 2. Dengan dua parameter double
      publicdouble luas(double panjang, double lebar){
            return(panjang * lebar);
            }
Dengandemikian yang terbaca pada method itu bukan lagi hasil setPanjang dan setLebar,namun diperoleh dari pengisian instan pada pemanggilan method segi4.luas(3.1,10.1).
b.            Programtest 2
importjava.util.Scanner;
public classTestSegiEmpat2{
     public static void main(String[]args){
     Scanner masuk=new Scanner(System.in);
     System.out.println(“Menghitung LuasSegiempat”);
     System.out.println(“=================================”);
     System.out.print(“Masukkan Panjang :”);
     double pj=masuk.nextDouble();
     System.out.print(“Masukkan Lebar   : “);
     double lb=masuk.nextDouble();
     Segiempat segi4=new Segiempat ();
     segi4.setPanjang(pj);
     segi4.setLebar(lb);
     System.out.println(“Luas             : “+segi4.luas(pj,lb));
     System.out.println(”  “);
     System.out.println(“Menghitung LuasBujur Sangkar”);
     System.out.println(“=================================”);
     System.out.print(“Masukkan Sisi      : “);
     int sisi=masuk.nextInt();
     Segiempat Bujursangkar=new Segiempat ();
     System.out.println(“Luas Bujur Sangkar: “+segi4.luas(sisi));
     }
}
Hasil Running:
Pembahasan Praktikum pada test2:
Pada program test ke dua di atas ada satu kelemahanyaitu karena pada penghitungan luas bujur sangkar apabila menggunakan bilanganpecahan akan terjadi error, sehingga perlu dimodifikasi dengan cara menambahkansatu method luas overloading lagi variable double agar dapat menjadialternative bagi penyelesaian masukan berupa bilangan pecahan.
Selain itu kita juga harus mengubah terlebih dahulupemanggilan instan variable sisi yang dimasukkan dengan keyboard dengan tipe doublejuga. Karena apabila tidak diganti double dan masih tetap integer maka padasaat memasukkan angka pecahan program langsung akan mengalami error. Modifikasisebagai berikut:
     System.out.print(“Masukkan Sisi      : “);
     Daouble sisi=masuk.nextDouble();
Sedangkan pada kelasSegiempat perlu ditambah satu method luas overloading sebagaimana dibawah:
     //Luas Segitiga method 5. Dengan tanpaparameter Integer
     public double luas(double sisi){
       return (sisi * sisi);
       }
Sehingga menghasilkan keluaran sebagaimana di bawahini:
Praktik 3. Menggunakan method overloading darikelas di Java.
public class TestMax{
      publicstatic void main(String []args){
            System.out.println(“Antara5 dan 8       adalah :”+Math.max(5,8));
            System.out.println(“Antara-50L dan -80L adalah : “+Math.max(-50L,-80L));
            System.out.println(“Antara3.6 dan 60.3  adalah :”+Math.max(3.6,60.7));
            System.out.println(“Antara1.5 dan 1.7   adalah :”+Math.max(1.5f,1.7f));
      }
}
HasilRuning:
Pembahasan Praktek 3.
Penggunaan method overloading pada kelas Mathsebagaimana listing program di atas adalah menunjukkan bahwa dimana method yangdigunakan adalah method yang sesuai dengan tipe data yang digunakan. Ataudengan kata lain bahwa method overloading dalam memilih method yang digunakanadalah dengan cara melihat referensi tipe data yang didefinisikan. Paca contohdi atas Math.max(5,8) maka akan memilih prosedur Math.max(int, int), sedangkanpada Math.max(-50L,-80L) maka menggunakan Math.max(loang, long), padaMath.max(3.6,60.7) maka menggunakan Math.max(double, double)), kemudianMath.max(1.5,1.7) maka menggunakan Math.max(float, float). Selain itu adakemungkinan method Math.max dapat difungsikan pada tipe data gabungan misalkan(float, int).
       System.out.println(“Antara 1.5 dan 1.7   adalah : “+Math.max(1.5f,-5));
Maka akan tampil sebagaimana di bawah:
LATIHAN:
  1. Membuat kelas SegiempatLatihan modifikasi dari kelas segiempat yang ditambah method keliling:
public class SegiempatLatihan{
      //daftar field
      double panjang;
      double lebar;
      public void setPanjang(doublepanjang){
            this.panjang=panjang;
            }
      public void setLebar(doublelebar){
            this.lebar=lebar;
            }
      //Luas Segiempat method 1. Tanpaparameter
      public double Luas(){
            return (this.panjang *this.lebar);
            }
      //Luas Segiempat method 2.Dengan dua parameter double
      public double Luas(doublepanjang, double lebar){
            return (panjang * lebar);
            }
      //Luas Segiempat method 3.Dengan dua parameter Integer
      public int luas(intpanjang, int lebar){
            return (panjang * lebar);
            }
      //Luas Bujursangkar method 4.Dengan tanpa parameter Double
      public double luas(doublesisi){
            return (sisi * sisi);
            }
      //Luas Bujursangkar method 5.Dengan tanpa parameter Integer
      public int luas(intsisi){
            return (sisi * sisi);
            }
      //Keliling Segiempat method 6.Tanpa parameter
      public double keliling(){
            return 2 * (this.panjang +this.lebar);
            }
      //Keliling Segiempat method 7.Dengan dua parameter double
      public double keliling(doublepanjang, double lebar){
            return 2 * (this.panjang +this.lebar);
            }
      //Keliling Bujur Sangkar method8. Dengan Satu parameter Double
      public double keliling(doublesisi){
            return (4 * sisi);
            }
      //Keliling Bujur Sangkar method9. Dengan Satu parameter integer
      public int keliling(intsisi){
            return (4 * sisi);
            }
}
  1. Membuat program pemanggilan method Segiempat dan Bujursangkar pada kelas SegiempatLatihan.
import java.util.Scanner;
public class LatihanSegiEmpat1{
       publicstatic void main(String[]args){
       Scannermasuk=new Scanner(System.in);
       System.out.println(“MenghitungLuas dan Keliling Segiempat”);
       System.out.println(“=======================================”);
       System.out.print(“MasukkanPanjang : “);
       doublepj=masuk.nextDouble();
       System.out.print(“MasukkanLebar   : “);
       doublelb=masuk.nextDouble();
       SegiempatLatihansegi4=new SegiempatLatihan ();
       segi4.setPanjang(pj);
       segi4.setLebar(lb);
       System.out.println(“Luas             : “+segi4.luas(pj,lb));
       System.out.println(“Keliling         : “+segi4.keliling(pj,lb));
       System.out.println(”  “);
       System.out.println(“MenghitungLuas dan Keliling Bujur Sangkar”);
       System.out.println(“===========================================”);
       System.out.print(“MasukkanSisi    : “);
       doublesisi=masuk.nextDouble();
       SegiempatLatihanBujursangkar=new SegiempatLatihan ();
       System.out.println(“Luas             : “+Bujursangkar.luas(sisi));
       System.out.println(“Keliling         : “+Bujursangkar.keliling(sisi));
       }
}
PembahasanLatihan:
Pada latihan ini kita tinggal melakukan modifikasidengan menambahkan beberapa buah method yaitu untuk melakukan penghitunganterhadap hasil masukan pj dan lb menjadi keliling persegi panjang dan masukansisi untuk mencari keliling bujur sangkar. Kemudian memodifikasi memodifikasimasukan agar dapat diisi dengan bilangan pecahan. Karena kalau masukan hanyamenggunakan tipe int maka sewaktu diberi masukan bilangan pecahan program akanerror dan tidak dapat melanjutkan tasknya. Maka pada 
       System.out.print(“MasukkanSisi    : “);
       doublesisi=masuk.nextDouble();
Yang dulunya menggunakan int kita ganti menjadidouble sehingga sisi bujur sangkar kita isi dengan angka 9.8 tetap dapatmemproses penghitungannya.
                Hasil Running :
  1. Pasangan fungsi/method mana yang menggambarkan overloaded function/method:
a.  Public intTambah(int a, int b);
Public floatTambah(float a, float b);
Jawab: Method ini merupakan methodoverloading karena nama method sama tetapi mempunyai tipe parameter yangberbeda.
b.  Public voidTampil(int c, String b);
Public voidTampil(int c, String d);
Jawab: Method ini bukan merupakan methodoverloading karena method ini sama persis hanya menggunakan nama variabel yangberbeda. Program akan error karena sudah ada method dengan nama,parameter dan tipe data sama persis sudah didefinisikan.
c.  Public intsetData(int a);
Public intsetData(int a, String b);
Jawab: Method ini kalau dilihat daricirinya merupakan method overloading namun karena penulisan program salah makaakan error, tipe data yang dideklarasikan bertipe integer namun di dalamnyamengandung parameter string, maka akan terjadi error. Mestinya method tersebutadalah method void saja tanpa return value sebagai contoh:
void setData(int a) dan
void setData(int a, String b).
Maka method inimenjadi method overloading.
d.  Public intsquare(int a);
Public floatsquare(float b);
Jawab: Method ini merupakan methodoverloading karena nama method sama tetapi mempunyai tipe data parameter yangberbeda.
TUGAS:
  1. Membuat program kelas yang menggunakan method overloading pada kelas String
class SeteringOperloding{
       String nim,nama, jurusan;
       double nilai;
       static voidcetakData(String nim, String nama, String jurusan){
              System.out.println(”   “);
              System.out.println(“Method1. Overloading”);
              System.out.println(“=============================”);
              System.out.println(“NIM     : “+nim);
              System.out.println(“NAMA    : “+nama);
              System.out.println(“JURUSAN: “+jurusan);
       }
       static voidcetakData(String nim, String nama, double nilai){
              System.out.println(”   “);
              System.out.println(“Method2. Overloading”);
              System.out.println(“=============================”);
              System.out.println(“NIM     : “+nim);
              System.out.println(“NAMA    : “+nama);
              System.out.println(“IPK     : “+nilai);
       }
       public staticvoid main(String args[]){
              cetakData(“093110035″,”MuhammadArief”,”Manajemen Informatika”);
              cetakData(“093110035″,”MuhammadArief”,3.90);
       }
}
Running:
  1. Penjelasan:
Pada method di atas merupakan method yangmenggunakan 3 buah parameter string dan dioverloding dengan method dengansama-sama 3 buah parameter tetapi dengan mengganti tipe variabel pada parameterke 3 yaitu dengan jenis double untuk menampung tipe masukan angka bertipedouble. Jelas dapat dikatakan dengan overloading karena mempunyai syaratbahwa nama method sama dengan menggunakan parameter dan tipe data yang berbeda.Dan mungkin juga dengan dioverloadingkan dengan jumlah parameter yang berbedapula.
KESIMPULAN:
  1. Method overloading ini manfaatnya banyak, khususnya di dalam melakukan pemrograman yang menggunakan beberapa jenis parameter namun fungsi yang digunakannya sama. Kita tidak perlu susah memberikan nama yang berbeda cukup dengan nama sama namun tipe parameter baik jumlah maupun tipe datanya yang disesuaikan dengan fungsi yang kita kehendaki. Sebagaimana contoh di atas kita dapat melakukan proses penampilan baik dengan atribut jurusan maupun nilai ipk dengan walaupun berbeda tipe datanya.
  2. Di dalam penggunaan method ini kita harus jeli khususnya data masukan yang kita inputkan, baik dengan keyboard maupun di instankan harus sesuai dengan fungsi yang kita inginkan karena dengan berubahnya tipe data atau parameter yang digunakan akan mempengaruhi hasil. Sebagaimana tugas yang kami buat di atas, dengan berbedanya kami menginputkan data dari string berupa jurusan menjadi double berupa nilai ipk maka method yang digunakan akan berbeda.
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