MODUL IX,PBO 1

PEWARISAN SIFAT
 

TUJUAN:
Membuat dan menjelaskan tentang pewarisan sifat
Penggunaan keyword protected
TEORI SINGKAT:
Inheritance (Pewarisan)
Inheritance/pewarisan adalah pewarisan data dan method dari suatu kelas kepada kelas yang lain, dengan kata lain membuat class baru yang masih mempunyai spesifikasi (state & behaviour) yang sama dengan class yang sudah ada.
  1. Class yang baru disebut class turunan/subclass sementara,class yang sudah ada disebut dengan class induk/superclass.
  2. Subclass (class turunan) akan memiliki (mewarisi) semua cirri dan sifat dari superClass ( class Induk )
  3. Pada kelas turunan dapat ditambahkan state dan berhaviour yang baru, yang merupakan spesifik milik subclass itu sendiri.
  4. Keyword yang digunakan dalam pewarisan ini adalah extends
PELAKSANAAN PRAKTIKUM:
Listing program 1. Titik.java
Pada program java di bawah ini kita coba menggunakan modifier private yang sebenarnya kurang cocok apabila nanti kita akan menggunakan kelas Titik ini menjadi sebuah super kelas, yang paling cocok adalah protected. Pada saat pemanggilan oleh anak kelas khususnya kadang mengalami error. Namun kita coba saja kita gunakan pribave int x dan private int y.
Kemudian kita tuliskan konstruktor non parameter dimana konstruktor ini akan selalu dipanggil pada saat konstruktor ini dipakai pada anak kelas yang akan terindikasi dari keluarnya kata-kata yang tertulis pada System.out.println(“Konstruktor Titik”). Artinya dimana pada saat eksekusi/tampilan pada method main keluar tulisan Konstruktor Titik berarti konstruktor titik yang non parametris/tanpa argumen ini diproses.
Selanjutnya kita buat method setKoordinat dengan parameter int xx dan int yy. Di dalam method setter/mutator ini variabel int xx dan int yy akan dimasukkan ke variabel x dan ya sebagaimana terdifinisikan sebagai variabel statis. Agar variabel x dan y dapat terdefinisi maka kita perlukan method getter/assesor yang tentunya kita butuh 2 method assesor ini yaitu untuk mengambil variabel x dengan getX dan variabel y dengan getY dengan masing-masing return valuenya berupa nilai x dan y. Yang terakhir adalah kita membuat method cetak yang akan mencetak nilai yang terdifinisi dari setKoordinat..
public class Titik{
//koordinat Titik
   private int x;
   private int y;
//konstruktor tanpa argumen
   public Titik(){
        System.out.println(“Konstruktor Titik”);
        x=0;
        y=0;
   }
//set kordinator Titik: x dan y
  public void setKoordinat(int xx, int yy){
       x=xx;
       y=yy;
  }
//ambil koordinat x
  public int getX(){
       return x;
  }
//ambil koordinat y
  public int getY(){
       return y;
  }
//Cetak ke layar
  public void cetak(){
       System.out.println(“X = ” + x + “, y = “+ y);
  }
      }
Listing Program 2. Lingkaran
//Lingkaran mewarisi Titik
public class Lingkaran extends Titik{
protected double radius;
//konstruktor tanpa argumen
  public Lingkaran(){
       radius=0.0;
  }
//konstruktor argumen radius
  public Lingkaran(double rad){
       setRadius(rad);
  }
//set radius dari Lingkaran
  public void setRadius(double rad){
       radius=(rad>=0.0 ? rad :0.0);
  }
//ambil radius dari Lingkaran
  public double getRadius(){
       return radius;
  }
//hitung luas Lingkaran
  public double luas(){
       return Math.PI * radius * radius;
  }
//cetak hasil ke layar
  public void cetakHasil(){
       System.out.println(“Pusat  = [“+getX() +”,
       “+getY()+”]”);
       System.out.println(“Radius = “+radius);
       System.out.println(“Luas   = “+luas());
  }
      }
