MODUL IX,PBO 1

PEWARISAN SIFAT
 

TUJUAN:
Membuat dan menjelaskan tentang pewarisansifat
Penggunaan keyword protected
TEORI SINGKAT:
Inheritance (Pewarisan)
Inheritance/pewarisan adalah pewarisan data dan methoddari suatu kelas kepada kelas yang lain, dengan kata lain membuat class baruyang masih mempunyai spesifikasi (state & behaviour) yang sama dengan classyang 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 cobamenggunakan modifier private yang sebenarnya kurang cocok apabila nanti kitaakan menggunakan kelas Titik ini menjadi sebuah super kelas, yang paling cocokadalah protected. Pada saat pemanggilan oleh anak kelas khususnya kadangmengalami error. Namun kita coba saja kita gunakan pribave int x dan privateint y.
Kemudian kita tuliskan konstruktor nonparameter dimana konstruktor ini akan selalu dipanggil pada saat konstruktorini dipakai pada anak kelas yang akan terindikasi dari keluarnya kata-kata yangtertulis pada System.out.println(“Konstruktor Titik”). Artinya dimana pada saateksekusi/tampilan pada method main keluar tulisan Konstruktor Titik berartikonstruktor titik yang non parametris/tanpa argumen ini diproses.
Selanjutnya kita buat method setKoordinat denganparameter int xx dan int yy. Di dalam method setter/mutator ini variabel int xxdan int yy akan dimasukkan ke variabel x dan ya sebagaimana terdifinisikansebagai variabel statis. Agar variabel x dan y dapat terdefinisi maka kitaperlukan method getter/assesor yang tentunya kita butuh 2 method assesor iniyaitu untuk mengambil variabel x dengan getX dan variabel y dengan getY denganmasing-masing return valuenya berupa nilai x dan y. Yang terakhir adalah kitamembuat method cetak yang akan mencetak nilai yang terdifinisi darisetKoordinat..
public class Titik{
//koordinat Titik
   private int x;
   private int y;
//konstruktor tanpa argumen
   public Titik(){
        System.out.println(“KonstruktorTitik”);
        x=0;
        y=0;
   }
//set kordinatorTitik: x dan y
  public void setKoordinat(int xx, int yy){
       x=xx;
       y=yy;
  }
//ambil koordinatx
  public int getX(){
       return x;
  }
//ambil koordinaty
  public int getY(){
       return y;
  }
//Cetak ke layar
  public void cetak(){
       System.out.println(“X = ” + x +”, y = “+ y);
  }
      }
Listing Program 2. Lingkaran
//Lingkaranmewarisi Titik
public classLingkaran extends Titik{
protected doubleradius;
//konstruktortanpa argumen
  public Lingkaran(){
       radius=0.0;
  }
//konstruktorargumen radius
  public Lingkaran(double rad){
       setRadius(rad);
  }
//set radius dariLingkaran
  public void setRadius(double rad){
       radius=(rad>=0.0 ? rad :0.0);
  }
//ambil radiusdari Lingkaran
  public double getRadius(){
       return radius;
  }
//hitung luasLingkaran
  public double luas(){
       return Math.PI * radius * radius;
  }
//cetak hasil kelayar
  public void cetakHasil(){
       System.out.println(“Pusat  = [“+getX() +”,
       “+getY()+”]”);
       System.out.println(“Radius =”+radius);
       System.out.println(“Luas   = “+luas());
  }
      }
Kelas ini merupakan kelas yang akanmewarisi variabel dan method yang berada di kelas Titik, sehingga kita harusmenuliskan extends Titik pada akhir penulisan kelas Lingkaran sebagaimana dapatdilihat di bawah ini. Di dalam  kelasLingkaran ini ada dua buah konstruktor yaitu konstruktor non parametris/tanpaargumen yaitu Lingkaran() dan konstruktor dengan argumen yaitu Lingkaran(doublerad). Artinya apabila pada saat pemanggilan object yang diciptakan dari kelasLingkaran ini tidak menggunakan argumen maka konstruktor yang akan dieksekusiadalah Lingkaran(), sedangkan apabila dalam penciptaan objek menggunakanparameter maka yang akan dieksekusi adalah konstruktor Lingkaran(double rad).Sekaligus pada eksekusi konstruktor Lingkaran(double rad) tersebut maka javajuga mengeksekusi sertRadius(rad) dimana setRadius merupakan method setter yangberisi pernyataan untuk mendefinisikan variabel radius yang bertipe doubledengan sebuah pernyataan bersyarat if yaitu apabila isi parameterkonstruktor/rad adalah bilangan double yang lebih besar atau sama dengan 0.0maka radius bernilai sama dengan rad, namun apabila nilai rad lebih kecil darinol (asumsinya adalah bilangan negatif) maka radius bernilai 0. Karena suatukemustahilan apabila suatu radius bernilai minus, dengan radius bernilai nolsaja suatu lingkaran tidak ada artinya. Setelah nilai radius terdefinisi makakita juga harus menyertainya dengan method getter untuk mengambil nilai radiustersebut.
Langkah untuk mencari luas lingkaranadalah dengan membuat method double luas() yang isinya adalah nilai perkaliankonstanta PHI dengan kuadrat radius, dimana nilai double ini adalah merupakantipe hasil yang dapat ditampung.
Method yang terakhir dibuat adalah method cetakyang digunakan untuk mencetak nilai titik pusat yang mestinya diperoleh darikelas Titik yang melakukan pemanggilan method getX dan getY. Sedangkan nilairadius diambilkan dari konstruktor pada kelas Lingkaran serta hasil dari methodluas yang melakukan penghitungan luas.
Listing Program 3. TestLingkaran
public classTestLingkaran{
  public static void main(String []args){
       Titik t=new Titik();
       t.cetak();
       Lingkaran l=new Lingkaran();
       l.cetakHasil();
  }
      }
