Pengkapsulan

Jumat, 02 Desember 2011 0 komentar

Seorang programmer tentu sudah terbiasa memandang suatu aplikasi ataupun kelas dan interface referensi (API) sebagai suatu modul yang terbungkus rapi. Kita tidak perlu mengetahui implementasi (source code) dari modul-modul tersebut, yang perlu kita ketahui hanyalah variabel/peubah yang menjadi input atau output program tersebut, serta bagaimana ia berinteraksi dengan “dunia luar”.
Pengkapsulan adalah bagaimana kita me-“wrapping” atau membungkus data dan method yang menyusun kelas sehingga kelas tersebut bisa dipandang sebagai suatu modul. Termasuk di sini adalah menentukan hak akses dunia luar terhadap attribute dan method dalam suatu kelas. Dalam dunia pemrograman disebut “Information Hiding”.Java menggunakan 3 eksplisit keyword untuk setting batasan / hak akses dunia luar terhadap suatu kelas, yaitu private, protected, dan public.Private berarti tidak seorang pun di “dunia luar” boleh mengaksesnya, jika ia berupa atribut, maka akses dari luar hanya bisa dilakukan melalui method, yang tentu saja, method itu tidak bersifat private dunks….
Contoh neh…:
Kita punya kelas Resep.

class Resep{
//atribut private ini tidak bisa diisi langsung dari luar kelas..
private String jenis;
private String namakue;
//konstruktor...
Resep(String n){
this.namakue=n;
}
void isiJenis(String j){
this.jenis=j;
System.out.print(this.namakue+" itu “+this.jenis);
}

//function...
String kadaluarsa(){
String tahan="";
if (jenis.equals("kue basah")){
tahan=" -- > cepet kadaluarsa";
}else{
tahan=" --> lama kadaluarsanya..";
}
//nilai yang dikembalikan..
return tahan;
}
}


Kelas di atas akan diturunkan menjadi kelas Basah, yaitu berisi sifat kue basah.
Kita akan mencoba langsung mengisikan atribut jenis pada kelas parent-nya.

class Basah extends Resep{
Basah(String n){
super(n);
this.jenis="kue basah";
}
}


Apa yang terjadi ketika kita kompilasi ???

F:\”data samson”\modul\modultutorialjava>javac Basah.java
Basah.java:5: jenis has private access in Resep
this.jenis="kue basah";
^
1 error
Error di atas terjadi karena si turunan berusaha langsung mengakses atribut private yang dipunya oleh parent-nya. Gimana cara mengaksesnya? Ya harus pakai method donk, nah, seperti ini deh ☺
class Basah extends Resep{
Basah(String n){
super(n);
//methodnya...
isiJenis("kue basah");
}
}

}Kue tart adalah jenis kue basah.
class Tart{
public static void main(String args[]){
Basah tart=new Basah("Kue Tart");
System.out.println(tart.kadaluarsa());
}
}
Jika dikompilasi dan dirun akan menjadi seperti ini :
F:\”data samson”\modul\modultutorialjava>javac Tart.java
F:\”data Samson”\modul\modultutorialjava>java Tart
Kue Tart itu kue basah -- > cepet kadaluarsa



Protected hampir sama dengan private, hanya saja, ia bisa diakses oleh kelas bawahannya tanpa menggunakan perantara, jadi bisa secara langsung diakses asalkan memenuhi syarat :
􀃎 Dalam satu kelas itu sendiri, atau kelas bawahannya, ia tidak bisa diakses oleh kelas yang tidak ada hubungan dengan kelas itu sama sekali.
Syarat dan ketentuan berlaku :
Akses tidak melalui instansiasi / pembentukan object, kalau melalui instansiasi, protected hanya tidak bisa diakses ketika dia berada pada package yang berbeda.
Contoh :
//disimpan dalam folder satu
package satu;
public class MakhlukHidup{
protected String nyawa;
}





//disimpan dalam folder dua
package dua;
import satu.*;
public class Tumbuhan{
public Tumbuhan(String n){
MakhlukHidup mh=new MakhlukHidup();
mh.nyawa="Roh...";
}
}
Ketika dicompile, wew…apa yang terjadi ???
F:\data samson\modul\modultutorialjava\waduh>javac dua\Tumbuhan.java
dua\Tumbuhan.java:6: nyawa has protected access in satu.MakhlukHidup
mh.nyawa="Roh...";
^
1 error