Kelas ini merupakan kelas yang akan mewarisi variabel dan method yang berada di kelas Titik, sehingga kita harus menuliskan extends Titik pada akhir penulisan kelas Lingkaran sebagaimana dapat dilihat di bawah ini. Di dalam  kelas Lingkaran ini ada dua buah konstruktor yaitu konstruktor non parametris/tanpa argumen yaitu Lingkaran() dan konstruktor dengan argumen yaitu Lingkaran(double rad). Artinya apabila pada saat pemanggilan object yang diciptakan dari kelas Lingkaran ini tidak menggunakan argumen maka konstruktor yang akan dieksekusi adalah Lingkaran(), sedangkan apabila dalam penciptaan objek menggunakan parameter maka yang akan dieksekusi adalah konstruktor Lingkaran(double rad). Sekaligus pada eksekusi konstruktor Lingkaran(double rad) tersebut maka java juga mengeksekusi sertRadius(rad) dimana setRadius merupakan method setter yang berisi pernyataan untuk mendefinisikan variabel radius yang bertipe double dengan sebuah pernyataan bersyarat if yaitu apabila isi parameter konstruktor/rad adalah bilangan double yang lebih besar atau sama dengan 0.0 maka radius bernilai sama dengan rad, namun apabila nilai rad lebih kecil dari nol (asumsinya adalah bilangan negatif) maka radius bernilai 0. Karena suatu kemustahilan apabila suatu radius bernilai minus, dengan radius bernilai nol saja suatu lingkaran tidak ada artinya. Setelah nilai radius terdefinisi maka kita juga harus menyertainya dengan method getter untuk mengambil nilai radius tersebut.
Langkah untuk mencari luas lingkaran adalah dengan membuat method double luas() yang isinya adalah nilai perkalian konstanta PHI dengan kuadrat radius, dimana nilai double ini adalah merupakan tipe hasil yang dapat ditampung.
Method yang terakhir dibuat adalah method cetak yang digunakan untuk mencetak nilai titik pusat yang mestinya diperoleh dari kelas Titik yang melakukan pemanggilan method getX dan getY. Sedangkan nilai radius diambilkan dari konstruktor pada kelas Lingkaran serta hasil dari method luas yang melakukan penghitungan luas.
Listing Program 3. TestLingkaran
public class TestLingkaran{
  public static void main(String []args){
       Titik t=new Titik();
       t.cetak();
       Lingkaran l=new Lingkaran();
       l.cetakHasil();
  }
      }
Dengan method main di atas kita dapat mencoba memasukkan isi dari  pembentukan kelas Titik dan Lingkaran ini dengan menggunakan konstruktor non parametrik/tanpa argumen. Dan akan menghasilkan tampilan sebagaimana di bawah. Artinya proses yang dilalui oleh pemanggilan method main di atas adalah: Java melakukan pemanggilan pada konstruktor non parametrik pada kelas Titik karena pada saat pembentukan objek t dari kelas titik tidak menggunakan parameter sama sekali. Pada tampilan di bawah ini terlihat bahwa hasil tampilan dari method cetak dari kelas Titik adalah 0. Kemudian  pada pembuatan objek dari kelas Lingkaran ternyata dengan sendirinya melakukan pemanggilan pada konstruktor pada kelas Titik. Dapat dilihat pada tampilan di bawah ini adanya tulisan “Konsrtuktor titik”, dimana kalimat tersebut kita masukkan pada konstruktor Titik() non parameter. Dengan sendirinya pula nilai x dan y adalah 0 semua dan mengakibatkan nilai x dan y pada pusat juga (0,0) karena diperoleh juga dari method getX dan getY. Dan tentu saja nilai volume lingkaran adalah 0 dikarenakan nilai radius juga 0. Hasil perkalian PHI dengan radius yang bernilai 0 adalah 0.
Akan berlainan apabila pada saat kita memanggil kita memasukkan parameter 10 sebagai nilai rad yang diproses sebagai radius oleh setRadius sebagaimana dibawah ini. Maka tampilan yang akan terlihata dalah sebagaimana gambar di bawah ini pula. Nilai Pusat belum terdifinisi karena nilai getX dan getY yang mereferensi ke Titik sebagai super kelasnya belum ada pendefinisian.
Titik t=new Titik();
t.cetak();
Lingkaran l=new Lingkaran(10);
l.cetakHasil();
Hasil Running Program:               
               
