Dragonica Emoticon Sparkly Eye
3 Des 2011

Pengkapsulan

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..

0 komentar:

Posting Komentar

 
;