MODUL IV,PBO 1

            OVERLOADING

 

TUJUAN:
·         Membuat dan menjelaskan tentang method overloading
·         Menggunakan method overloading dari kelas di Java
TEORI SINGKAT:
Overloading Methods
Overloading method mengijinkan sebuah method dengan nama yang sama namun memiliki parameter yang berbeda sehingga mempunyai implementasi dan return value yang berbeda pula.
Overloading method memiliki property sebagai berikut:
1.       Nama yang sama
2.       Parameter yang berbeda
3.       Nilai kembalian (return) bisa sama ataupun berbeda.
PELAKSANAAN PRAKTIKUM:
Praktik 1. Membuat method overloading dengan kelas SegiEmpat
public class SegiEmpat{
      //daftar field
      double panjang;
      double lebar;
      public void setPanjang(double panjang){
            this.panjang=panjang;
            }
      public void setLebar(double lebar){
            this.lebar=lebar;
            }
      //Luas Segiempat method 1. Tanpa parameter
      public double luas(){
            return (this.panjang * this.lebar);
            }
      //Luas Segiempat method 2. Dengan dua parameter double
      public double luas(double panjang, double lebar){
            return (this.panjang * this.lebar);
            }
      //Luas Segiempat method 3. Dengan dua parameter Integer
      public int luas(int panjang, int lebar){
            return (panjang * lebar);
            }
      //Luas Segiempat method 4. Dengan tanpa parameter Integer
      public int luas(int sisi){
            return (sisi * sisi);
            }
}
                Program testSegiEmpat1.java