Dengan method main di atas kita dapatmencoba memasukkan isi dari  pembentukankelas Titik dan Lingkaran ini dengan menggunakan konstruktor nonparametrik/tanpa argumen. Dan akan menghasilkan tampilan sebagaimana di bawah.Artinya proses yang dilalui oleh pemanggilan method main di atas adalah: Javamelakukan pemanggilan pada konstruktor non parametrik pada kelas Titik karenapada saat pembentukan objek t dari kelas titik tidak menggunakan parameter samasekali. Pada tampilan di bawah ini terlihat bahwa hasil tampilan dari methodcetak dari kelas Titik adalah 0. Kemudian pada pembuatan objek dari kelas Lingkaran ternyata dengan sendirinyamelakukan pemanggilan pada konstruktor pada kelas Titik. Dapat dilihat padatampilan di bawah ini adanya tulisan “Konsrtuktor titik”, dimana kalimattersebut kita masukkan pada konstruktor Titik() non parameter. Dengansendirinya pula nilai x dan y adalah 0 semua dan mengakibatkan nilai x dan ypada pusat juga (0,0) karena diperoleh juga dari method getX dan getY. Dantentu 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 kitamemanggil kita memasukkan parameter 10 sebagai nilai rad yang diproses sebagairadius oleh setRadius sebagaimana dibawah ini. Maka tampilan yang akanterlihata dalah sebagaimana gambar di bawah ini pula. Nilai Pusat belumterdifinisi karena nilai getX dan getY yang mereferensi ke Titik sebagai superkelasnya belum ada pendefinisian.
Titik t=new Titik();
t.cetak();
Lingkaran l=new Lingkaran(10);
l.cetakHasil();
Hasil Running Program:               
               
//konstruktorargumen radius
     public Lingkaran(int x, int y, double rad){
       setRadius(rad);
       this.x=x;
       this.y=y;
     }
