Dokumen ini membahas tentang enkapsulasi dalam pemrograman berorientasi objek. Enkapsulasi berarti membungkus atau mempaketkan data dan metode di dalam kelas untuk melindungi data dan menyederhanakan penggunaan kelas. Enkapsulasi mendorong penggunaan abstraksi dan modularitas untuk membuat program lebih fleksibel dan mudah digunakan kembali.
2. Pendahuluan
Maksud dari enkapsulasi adalah pembungkusan.
Sama seperti kapsul obat. Obat dibungkus di dalam kapsul
supaya tidak terurai dan rapi. Obat kapsul juga
menyembunyikan isinya yang membuat kita tidak tahu
apa isi di dalamnya.
Begitu juga dengan enkapsulasi pada pemrograman
berorientasi objek.
3. Enkapsulasi pada Pemrograman
Tujuan enkapsulasi pada pemrograman adalah
pembungkusan data teknis (atribut dan method) dari
pengguna, bukan penyembunyian (information hiding).
Data teknis ini dibungkus dalam sebuah unit yang telah
dijelaskan sebelumnya yaitu kelas atau class.
Jadi bisa dianalogikan bahwa data teknis adalah obat, dan
kelas adalah kapsulnya sehingga menjadi rapi.
4. Enkapsulasi pada Pemrograman - 2
Dengan enkapsulasi dalam sebuah kelas inilah yang
membuat pemrograman berorientasi objek lebih fleksibel
untuk memodelkan kasus nyata.
Penggunaan kembali kelas-kelas menjadi lebih mudah
dibanding dengan pendefinisian fungsi-fungsi di
pemrograman berparadigma prosedural.
5. Enkapsulasi dan Penyembunyian Informasi
Inti dari enkapsulasi adalah membungkus (bundling) data
dan method, bukan menyembunyikan informasi.
Enkapsulasi memang memfasilitasi penyembunyian
informasi, tetapi tidak menjamin keamanan data.
Penyembunyian informasi berusaha melindungi kelas klien
(client class) dari kerja internal kelas, berbeda dengan
makna enkapsulasi sebenarnya.
6. Konsep Enkapsulasi
Dinbandingkan penyembunyian informasi, konsep ini lebih
berhubungan dengan modularitas dan abstraksi.
Setiap program yang baik memiliki abstraksi dan
modularitas terhadap bagian-bagian tertentu pada kelas /
objeknya.
7. Abstraksi
Jika menganalogikan abstraksi dengan mobil, terdapat
setir, pedal gas, rem, dll. Kita dapat menggunakannya, tapi
kita tidak tahu tepatnya bagaimana komponen tersebut
bekerja. Itulah abstraksi pada dunia nyata.
Begitu juga program, terdapat sebuah kelas yang terdiri
dari berbagai fungsi dan prosedur. Kita bisa memakainya,
tetapi kita belum tentu bisa mengetahui cara kerja dari
fungsi atau prosedur tersebut dengan berinteraksi dengan
antarmuka saja (interface)
8. Contoh Abstraksi
Contoh abstraksi paling sederhana adalah getter dan
setter. Tujuannya masing-masing adalah untuk mengambil
dan menetapkan nilai dari data pada sebuah objek.
Contoh:
Terdapat sebuah class Bola dengan atribut berat dan
diameter. Maka terdapat 2 getter yaitu getBerat dan
getDiameter. Begitu juga terdapat 2 setter yaitu setBerat
dan setDiameter.
9. Modularity
Modularity adalah sebuah konsep yang memisah-misah
menjadi beberapa modul kecil dengan fungsi spesifiknya
untuk mempermudah pemakaian kembali (reusability).
Contoh:
Pemisahan fungsi hitungLuas dengan hitungKeliling pada
kelas BangunDatar.
10. Mengapa Enkapsulasi?
Selain merapikan, Kita mencegah modifikasi data secara
langsung, bukan penyembunyian datanya.
Dalam kasus ini memang tetap membuat atribut dari data
menjadi tidak dapat diakses dari luar (private), sehingga
data tersembunyi dan hanya boleh diakses atau
dimodifikasi oleh method pada kelas tersebut.
11. Mengapa Enkapsulasi? - 2
Mengapa perlu perlindungan terhadap akses langsung?
Asumsikan seperti ini:
Kita punya 2 objek: objek “Jahat” dan objek “Akun”. Kita
akan memanggil keduanya. Misalkan objek Akun memiliki
atribut “saldo”. Jika atribut tidak dibuat privat (public), Kita
dapat menggunakan objek jahat untuk memanipulasi data
“saldo” pada objek Akun.
12. Mengapa Enkapsulasi? - 3
Dengan metode ini, berarti objek Jahat hanya bisa
memakai metode pada objek Akun untuk memanipulasi
data. Misal objek Akun memiliki method “tambahSaldo”
dan dipanggil oleh objek Jahat yang ingin memanipulasi
dengan menambah saldo negatif sehingga berkurang.
Objek Jahat Objek Akun
-500000
tambahSaldo()
saldo = 1000000
fungsiJahat()
dataJahat
13. Mengapa Enkapsulasi? - 4
Karena enkapsulasi, Objek Jahat memang tetap bisa
mengirimkan nilai untuk melakukan “tambahSaldo” dari
objek Akun, tetapi objek Jahat tidak tahu logika operasi
metode tambahSaldo (abstraksi) bahwa jika saldo yang
ditambah kurang dari 0, maka tidak akan dilakukan.
Objek Jahat Objek Akun
-500000
tambahSaldo()
saldo = 1000000
fungsiJahat()
dataJahat
14. Pesan (Message)
Untuk berkomunikasi antara objek satu dengan lainnya,
dikirimkan pesan.
Pesan itu dikirimkan melalui metode yang ada pada
sebuah objek atau ketika pembuatan sebuah objek.
15. Contoh Implementasi
public class Hewan { // kelas yang terenkapsulasi baik
private String nama; // data atribut di set privat
private int umur; // data yang bersifat privat tidak bisa diakses sembarang dari luar
public int getUmur() { // pembentukan getter dan setter merupakan bentuk abstraksi
return umur; // terdapat getter untuk tiap data atribut
} // getter ini untuk mengambil data dari kelas yang ada
public String getNama() {
return nama;
}
public void setUmur(int umurBaru) { // terdapat juga setter untuk tiap data atribut
umur = umurBaru;
}
public void setNama(String namaBaru) {
nama = namaBaru;
}
}