Baru-baru ini salah seorang teman saya bertanya kepada saya tentang konsep encapsulation. Padahal dia sudah bekerja sebagai seorang programmer juga selama 1 tahun lebih, namun status dia sebagai programmer VB.Net yang notabene bersifat prosedural.😀 Nah jadi saya berpikir untuk menulis di blog saja, sehingga jika nanti ada yang bertanya kepada saya, saya tinggal tunjukkan blog saya saja.

Inti dari encapsulation itu adalah memberikan proteksi terhadap instance variable (state) dari dunia luar.😀 Sebagai contoh saya mempunyai sebuah class Mobil

public class Mobil
{
    int speed;
}
 

Dengan membuat class seperti itu maka berbagai instance yang menunjuk ke object Mobil dapat dengan mudah memberikan nilai ke variable speed. Misalnya di class A terdapat code berikut

Mobil a = new Mobil();
a.speed = -10;

Nah terlihat kan bahwa instance variable speed menjadi seperti telanjang (tidak ada proteksi terhadap dirinya). Kita dapat memberikan berbagai nilai ke variable speed, termasuk nilai negatif. Pada kenyataannya kita tentu tidak mengijinkan nilai negatif dimasukkan ke dalam variable speed.

Oleh karena itu kita perlu merubah desain class kita menjadi

public class Mobil
{
    private int speed;

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        if(speed>0) this.speed = speed;
    }

} 

Kalian sudah mengetahui kegunaan dari keyword private dan public kan ? Jika belum silahkan baca tulisan saya mengenai Members dan access modifiers untuk members. Dari disain class baru tersebut terlihat kan jika variable speed hanya bisa diisi dengan angka yang lebih besar dari 0.

Lalu bagaimana jika kita memaksa dengan mengisi nilai negatif ? Misalnya seperti berikut

public static void main(String [] args)
{
     Mobil a = new Mobil();
     a.setSpeed(-88);
     System.out.println(a.getSpeed());
} 

Jika dijalankan maka outputnya adalah 0. Mengapa begitu, padahal kan nilai -88 tidak dimasukkan ke dalam instance variable speed ? Ingat variable dan instance variable itu berbeda. Instance variable  selalu memiliki default value,  sedangkan variable tidak memiliki default value.  Jika kita mendeklarasikan variable biasa tanpa melakukan inisialiasi, lalu kita memanggil variable tersebut. Maka saya yakin 100% akan terjadi exception.

Sebagai informasi jika kita mendeklarasikan instance variable bertipe integer, maka default valuenya adalah 0. Jika bertipe float maka default valuenya adalah 0.0. Jika bertipe boolean maka default valuenya adalah false. Dan jika instance variablenya merupakan suatu reference variable ke suatu object maka default valuenya adalah null.

Leave a Reply

Fill in your details below or click an icon to log in:

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