Mengenal Pemrograman Berorientasi Objek | Perbedaan Private dan Protected

Pada artikel sebelumnya yaitu Mengenal Pemrograman Berorientasi Objek | Modifier, telah dibahas tentang tiga modifier. Tapi masih kita temukan satu hal yang sama yaitu moda pengaksesan member dengan modifier private dan protected.

Apa kesamaannya ? Yaitu sama-sama di akses dengan setter-getter dan berhasil 😁
Disini akan dibahas tentang bedanya, agar bisa lebih memahami perbedaannya. Mari ingat kembali definisi yang telah baca sebelumnya terkait modifier ini :

Pertama, Public

Merupakan modifier yang memungkinkan sebuah member class dapat di akses bebas. Baik dari dalam class ataupun dari luar class.

Kedua, Private

Merupakan modifier yang membuat sebuah member hanya dapat di akses dari dalam class dan objek yang dibuat dari class turunan, tidak diperkenankan untuk mengakses member class dari objek yang di instance langsung dari class induk ( error ).

Ketiga, Protected

Merupakan modifier yang dimana membernya hanya dapat diakses menggunakan method setter dan getter di kelas itu sendiri dan sub class / turunan dari class tersebut.

Skip untuk modifier public, langsung dengan dua saudaranya yang lain.  Kita ubah class sebelumnya menjadi :

    class Buku {
        public $nama;
        private $penulis;
        protected $penerbit;
        var $tahunTerbit;  
    }

Lalu kita buat lanjutkan dengan membuat sebuah class turunan dari class Buku {}. Gunakan kata kunci extends untuk membuat class turunan :

    class Penulis extends Buku { }

Penulis diatas merupakan class turunan yang mewarisi seluruh member dan karakteristik dari class Buku {}. Selanjutnya kita tambahkan method setter dan getter di dalamnya :

Bisa juga kita tambahkan member lain, seperti contoh menambahkan property $namaPenulis

        public $namaPenulis;
        public function setPenulis($namaPenulis) {
            $this->penulis = $namaPenulis;
        }

        public function getPenulis() {
            echo $this->penulis;
        }

Kode class induk ( Buku {} ) dan class turunan ( Penulis {} ) menjadi :

<?php
    class Buku {
        public $nama;
        private $penulis;
        protected $penerbit;
        var $tahunTerbit;  
    }

    class Penulis extends Buku {
        public $namaPenulis;
        public function setPenulis($namaPenulis) {
            $this->penulis = $namaPenulis;
        }

        public function getPenulis() {
            echo $this->penulis;
        }
    }
?>

Sekarang mari kita buat objek untuk masing-masing class tersebut

    $buku = new Buku();
    $dataBuku = new Penulis();

Mari kita akses langsung properti $penulis menggunakan objek $buku :

    $buku->penulis = "Ahmad Istakim Sy"; // akses member private penulis dari objek class induk
    echo $buku->penulis;
    echo "<hr>";

Lihat hasilnya di browser :

Hasilnya Error 👀
Sekarang mari kita coba untuk mengakses melalui objek yang dibuat dari class turunan 
    $dataBuku->penulis = "Ahmad Istakim"; // akses member private penulis dari objek class turunan
    echo $dataBuku->penulis;
    echo "<hr>";

Bagaimana hasilnya, cek di browser!


Wow, berhasil ternyata ya :)
Muncul datanya, sesuai dengan definisi yang disebutkan di awal tadi bahwa Private :
Merupakan modifier yang membuat sebuah member hanya dapat di akses dari dalam class dan objek yang dibuat dari class turunan, tidak diperkenankan untuk mengakses member class dari objek yang di instance langsung dari class induk ( error ).
Kode lengkap untuk private :
<?php
    class Buku {
        public $nama;
        private $penulis;
        protected $penerbit;
        var $tahunTerbit;  
    }

    class Penulis extends Buku {
        public $namaPenulis;
        public function setPenulis($namaPenulis) {
            $this->penulis = $namaPenulis;
        }

        public function getPenulis() {
            echo $this->penulis;
        }
    }

    class Penerbit extends Buku {
        public $namaPenerbit;
        public function setPenerbit($namaPenerbit) {
            $this->penerbit = $namaPenerbit;
        }

        public function getPenerbit() {
            echo $this->penerbit;
        }
    }

    $buku = new Buku();
    $dataBuku = new Penulis();

    $buku->penulis = "Ahmad Istakim Sy"; // akses member private penulis dari objek class induk
    echo $buku->penulis;
    echo "<hr>";

    $dataBuku->penulis = "Ahmad Istakim"; // akses member private penulis dari objek class turunan
    echo $dataBuku->penulis;
    echo "<hr>";