Hm…, ga bisa diakses ya? Ya iya lah,…nah, coba ganti modifier protected pada atribut nyawa dengan modifier Public, Pasti bisa diakses, nah, sekarang tahu kan perbedaan public sama protected ???

Silahkan mencoba dan mempelelajarinya..

Polimorfisme

0 komentar

Salah satu pilar Pemrograman Berorientasi Objek yang lain adalah polymorfisme yaitu kemampuan beberapa objek bertipe sama bereaksi secara berbeda terhadap “pesan”
yang sama.

Sebagai contoh, kita tambahkan satu kelas lagi dari kelas manusia, yaitu kelas dosen.
Diimplementasikan dalam bahasa Java :
class Dosen extends Manusia{
Dosen(String n){
super(n);
}
void kerja(){
System.out.println("mengajar...mengajar...");
}
}

Rino adalah Dosen keturunan Manusia.
class Rino{
public static void main(String args[]){
Dosen rino=new Dosen("Rino Handiarto");
System.out.println(rino.tampilkanNama());
rino.makan();
rino.kerja();
}
}
//dicompile dan dirun……
F:\"datasamson"\modul\modultutorialjava>javac Rino.java
F:\"data Samson"\modul\modultutorialjava>java Rino
Rino Handiarto
hem...enyak..enyak..enyak...
mengajar...mengajar...

Kemudian angga si mahasiswa, dan Rino si dosen, diperintahkan untuk bekerja, nah lho, apa reaksinya ?

class worker{
public static void main(String args[]){
//masukkan dalam array ( -->akan dibahas lebih lanjut...
Manusia[] profesi=new Manusia[2];
profesi[0] = new Mahasiswa("Angga Darmawan");
profesi[1] = new Dosen("Rino Handiarto");
profesi[0].kerja();
profesi[1].kerja();
}
}
F:\"data Samson"\modul\modultutorialjava>javac worker.java
F:\"data Samson"\ modul\modultutorialjava>java worker
belajar...belajar...
mengajar...mengajar...


Dari contoh di atas, terlihat, pesan yang sama, akan menghasilkan reaksi yang berbeda tergantung methodnya.

Pewarisan

0 komentar

 Pewarisan
Salah satu kelebihan pemrograman berorientasi Objek adalah penggunaan ulang kode-kode yang telah dibuat. Pewarisan adalah salah satu cara diantaranya.
Sebagai contoh, kelas Manusia diturunkan menjadi kelas Mahasiswa.


class Mahasiswa extends Manusia{
//konstruktor Mahasiswa
Mahasiswa(String n){
//memanggil konstruktor Manusia
super(n);
}
//method bentukan baru...
void kerja(){
System.out.println("belajar...belajar...");
}
}


Angga adalah seorang Mahasiswa keturunan Manusia, setelah dia kerja, dia makan.
class Angga{
public static void main(String args[]){
Mahasiswa angga = new Mahasiswa("Angga Darmawan");
System.out.println("Nama : "+angga.tampilkanNama());
angga.kerja();
angga.makan();
}
}
Hasil Compile dan Runningnya :
C:\modultutorialjava>javac Angga.java
C:\ modultutorialjava>java Angga
Nama : Angga Darmawan
belajar...belajar...
hem...enyak..enyak..enyak...


Setelah object angga memberi tahu namanya, dia kerja dengan method khusus kelas Mahasiswa dan terakhir dia makan dengan method warisan dari kelas Manusia. Kelas turunan akan mewariskan atribut-atribut dan method-method baseclass/parentclass-nya.
Ketika angga makan, dia makan dengan method Manusia, tetapi ketika kerja, dia kerja dengan method baru yang didefinisikan khusus pada kelas Mahasiswa(“belajar…belajar…”), inilah yang disebut dengan method overriding.

 
Vengeance Andritera © 2011 | Designed by Bingo Cash, in collaboration with Modern Warfare 3, VPS Hosting and Compare Web Hosting