Bag. 4 : Pengertian Enkapsulasi Objek (Public, Protected dan Private)
Pengertian Enkapsulasi (Encapsulation)
Enkapsulasi (encapsulation) adalah sebuah metoda untuk mengatur
struktur class dengan cara menyembunyikan alur kerja dari class tersebut. Struktur class yang dimaksud adalah property
dan method. Dengan enkapsulasi, kita bisa membuat pembatasan akses kepada
property dan method, sehingga hanya property dan method tertentu saja yang bisa
diakses dari luar class. Enkapsulasi juga dikenal dengan istilah ‘information
hiding’.
Dengan enkapsulasi, kita bisa memilih property dan method apa saja
yang boleh diakses, dan mana yang tidak boleh diakses. Dengan menghalangi kode
program lain untuk mengubah property tertentu, class menjadi lebih terintegrasi,
dan menghindari kesalahan ketika seseorang ‘mencoba’ mengubahnya. Programmer
yang merancang class bisa menyediakan property dan method khusus yang memang
ditujukan untuk diakses dari luar.
Melanjutkan analogi tentang class laptop, perusahaan pembuat
laptop telah menyediakan ‘method’ khusus untuk menghidupkan laptop, yakni
dengan cara menekan tombol on. Di dalam laptop sendiri, banyak ‘method-method’
lain yang akan dijalankan ketika kita menyalakan laptop, contohnya: mengirim
sinyal booting ke processor, mengirim data dari processor ke memory, dan
mengirim sinyal listrik ke LED di monitor. Akan tetapi, proses ini adalah
method internal laptop dimana kita tidak perlu memahaminya untuk menghidupkan
laptop.
Enkapsulasi
Objek: Public, Protected dan Private
Untuk membatasi hak akses kepada property dan method di dalam
sebuah class, Objek Oriented Programming menyediakan 3 kata kunci, yakni
Public, Protected dan Private. Kata kunci ini diletakkan sebelum nama property
atau sebelum nama method. Berikut adalah pembahasannya:
Pengertian
Hak Akses: Public
Ketika sebuah property atau method dinyatakan sebagai public, maka
seluruh kode program di luar class bisa mengaksesnya, termasuk class turunan.
Berikut adalah contoh penulisan public property dan public method dalam PHP:
<?php
//
buat class laptop
class
laptop {
// buat public property
public $pemilik;
// buat public method
public function hidupkan_laptop() {
return "Hidupkan Laptop";
}
}
//
buat objek dari class laptop (instansiasi)
$laptop_anto
= new laptop();
//
set property
$laptop_anto->pemilik="Anto";
//
tampilkan property
echo
$laptop_anto->pemilik; // Anto
//
tampilkan method
echo
$laptop_anto->hidupkan_laptop(); // "Hidupkan Laptop"
?>
Perhatikan penambahan kata public sebelum nama property dan nama
method. Kode di atas pada dasarnya sama dengan contoh class laptop kita dalam
tutorial sebelum ini. Jika hak akses
property dan method tidak ditulis, maka PHP menganggapnya sebagai public.
Pengertian
Hak Akses: Protected
Jika sebuah property atau method dinyatakan sebagai protected,
berarti property atau method tersebut tidak bisa diakses dari luar class, namun
bisa diakses oleh class itu sendiri atau turunan class tersebut.
Apabila kita mencoba mengakses protected property atau protected
method dari luar class, akan menghasilkan error, seperti contoh berikut ini:
<?php
//
buat class laptop
class
laptop {
// buat protected property
protected $pemilik;
// buat protected method
protected function hidupkan_laptop() {
return "Hidupkan Laptop";
}
}
//
buat objek dari class laptop (instansiasi)
$laptop_anto
= new laptop();
//
set protected property akan menghasilkan error
$laptop_anto->pemilik="Anto";
//
Fatal error: Cannot access protected property laptop::$pemilik
//
tampilkan protected property akan menghasilkan error
echo
$laptop_anto->pemilik;
//
Fatal error: Cannot access protected property laptop::$pemilik
//
jalankan protected method akan menghasilkan error
echo
$laptop_anto->hidupkan_laptop();
//
Fatal error: Call to protected method laptop::hidupkan_laptop()
//
from context
?>
Dalam contoh di atas, pemanggilan property $pemilik dan method
hidupkan_laptop() dari luar class akan menghasilkan error. Walaupun akses level protected tidak bisa
diakses dari luar class, namun bisa diakses dari dalam class itu sendiri,
berikut adalah contohnya:
<?php
//
buat class laptop
class
laptop {
// buat protected property
protected $pemilik="Anto";
public function akses_pemilik() {
return $this->pemilik;
}
protected function hidupkan_laptop() {
return "Hidupkan Laptop";
}
public function paksa_hidup() {
return $this->hidupkan_laptop();
}
}
//
buat objek dari class laptop (instansiasi)
$laptop_anto
= new laptop();
//
jalankan method akses_pemilik()
echo
$laptop_anto->akses_pemilik(); // "Anto"
//
jalankan method paksa_hidup()
echo
$laptop_anto->paksa_hidup(); // "Hidupkan Laptop"
?>
Hampir sama dengan contoh kita sebelumnya, property $pemilik di
deklarasikan sebagai protected, sehingga pengaksesan dari luar class akan
menghasilkan error. Oleh karena itu, saya membuat sebuah public method yang
akan menampilkan hasil property $pemilik, yakni method akses_pemilik(). Begitu juga dengan method hidupkan_laptop()
yang tidak bisa diakses secara langsung. Saya menambahkan method paksa_hidup()
yang secara internal akan mengakses method hidupkan_laptop(). Selain dari dalam class itu sendiri, property
dan method dengan hak akses protected juga bisa diakses dari class turunan
(Kita akan membahas tentang penurunan class dalam tutorial lain):
<?php
//
buat class komputer
class
komputer{
// property dengan hak akses protected
protected $jenis_processor = "Intel
Core i7-4790 3.6Ghz";
}
//
buat class laptop
class
laptop extends komputer{
public function tampilkan_processor() {
return $this->jenis_processor;
}
}
//
buat objek dari class laptop (instansiasi)
$laptop_baru
= new laptop();
//
jalankan method
echo
$laptop_baru->tampilkan_processor(); // "Intel Core i7-4790
3.6Ghz"
?>
Pada kode di atas, walaupun method $jenis_processor di set sebagai
protected pada class komputer, tetapi masih bisa diakses dari class laptop yang
merupakan turunan dari class komputer.
Pengertian
Hak Akses: Private
Hak akses terakhir dalam konsep enkapsulasi adalah private. Jika
sebuah property atau method di-set sebagai private, maka satu-satunya yang bisa
mengakses adalah class itu sendiri. Class lain tidak bisa mengaksesnya, termasuk
class turunan. Sebagai contoh, berikut
adalah hasil yang di dapat jika kita mengakses property dan method dengan level
private:
<?php
//
buat class komputer
class
komputer {
// property dengan hak akses protected
private $jenis_processor = "Intel Core
i7-4790 3.6Ghz";
public function tampilkan_processor() {
return $this->jenis_processor;
}
}
//
buat class laptop
class
laptop extends komputer{
public function tampilkan_processor() {
return $this->jenis_processor;
}
}
//
buat objek dari class laptop (instansiasi)
$komputer_baru
= new komputer();
$laptop_baru
= new laptop();
//
jalankan method dari class komputer
echo
$komputer_baru->tampilkan_processor(); // "Intel Core i7-4790
3.6Ghz"
//
jalankan method dari class laptop (error)
echo
$laptop_baru->tampilkan_processor();
//
Notice: Undefined property: laptop::$jenis_processor
?>
Dalam kode di atas, saya membuat 2 buah class, yakni class
komputer, dan class laptop. Class laptop merupakan turunan dari class komputer.
Di dalam class komputer terdapat property $jenis_processor dengan akses level
private. Di dalam class komputer dan class laptop, saya membuat method
tampilkan_processor() yang digunakan untuk mengakses property $jenis_processor.
Pengaksesan method tampilkan_processor() dari objek $komputer_baru
sukse ditampilkan karena berada di dalam satu class dimana property
$jenis_processor berada. Akan tetapi,
jika method tampilkan_processor() diakses dari objek $laptop_baru yang
merupakan turunan dari class komputer, PHP akan mengeluarkan error karena
property $jenis_processor tidak dikenal.
Akses level private sering digunakan untuk menyembunyikan property dan
method agar tidak bisa diakses di luar class.

Post a Comment