Saat kita coba denganmenambah parameter int x dan int y pada konstruktor Lingkaran yang sudah adaparameter rad sebagaimana di atas namun terlebih dahulu kita lakukanpenggantian modifier private menjadi protected pada int x dan in y di kelasTitik. Maka pada saat dipanggil dengan kelas TestLingkaran dengan method mainsebagai berikut ini akan menghasilkan sebagaimana gambar di bawahnya:
public classTestLingkaran{
     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 sebagaimanadi atas yang terjadi error sebagaimana di bawah.
Hal ini terjadi karena jenis modifiervariabel tipenya yaitu menggunakan private, yang tentu saja tidak mengijinkankelas di bawahnya atau anak kelas untuk mengaksesnya. Sebagaimana keteranganerror di bawah ini menyatakan bahwa x and y has private access in Titik.
E:\Semester 2\Object Oriented Programming 1\Modul09-PewarisaSifat\Lingkaran.java:33: x has private access in Titik
       System.out.println(“Pusat  = [“+ x +”, “+ y+”]”);
                                        ^
E:\Semester 2\Object Oriented Programming 1\Modul09-PewarisaSifat\Lingkaran.java:33: y has private access in Titik
       System.out.println(“Pusat  = [“+ x +”, “+ y+”]”);
                                                 ^
2 errors
Tool completedwith exit code 1
Ketika variabel instan pada Titik.javadiganti 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 ketikadikompail kelas ini sukses dengan penggantian modifier pada variabel instan xdan y dari private menjadi protected. Sebagaimana kasus error pada saat kelasLingkaran kita mengadakan perubahan terhadap pemanggilan variabel x dan y yangdilakukan langsung. Pada saat menggunakan method getX dan getY tidak mengalamierror karena method tersebut telah mempunyai modifier public atau bersifatpublic yang dapat diakses oleh semua kelas temasuk kelas di bawahnya/anakkelas/sub kelas.
Membuatprogram menggeser titik pusat:
Untuk melakukan penggeseran titik pada pusat dapatdilakukan dengan berbagai cara membuat method geser dengan parameter int x danint y. Selain itu ditambahkan dengan method getXBaru dan getYBaru yang tentusaja akan menghasilkan nilai x dan y baru ketika method geser tersebut dipanggil.Method geser dapat disebut sebagai method setter karena dapat diisi denganparameter yang dapat diisi dengan nilai sesuai dengan kenginginan kita.
//Method Geseruntuk menggeser titik pusat
     public void geser(int x, int y){
       this.x=x;
       this.y=y;
     }
//mengambil nilaigeser X
     public int getXBaru(){
       return x;
     }
//mengambil nilaigeser Y
     public int getYBaru(){
       return y;
     }
Danmenampilkan nilai geser:
public classTestLingkaran{
     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();
     }
}
Hasildari Penggeseran Nilai x dan y:
Pada saat pemanggilan dengan konstruktor cetakhasil pertama pusat masih bernilai 0,0 sedangkan setelah melalui method geser.Titik pusat sudah berubah menjadi (4,5) sesuai nilai yang dimasukkan kedalamparameter method geser.
MembuatKelas Tabung: turunan dari kelas lingkaran:
//Kelas Tabungmewarisi Lingkaran
class Tabungextends Lingkaran{
private inttinggi;
//konstruktortanpa argumen
     public Tabung(){
       tinggi=0;
       radius=0;
     }
//set tinggi dariTabung
     public Tabung(int tinggi, double radius){
       this.tinggi=tinggi;
       this.radius=radius;
     }
//ambil tinggidari Lingkaran
     public int getTinggi(){
       return tinggi;
     }
//hitung volumeTabung
     public double Volume(){
       return Math.PI * radius * radius *tinggi;
     }
//cetak hasil kelayar
     public void cetakInfo(){
       System.out.println(“Volume =”+Volume());
     }
}
Membuatkelas pemanggilan dengan nama TestTabung dengan method main dan parameter 4 dan5 sebagai tinggi dan nilai radius. Akan diproses pada kelas Konsrtuktor Titikkemudian nilai tinggi dan radius akan diproses menjadi volume saat dikalikandengan nilai PHI.
public classTestTabung{
     public static void main(String args[]){
       Tabung tabg=new Tabung(4,5);
       tabg.Volume();
       tabg.cetakInfo();
     }
}
Hasil running script TestTabung
TUGAS:
Membuatkelas persegi panjang yang mengextends kelas Titik sebagai super kelasnya.
PembuatanKelas PersegiPanjang.java
public class PersegiPanjang extendsTitik {
     publicint X2, Y2;
     publicint panjang, lebar;
     publicPersegiPanjang(){
       X2=0;
       Y2=0;
     }
     publicPersegiPanjang(int x, int y, int X2, int Y2){
       this.x=x;
       this.y=y;
       this.X2=X2;
       this.Y2=Y2;
     }
     publicvoid tampil(){
       System.out.println(“[X1,Y1) = [“+x+”, “+y+”]”);
       System.out.println(“[X2,Y2) = [“+X2+”, “+Y2+”]”);
     }
     publicint getPanjang(){
       returnX2-x;
     }
     publicint getLebar(){
       returnY2-y;
     }
     publicint luasSegi4(){
       return(getLebar() * getPanjang());
     }
}
Pemanggilan Kelas TestLuasSegi4.java
public class TestLuasSegi4{
     publicstatic void main(String args[]){
       PersegiPanjangsegi4=new PersegiPanjang(1,2,6,7);
       segi4.tampil();
       System.out.println(“Luas PersegiPanjang = “+segi4.luasSegi4());
     }
}
Hasilrunning 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 OOPadalah bersifat reusable. Jika kita membuat beberapa kelas yang berasal daribasis yang sama (data dan method), namun pada masing-masingnya akan ditambahkandata atau method yang khusus. Tanpa inheritance, kita harus menyalin semua datadan method dari suatu kelas.
·        Kemudahan dalam me-manage kelasyang memiliki data dan method yang sama yaitu apabil kita ingin memodifikasisuatu data atau method untuk semua SubKelas, kita tidak perlu melakukanperubahan pada masing-masing sub kelas. Modifikasi cukup dilakukan pada kelasSuper yang menjadi basis dari SubKelas tersebut.
·        Hemat waktu, biaya dan tenagadalam 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