Enkapsulasi (encapsulation) adalah suatu cara/metode untuk menyembunyikan informasi yang terdapat didalam suatu class. Informasi yang dimaksud adalah properti dan method. Dengan enkapsulasi, pembatasan akses kepada properti dan method dapat dilakukan sehingga hanya properti dan method tertentu saja yang dapat diakses dari luar class. Dua hal yang mendasar dalam enkapsulasi yaitu information hiding dan interface to access data.
Ada dua hal yang mendasar dari enkapsulasi yaitu information hiding dan interface to access data, yaitu :
- Information hiding, maksudnya adalah menyembunyikan informasi dari suatu class agar tidak bisa diakses oleh class lainnya dengan cara memberikan modifier private pada variabel yang akan disembunyikan.
- Interface to access data, sesuai dengan namanya, digunakan untuk mengakses nilai dari suatu variabel yang telah disembunyikan oleh information hiding baik itu mengambil nilai ataupun mengubah nilai. Hal ini dilakukan dengan menggunakan method, dengan method ini kita dapat mengakses variabel yang telah mengalami information hiding.
Enkapsulasi merupakan salah satu sifat dari PBO. Secara bahasa enkapsulasi berarti pengkapsulan sebuah data. Coba kita misalkan seperti obat yang berbentuk kapsul, tujuannya obat dibentuk kapsul adalah melindungi isi obat yang ada di dalam kapsul agar tidak mudah rusak. Hal ini tidak berbeda jauh dengan enkapsulasi yang ada di java.
Class dalam program Java dapat saling berhubungan dengan cara memberikan akses terhadap member mereka. Salah satu hubungan class yang pernah kita pelajari adalah inheritance (pewarisan). Semua yang ada di dalam class (atribut dan method) disebut member, biasanya akan ada tingkatan akses yang disebut modifier.
Pada hubungan inheritance, semua member di dalam class induk akan bisa diakses oleh class anak (subclass), kecuali member tersebut diberikan modifier private. Modifier tidak hanya bisa diberikan kepada member saja. Tapi juga bisa diberikan kepada interface, enum dan class itu sendiri.
Enkapsulasi 1 Perhatikan kode program berikut :
Yang di garis bawahi pada kode di atas adalah modifier. Modifier ini nanti akan menentukan batasan akses member dan class.
Modifier di dalam Java
Secara umum ada 3 macam modifier yang digunakan dalam Java, yaitu public, private dan protected. Apabila kita tidak menggunakan tiga kata kunci tersebut, maka member atau class itu tidak menggunakan modifier (no modifier). Masing-masing modifier akan menentukan di mana saja member bisa diakses.
Berikut ini tabel jangkauan untuk masing-masing modifier :
Pada tabel di atas apabila kita tidak menggunakan modifier (no modifier), maka class dan member hanya akan bisa diakses dari Class itu sendiri dan package (class yang berada satu package dengannya). Agar bisa diakses dari mana saja, maka kita harus memberikan modifier public.
Berikut adalah penjelasan dari 3 modifier di dalam enkapsulasi :
1. Public
Modifier public akan membuat member dan class bisa di akses dari mana saja, contoh :
package belajarjava; class Person { public String name; public changeName(String newName){ this.name = newName; } }
Pada class Person terdapat dua member, yaitu :
-
- atribut name
- method changeName()
Kedua member tersebut kita berikan modifier public, artinya mereka akan bisa diakses dari mana saja. Namun, class Person tidak kita berikan modifier. Maka yang akan terjadi adalah class tersebut tidak akan bisa diimpor (diakses) dari luar package.
Class Person berada di dalam package belajarjava, lalu kita coba akses dari Author.java yang berada dalam package latihan, maka yang akan terjadi adalah error seperti gambar di atas. Solusinya supaya bisa diakses dari luar package, kita harus menambahkan modifier public ke dalam class Person.
package belajarjava; public class Person { public String name; public changeName(String newName){ this.name = newName; } }
Maka error akan menghilang dan class Person bisa diimpor dari package manapun. Pada class diagram, modifier public digambarkan dengan simbol plus (+), contoh : Semua member dalam class Player memiliki modifier public, perhatikan simbol + yang ada di depannya.
2. Private
Modifier private akan membuat member hanya bisa diakses dari dalam class itu sendiri. Yang perlu diingat modifier private tidak bisa diberikan kepada class, enum dan interface. Contoh :
package belajarjava; public class Person { private String name; public void setName(name){ this.name = name; } public String getName(){ return this.name; } }
Pada contoh di atas, kita memberikan modifier private pada atribut name dan modifier public pada method setName() dan getName(). Apabila kita coba mengakses langsung atribut name seperti ini :
Person mPerson = new Person(); mPerson.name = "Agus Suratna";
Maka Hasilnya akan error seperti berikut :
Supaya bisa mengakses member private dari luar class, kita bisa memanfaatkan method setter dan getter. Karena method ini akan selalu diberikan modifier public.
Contoh Untuk mengakses method setter dan getter dari modifier Private :
package belajarjava; public class BelajarJava { public static void main(String[] args) { Person mPerson = new Person(); mPerson.setName("Agus Suratna"); System.out.println("Nama Orang : " + mPerson.getName()); } }
Pada class diagram, modifier private digambarkan dengan simbol minus (–).
3. Protected
Modifier protected akan membuat member dan class hanya bisa diakses dari :
-
- Class itu sendiri;
- Sub class atau class anak;
- Package (class yang berada satu package dengannya).
Modifier protected juga hanya boleh digunakan pada member saja.
Contoh :
package belajarjava; public class Person { protected String name; public void setName(String name){ this.name = name; } public String getName(){ return this.name; } }
Pada contoh di atas, kita memberikan modifier protected pada atribut name. Apabila kita coba mengakses dari class yang satu package dengannya, maka tidak akan terjadi error. Namun, apabila kita mencoba mengakses dari luar package (package yang berbeda) seperti ini :
import belajarjava.Person; package latihan; public class Author { Person p = new Person(); public Author(){ p.name="Agus Suratna"; } }
Maka akan terjadi error.
Pada class diagram (di StarUML), modifier protected digambarkan dengan tanda pagar (#).
Keuntungan Enkapsulasi
Manfaat utama teknik encapsulation adalah kita mampu memodifikasi kode tanpa merusak kode yang telah digunakan pada class lain.
Enkapsulasi memiliki manfaat sebagai berikut :
- Modularitas
Source code dari sebuah class dapat dikelola secara independen dari source code class yang lain. Perubahan internal pada sebuah class tidak akan berpengaruh bagi class yang menggunakannya.
- Information Hiding
Menyembunyikan informasi dari suatu class agar tidak bisa diakses oleh class lainnya dengan cara memberikan modifier private pada variabel yang akan disembunyikan.
comment