//konstruktor argumen radius
     public Lingkaran(int x, int y, double rad){
       setRadius(rad);
       this.x=x;
       this.y=y;
     }
Saat kita coba dengan menambah parameter int x dan int y pada konstruktor Lingkaran yang sudah ada parameter rad sebagaimana di atas namun terlebih dahulu kita lakukan penggantian modifier private menjadi protected pada int x dan in y di kelas Titik. Maka pada saat dipanggil dengan kelas TestLingkaran dengan method main sebagai berikut ini akan menghasilkan sebagaimana gambar di bawahnya:
public class TestLingkaran{
     public static void main(String []args){
       Titik t=new Titik(3,4);
       t.cetak();
       Lingkaran l=new Lingkaran(2,3,12);
       l.cetakHasil();
     }
}
LATIHAN:
//System.out.println(“Pusat  = [“+getX() +”, “+getY()+”]”); diganti dengan
System.out.println(“Pusat  = [“+ x +”, “+ y +”]”);
Ketika dilakukan penggantian sebagaimana di atas yang terjadi error sebagaimana di bawah.
Hal ini terjadi karena jenis modifier variabel tipenya yaitu menggunakan private, yang tentu saja tidak mengijinkan kelas di bawahnya atau anak kelas untuk mengaksesnya. Sebagaimana keterangan error di bawah ini menyatakan bahwa x and y has private access in Titik.
E:\Semester 2\Object Oriented Programming 1\Modul09-Pewarisa Sifat\Lingkaran.java:33: x has private access in Titik
       System.out.println(“Pusat  = [“+ x +”, “+ y +”]”);
                                        ^
E:\Semester 2\Object Oriented Programming 1\Modul09-Pewarisa Sifat\Lingkaran.java:33: y has private access in Titik
       System.out.println(“Pusat  = [“+ x +”, “+ y +”]”);
                                                 ^
2 errors
Tool completed with exit code 1
Ketika variabel instan pada Titik.java diganti dengan protected yang terjadi adalah:
//private int x; diganti dengan
protected int x;
//private int y; diganti dengan
      protected int y;
Sebagaimana asumsi kami di atas ketika dikompail kelas ini sukses dengan penggantian modifier pada variabel instan x dan y dari private menjadi protected. Sebagaimana kasus error pada saat kelas Lingkaran kita mengadakan perubahan terhadap pemanggilan variabel x dan y yang dilakukan langsung. Pada saat menggunakan method getX dan getY tidak mengalami error karena method tersebut telah mempunyai modifier public atau bersifat public yang dapat diakses oleh semua kelas temasuk kelas di bawahnya/anak kelas/sub kelas.
Membuat program menggeser titik pusat:
Untuk melakukan penggeseran titik pada pusat dapat dilakukan dengan berbagai cara membuat method geser dengan parameter int x dan int y. Selain itu ditambahkan dengan method getXBaru dan getYBaru yang tentu saja akan menghasilkan nilai x dan y baru ketika method geser tersebut dipanggil. Method geser dapat disebut sebagai method setter karena dapat diisi dengan parameter yang dapat diisi dengan nilai sesuai dengan kenginginan kita.
//Method Geser untuk menggeser titik pusat
     public void geser(int x, int y){
       this.x=x;
       this.y=y;
     }
//mengambil nilai geser X
     public int getXBaru(){
       return x;
     }
//mengambil nilai geser Y
     public int getYBaru(){
       return y;
     }