public class TestSegiEmpat1{
       public static void main(String args[]){
              SegiEmpat segi4=new SegiEmpat ();
              segi4.setPanjang(10);
              segi4.setLebar(20);
              System.out.println(“Hasil Hitungan Luas 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(2.6,3.7));
              System.out.println(“Luas 3     : “+segi4.luas(5,10));
              System.out.println(“Luas 4     : “+segi4.luas(15));
       }
}
Pembahasan Praktikum:
Kelas SegiEmpat adalah sebuah kelas yang berisi beberapa method yang berfungsi untuk melakukan hitungan luas sebuah segi empat. Pada penghitungan segi empat kita dapat melakukan dengan berbagai jenis tipe bilangan. Kita dapat menggunakan bilangan bulat sebagai ukuran panjang dan lebarnya, atau kita dapat menggunakan bilangan pecahan atau mungkin campuran, panjang dengan nilai bilangan bulat sedangkan lebarnya dengan bilangan pecahan atau sebaliknya juga. Agar di dalam memanggil method atau dalam penghitungan luas sebuah segi empat tidak harus melakukan pemanggilan beberapa method dengan kata lain cukup kita memanggil satu method saja tetapi dengan tipe data yang dapat berbeda-beda maka kita menggunakan nama yang sama. Inilah yang disebut method overloading, dimana dua method atau lebih ini mempunyai nama yang sama tetapi dengan tipe parameter yang berbeda atau jumlah parameter yang berbeda pula. Sebagai contoh program di atas, kita melakukan pemanggilan method dengan nama yang sama tetapi akan menghasilkan nilai yang berbeda-beda. Pada luas 2 nilainya sama dengan luas 1 yaitu 200, dikarenakan method setter yang digunakan telah mendefinisikan value dan tidak dapat diubah
Hasil Running:
Lain halnya ketika sedikit kita ubah program menjadi berikut:
public class TestSegiEmpat1{
     public static void main(String args[]){
       Segiempat segi4=new Segiempat ();
       segi4.setPanjang(4.5);
       segi4.setLebar(3.2);
       System.out.println(“Hasil Hitungan Luas 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:
Dapat kita lihat hasil dari kelas TestSegiEmpat1 di atas setelah diubah menghasilkan nilai Luas 1 dan nilai luas 2 tidak lagi sama karena default setter dan getternya menggunakan variable double maka ketika kita isi dengan nilai pecahan yang akan dipanggil adalah method luas nomor 1 dengan variable this.panjang dan this.lebarnya. Sedangkan pada waktu variable luas 2 diisi dengan nilai (3,10) maka yang akan dipanggil sebenarnya adalah method luas ke 3 yang mempunyai nilai value integer. Untuk itu agar menghasilkan nilai sebagaimana hasil diatas maka ada sedikit kesalahan yang kami lakukan yaitu dengan menghilangkan this.panjang dan this.lebar pada return value luas 2, sehingga menjadi:
      //Luas Segiempat method 2. Dengan dua parameter double
      public double luas(double panjang, double lebar){
            return (panjang * lebar);
            }
Dengan demikian 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.            Program test 2
import java.util.Scanner;
public class TestSegiEmpat2{
     public static void main(String[]args){
     Scanner masuk=new Scanner(System.in);
     System.out.println(“Menghitung Luas Segiempat”);
     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 Luas Bujur 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 kelemahan yaitu karena pada penghitungan luas bujur sangkar apabila menggunakan bilangan pecahan akan terjadi error, sehingga perlu dimodifikasi dengan cara menambahkan satu method luas overloading lagi variable double agar dapat menjadi alternative bagi penyelesaian masukan berupa bilangan pecahan.
Selain itu kita juga harus mengubah terlebih dahulu pemanggilan instan variable sisi yang dimasukkan dengan keyboard dengan tipe double juga. Karena apabila tidak diganti double dan masih tetap integer maka pada saat memasukkan angka pecahan program langsung akan mengalami error. Modifikasi sebagai berikut:
     System.out.print(“Masukkan Sisi      : “);
     Daouble sisi=masuk.nextDouble();
Sedangkan pada kelas Segiempat perlu ditambah satu method luas overloading sebagaimana dibawah:
     //Luas Segitiga method 5. Dengan tanpa parameter Integer
     public double luas(double sisi){
       return (sisi * sisi);
       }
Sehingga menghasilkan keluaran sebagaimana di bawah ini:
Praktik 3. Menggunakan method overloading dari kelas di Java.
public class TestMax{
      public static void main(String []args){
            System.out.println(“Antara 5 dan 8       adalah : “+Math.max(5,8));
            System.out.println(“Antara -50L dan -80L adalah : “+Math.max(-50L,-80L));
            System.out.println(“Antara 3.6 dan 60.3  adalah : “+Math.max(3.6,60.7));
            System.out.println(“Antara 1.5 dan 1.7   adalah : “+Math.max(1.5f,1.7f));
      }
}
Hasil Runing:
Pembahasan Praktek 3.
Penggunaan method overloading pada kelas Math sebagaimana listing program di atas adalah menunjukkan bahwa dimana method yang digunakan adalah method yang sesuai dengan tipe data yang digunakan. Atau dengan kata lain bahwa method overloading dalam memilih method yang digunakan adalah dengan cara melihat referensi tipe data yang didefinisikan. Paca contoh di atas Math.max(5,8) maka akan memilih prosedur Math.max(int, int), sedangkan pada Math.max(-50L,-80L) maka menggunakan Math.max(loang, long), pada Math.max(3.6,60.7) maka menggunakan Math.max(double, double)), kemudian Math.max(1.5,1.7) maka menggunakan Math.max(float, float). Selain itu ada kemungkinan 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(double panjang){
            this.panjang=panjang;
            }
      public void setLebar(double lebar){
            this.lebar=lebar;
            }
      //Luas Segiempat method 1. Tanpa parameter
      public double Luas(){
            return (this.panjang * this.lebar);
            }
      //Luas Segiempat method 2. Dengan dua parameter double
      public double Luas(double panjang, double lebar){
            return (panjang * lebar);
            }
      //Luas Segiempat method 3. Dengan dua parameter Integer
      public int luas(int panjang, int lebar){
            return (panjang * lebar);
            }
      //Luas Bujursangkar method 4. Dengan tanpa parameter Double
      public double luas(double sisi){
            return (sisi * sisi);
            }
      //Luas Bujursangkar method 5. Dengan tanpa parameter Integer
      public int luas(int sisi){
            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(double panjang, double lebar){
            return 2 * (this.panjang + this.lebar);
            }
      //Keliling Bujur Sangkar method 8. Dengan Satu parameter Double
      public double keliling(double sisi){
            return (4 * sisi);
            }
      //Keliling Bujur Sangkar method 9. Dengan Satu parameter integer
      public int keliling(int sisi){
            return (4 * sisi);
            }
}
  1. Membuat program pemanggilan method Segiempat dan Bujursangkar pada kelas SegiempatLatihan.
import java.util.Scanner;
public class LatihanSegiEmpat1{
       public static void main(String[]args){
       Scanner masuk=new Scanner(System.in);
       System.out.println(“Menghitung Luas dan Keliling Segiempat”);
       System.out.println(“=======================================”);
       System.out.print(“Masukkan Panjang : “);
       double pj=masuk.nextDouble();
       System.out.print(“Masukkan Lebar   : “);
       double lb=masuk.nextDouble();
       SegiempatLatihan segi4=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(“Menghitung Luas dan Keliling Bujur Sangkar”);
       System.out.println(“===========================================”);
       System.out.print(“Masukkan Sisi    : “);
       double sisi=masuk.nextDouble();
       SegiempatLatihan Bujursangkar=new SegiempatLatihan ();
       System.out.println(“Luas             : “+Bujursangkar.luas(sisi));
       System.out.println(“Keliling         : “+Bujursangkar.keliling(sisi));
       }
}
Pembahasan Latihan:
Pada latihan ini kita tinggal melakukan modifikasi dengan menambahkan beberapa buah method yaitu untuk melakukan penghitungan terhadap hasil masukan pj dan lb menjadi keliling persegi panjang dan masukan sisi untuk mencari keliling bujur sangkar. Kemudian memodifikasi memodifikasi masukan agar dapat diisi dengan bilangan pecahan. Karena kalau masukan hanya menggunakan tipe int maka sewaktu diberi masukan bilangan pecahan program akan error dan tidak dapat melanjutkan tasknya. Maka pada 
       System.out.print(“Masukkan Sisi    : “);
       double sisi=masuk.nextDouble();
Yang dulunya menggunakan int kita ganti menjadi double sehingga sisi bujur sangkar kita isi dengan angka 9.8 tetap dapat memproses penghitungannya.
                Hasil Running :
  1. Pasangan fungsi/method mana yang menggambarkan overloaded function/method:
a.  Public int Tambah(int a, int b);
Public float Tambah(float a, float b);
Jawab: Method ini merupakan method overloading karena nama method sama tetapi mempunyai tipe parameter yang berbeda.
b.  Public void Tampil(int c, String b);
Public void Tampil(int c, String d);
Jawab: Method ini bukan merupakan method overloading karena method ini sama persis hanya menggunakan nama variabel yang berbeda. Program akan error karena sudah ada method dengan nama, parameter dan tipe data sama persis sudah didefinisikan.
c.  Public int setData(int a);
Public int setData(int a, String b);
Jawab: Method ini kalau dilihat dari cirinya merupakan method overloading namun karena penulisan program salah maka akan error, tipe data yang dideklarasikan bertipe integer namun di dalamnya mengandung parameter string, maka akan terjadi error. Mestinya method tersebut adalah method void saja tanpa return value sebagai contoh:
void setData(int a) dan
void setData(int a, String b).
Maka method ini menjadi method overloading.
d.  Public int square(int a);
Public float square(float b);
Jawab: Method ini merupakan method overloading karena nama method sama tetapi mempunyai tipe data parameter yang berbeda.
TUGAS:
  1. Membuat program kelas yang menggunakan method overloading pada kelas String
class SeteringOperloding{
       String nim, nama, jurusan;
       double nilai;
       static void cetakData(String nim, String nama, String jurusan){
              System.out.println(”   “);
              System.out.println(“Method 1. Overloading”);
              System.out.println(“=============================”);
              System.out.println(“NIM     : “+nim);
              System.out.println(“NAMA    : “+nama);
              System.out.println(“JURUSAN : “+jurusan);
       }
       static void cetakData(String nim, String nama, double nilai){
              System.out.println(”   “);
              System.out.println(“Method 2. Overloading”);
              System.out.println(“=============================”);
              System.out.println(“NIM     : “+nim);
              System.out.println(“NAMA    : “+nama);
              System.out.println(“IPK     : “+nilai);
       }
       public static void main(String args[]){
              cetakData(“093110035″,”Muhammad Arief”,”Manajemen Informatika”);
              cetakData(“093110035″,”Muhammad Arief”,3.90);
       }
}
Running:
  1. Penjelasan:
Pada method di atas merupakan method yang menggunakan 3 buah parameter string dan dioverloding dengan method dengan sama-sama 3 buah parameter tetapi dengan mengganti tipe variabel pada parameter ke 3 yaitu dengan jenis double untuk menampung tipe masukan angka bertipe double. Jelas dapat dikatakan dengan overloading karena mempunyai syarat bahwa nama method sama dengan menggunakan parameter dan tipe data yang berbeda. Dan mungkin juga dengan dioverloadingkan dengan jumlah parameter yang berbeda pula.
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