?>

Perkodingan akan cepat dipahami jika dilakukan sambil praktik! Tidak hanya sekedar membaca. Kesimpulan akan mengikuti seiring dengan seringnya melakukan coding

Berikutnya untuk modifier protected, mari kita lakukan uji dengan kode : 

        public $nama;
        private $penulis;
        protected $penerbit;
        var $tahunTerbit;  

Yang akan kita operasikan sekarang member $penerbit dengan modifier protected.

Buat class turunan Penerbit dari class Buku {} :

    class Penerbit extends Buku {
        public $namaPenerbit;
        public function setPenerbit($namaPenerbit) {
            $this->penerbit = $namaPenerbit;
        }

        public function getPenerbit() {
            echo $this->penerbit;
        }
    }

Kemudian buat dua objek, sama seperti tadi. Satu objek untuk class induk dan satu untuk class turunan :

    $buku = new Buku();
    $dataBuku = new Penerbit();

Di bagian bawah objek, kita akses member property $penerbit dengan objek dari class induk terlebih dahulu :

    $buku->penerbit = "Ahmad Istakim Sy"; // akses member protected dari objek class induk
    echo $buku->penerbit;
    echo "<hr>";

Kode lengkapnya :

<?php
    class Buku {
        public $nama;
        private $penulis;
        protected $penerbit;
        var $tahunTerbit;  
    }

    class Penulis extends Buku {
        public $namaPenulis;
        public function setPenulis($namaPenulis) {
            $this->penulis = $namaPenulis;
        }

        public function getPenulis() {
            echo $this->penulis;
        }
    }

    class Penerbit extends Buku {
        public $namaPenerbit;
        public function setPenerbit($namaPenerbit) {
            $this->penerbit = $namaPenerbit;
        }

        public function getPenerbit() {
            echo $this->penerbit;
        }
    }

    $buku = new Buku();
    $dataBuku = new Penerbit();

    $buku->penerbit = "Ahmad Istakim Sy"; // akses member protected dari objek class induk
    echo $buku->penerbit;
    echo "<hr>";

Mari jalankan kode kita, apa hasilnya?

Wew, error bukan ?
Sekarang kita coba akses dengan objek yang dibuat dari class turunan :
    $dataPenerbit = new Penerbit(); // instance objek dari class turunan
    $dataPenerbit->penerbit = "AIS Press"; // akses member protected penerbit dari objek class turunan
    echo $dataPenerbit->penerbit;

Mari jalankan di browser :
Tetap error nih 👀
Tapi, memang begitu. Member class dengan modifier protected tidak bisa diakses langsung baik dengan objek class induk atau turunan. Sesuai lagi kan dengan definisi modifier protected di awal. Sampai sini paham perbedaan dari modifier private dan protected ?

Kesimpulan dari dua modifier ini adalah member property tidak bisa di akses langsung dengan objek yang di instance dari class induk. Tetapi untuk untuk modifier private, di izinkan langsung mengakses member dengan objek dari class turunan.
Keduanya memiliki persamaan bisa diakses baik dari objek class induk / turunan jika menggunakan method ( setter - getter ) dalam operasinya. Baca kembali : Mengenal Method Setter - Getter
Semoga membantu! Mangatz...


Ahmad Istakim

Alumni dari jurusan Manajemen Informatika di Universitas Sains Al-Qur'an (UNSIQ ) Wonosobo. Tertarik dalam bidang pendidikan, teknologi komputasi dan disiplin ilmu keislaman ( Tafsir, Hadits, Arudl, Nahwu-Sharaf, Fiqh maupun Aqidah ) - https://s.id/blog-islamQ. Pernah juga mengenyam pendidikan di beberapa pesantren yang ada di Kab. Wonosobo dan Kab. Purworejo

Posting Komentar

Lebih baru Lebih lama