Dan menampilkan nilai geser:
public class TestLingkaran{
     public static void main(String []args){
       Titik t=new Titik();
       t.cetak();
       Lingkaran l=new Lingkaran(12);
       l.cetakHasil();
       l.geser(4,5);
       l.cetakHasil();
     }
}
Hasil dari Penggeseran Nilai x dan y:
Pada saat pemanggilan dengan konstruktor cetak hasil pertama pusat masih bernilai 0,0 sedangkan setelah melalui method geser. Titik pusat sudah berubah menjadi (4,5) sesuai nilai yang dimasukkan kedalam parameter method geser.
Membuat Kelas Tabung: turunan dari kelas lingkaran:
//Kelas Tabung mewarisi Lingkaran
class Tabung extends Lingkaran{
private int tinggi;
//konstruktor tanpa argumen
     public Tabung(){
       tinggi=0;
       radius=0;
     }
//set tinggi dari Tabung
     public Tabung(int tinggi, double radius){
       this.tinggi=tinggi;
       this.radius=radius;
     }
//ambil tinggi dari Lingkaran
     public int getTinggi(){
       return tinggi;
     }
//hitung volume Tabung
     public double Volume(){
       return Math.PI * radius * radius * tinggi;
     }
//cetak hasil ke layar
     public void cetakInfo(){
       System.out.println(“Volume = “+Volume());
     }
}
Membuat kelas pemanggilan dengan nama TestTabung dengan method main dan parameter 4 dan 5 sebagai tinggi dan nilai radius. Akan diproses pada kelas Konsrtuktor Titik kemudian nilai tinggi dan radius akan diproses menjadi volume saat dikalikan dengan nilai PHI.
public class TestTabung{
     public static void main(String args[]){
       Tabung tabg=new Tabung(4,5);
       tabg.Volume();
       tabg.cetakInfo();
     }
}
Hasil running script TestTabung
TUGAS:
Membuat kelas persegi panjang yang mengextends kelas Titik sebagai super kelasnya.
Pembuatan Kelas PersegiPanjang.java
public class PersegiPanjang extends Titik {
     public int X2, Y2;
     public int panjang, lebar;
     public PersegiPanjang(){
       X2=0;
       Y2=0;
     }
     public PersegiPanjang(int x, int y, int X2, int Y2){
       this.x=x;
       this.y=y;
       this.X2=X2;
       this.Y2=Y2;
     }
     public void tampil(){
       System.out.println(“[X1, Y1) = [“+x+”, “+y+”]”);
       System.out.println(“[X2, Y2) = [“+X2+”, “+Y2+”]”);
     }
     public int getPanjang(){
       return X2-x;
     }
     public int getLebar(){
       return Y2-y;
     }
     public int luasSegi4(){
       return (getLebar() * getPanjang());
     }
}
Pemanggilan Kelas TestLuasSegi4.java
public class TestLuasSegi4{
     public static void main(String args[]){
       PersegiPanjang segi4=new PersegiPanjang(1,2,6,7);
       segi4.tampil();
       System.out.println(“Luas Persegi Panjang = “+segi4.luasSegi4());
     }
}
Hasil running Program:
               
KESIMPULAN:
  1. Dalam java pewarisan sifat dari suatu kelas untuk diturunkan ke kelas anak menjadikan program lebih efisien. Tidak semua program harus dituliskan tetapi dapat mengambil method dari kelas lain untuk menyelesaikan tugas yang sama, dimana:
·         Salah satu keuntungan OOP adalah bersifat reusable. Jika kita membuat beberapa kelas yang berasal dari basis yang sama (data dan method), namun pada masing-masingnya akan ditambahkan data atau method yang khusus. Tanpa inheritance, kita harus menyalin semua data dan method dari suatu kelas.
·         Kemudahan dalam me-manage kelas yang memiliki data dan method yang sama yaitu apabil kita ingin memodifikasi suatu data atau method untuk semua SubKelas, kita tidak perlu melakukan perubahan pada masing-masing sub kelas. Modifikasi cukup dilakukan pada kelas Super yang menjadi basis dari SubKelas tersebut.
·         Hemat waktu, biaya dan tenaga dalam pengembangan program.
  1. Kita harus jeli dalam menggunakan jenis-jenis modifier baik pada variabel maupun method karena berhubungan hak pengaksesan dengan kelas-kelas lainnya.
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