Enkapsulasi 
Pemrograman 
Berorientasi Objek 
Georgius Rinaldo 
dodo@kuliahkita.com
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.
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.
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.
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.
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.
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)
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.
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.
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.
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.
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
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
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.
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; 
} 
}

03 enkapsulasi

  • 1.
    Enkapsulasi Pemrograman BerorientasiObjek Georgius Rinaldo dodo@kuliahkita.com
  • 2.
    Pendahuluan Maksud darienkapsulasi 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 PenyembunyianInformasi 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 Dinbandingkanpenyembunyian 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 menganalogikanabstraksi 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 Contohabstraksi 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 adalahsebuah 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? Selainmerapikan, 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) Untukberkomunikasi 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 publicclass 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; } }