Pengertian Inheritance, Enkapsulasi, Polymorphism, Overloading dan Overriding.
- Pengertian Inheritance (Pewarisan)
Inheritance atau Pewarisan/Penurunan adalah konsep pemrograman dimana sebuah class dapat menurunkan property dan method yang dimilikinya kepada class lain. Konsep inheritance digunakan untuk memanfaatkan fitur ‘code reuse’ untuk menghindari duplikasi kode program.
Konsep inheritance membuat sebuah struktur atau ‘hierarchy’ class dalam kode program. Class yang akan ‘diturunkan’ bisa disebut sebagai class induk (parent class), super class, atau base class. Sedangkan class yang ‘menerima penurunan’ bisa disebut sebagai class anak (child class), sub class, derived class atauheir class.
- Cara Penggunaan Inheritance
Di dalam PHP, inheritance / penurunan dari sebuah class kepada class lain menggunakan kata kunci: ‘extends’, dengan penulisan dasar sebagai berikut:
class induk {
//...isi class induk
}
class anak extends induk
{
//... class anak bisa mengakses
//... property dan method class induk
}
Agar lebih mudah dipahami, kita akan langsung masuk kedalam contoh program penggunaan inheritance/penurunan di dalam PHP:
<?php
// buat class induk: komputer
class komputer {
public $merk;
public $processor;
public $memory;
public function beli_komputer() {
return "Beli komputer baru";
}
}
// turunkan class komputer ke laptop
class laptop extends komputer {
public function lihat_spec() {
return "merk: $this->merk, processor: $this->processor,
memory: $this->memory";
}
}
// buat objek dari class laptop (instansiasi)
$laptop_baru = new laptop();
// isi property objek
$laptop_baru->merk = "acer";
$laptop_baru->processor ="intel core i5";
$laptop_baru->memory = "2 GB";
//panggil method objek
echo $laptop_baru->beli_komputer();
echo "<br />";
echo $laptop_baru->lihat_spec();
?>
Dalam contoh kode diatas, saya membuat class komputer dengan beberapa property dan sebuah method. Property class komputer belum berisi nilai apa-apa.
Dibawah class komputer, saya membuat class laptop extends class komputer. Disini saya menurunkan class komputer kedalam class laptop. Di dalam class laptop, kita bisa mengakses seluruh property dan method apapun dari class komputer selama memiliki hak akses public atau protected.
Untuk membuktikan hal tersebut, saya membuat objek $laptop_baru dari classlaptop. Perhatikan bahwa kita bisa mengakses property $merk, $processor,dan$memory yang semuanya adalah milik class komputer, bukan class laptop. Method beli_komputer() juga sukses diakses dari objek $laptop baru. Inilah yang dimaksud dengan inheritance/penurunan class dalam OOP.
PHP tidak membatasi berapa banyak ‘penurunan objek’ yang bisa dilakukan, dalam contoh berikut, saya membuat 3 buah class yang saling ‘menurunkan’:
<?php
// buat class komputer
class komputer {
protected function beli_komputer() {
return "Beli komputer baru";
}
}
// turunkan class komputer ke laptop
class laptop extends komputer {
protected function beli_laptop() {
return "Beli laptop baru";
}
}
// turunkan class laptop ke chromebook
class chromebook extends laptop {
protected function beli_chromebook() {
return "Beli chromebook baru";
}
public function beli_semua(){
$a = $this->beli_komputer();
$b = $this->beli_laptop();
$c = $this->beli_chromebook();
return "$a <br /> $b <br /> $c";
}
}
// buat objek dari class laptop (instansiasi)
$gadget_baru = new chromebook();
//panggil method objek
echo $gadget_baru->beli_semua();
// $gadget_baru->beli_komputer();
// Fatal error: Call to protected method komputer::beli_komputer()
?>
Dalam contoh diatas, saya membuat class komputer yang diturunkan kepada classlaptop, dan kemudian diturunkan lagi kepada class chromebook. Dari dalam classchromebook ini kemudian saya memanggil method dari class diatasnya.
Jika anda perhatikan, setiap method selain method beli_semua(), memiliki hak akses protected. Hak akses protected ini ‘menghalangi’ kode program lain untuk mengaksesnya, selain class turunan.
Pada baris terakhir, saya menyisipkan kode program untuk mencoba mengakses method beli_komputer() . Kode ini sengaja saya beri tanda komentar. Jika anda menghapus tanda komentar, PHP akan mengeluarkan error yang menyatakan kita tidak bisa mengakses method dengan hak akses protected:
<?
$gadget_baru->beli_komputer();
// Fatal error: Call to protected method komputer::beli_komputer()
?>
Inilah yang dimaksud dengan enkapsulasi dalam OOP. Membatasi method yang tidak boleh diakses akan membuat kode program menjadi lebih terstruktur.
KEUNTUNGAN INHERITANCE :
1. Subclass menyediakan state/behaviour yang spesifik yang membedakannya dengan superclass, hal ini akan memungkinkan programmer Java untuk menggunakan ulang source code dari superclass yang telah ada.
2. Programmer Java dapat mendefinisikan superclass khusus yang bersifat generik, yang disebut abstract class, untuk mendefinisikan class dengan behaviour dan state secara umum.
ISTILAH INHERITANCE :
Extends : ini adalah keyword agar sebuah class menjadi subclass.
Superclass : Menunjukkan class yang berarti parent class dari subclass/class anak.
Subclass : adalah class anak atau turunan dari superclass/parent class.
Super Keyword : untuk memanggil konstruktor dari superclass atau menjadi variabel yang mengacu pada superclass.
Methode Overriding : Pendefinisian ulang method yang sama pada subclass
Dalam inheritance, method overriding berbeda dengan method overloading.
- Pengertian Polymorphism
Polymorphism merupakan salah satu konsep penting dalam object oriented programming (OOP) khususnya di bahasa pemrograman Java setelah abstraction dan inheritance. Polymorphism berarti banyak bentuk. Ada beberapa definisi berbeda tentang polymorphism yang berkaitan dengan pemrograman berorientasi obyek. Sedangkan apa yang dimaksud dengan polymorphism sendiri, sebenarnya sulit untuk didefinisikan. Sejalan dengan contoh yang diberikan, Anda diharapkan dapat mengerti dan memahami konsep polymorphism itu sendiri.
Polymorphism sering dikaitkan dengan penggunaan lebih dari satu metoda dengan nama sama. Penggunaan metoda dengan nama sama dapat diterapkan dengan method overloading dan method overriding. Peran polymorphism sebenarnya tidak terbatas hanya pada hal tersebut. Ada keterkaitan antara polymorphism dan inheritance (turunan).
Dalam konsep turunan, saat obyek dari subclass dikonstruksi, obyek dari superclass juga ikut dikonstruksi. Jadi setiap instance dari subclass adalah juga instance dari superclass. Apabila Anda mendeklarasikan metoda dengan parameter dari tipe superclass, Anda diperbolehkan untuk memberi argumen berupa obyek subclass yang merupakan turunan dari superclass tersebut.
Berikut ini adalah contoh program yang dapat memberikan gambaran terkait konsep polymorphism. Perlu dipahami dan dimengerti bahwa kelas Object merupakan akar dari semua kelas Java dan menduduki puncak tertinggi dalam hirarkhi kelas. Program akan mendefinisikan kelas yang berkaitan dengan bidang datar secara sederhana termasuk beberapa kelas turunannya (kelas PersegiPanjang dan Balok) dan membatasi hanya pada penerapan method overriding.
// Nama file : Polimorphism.java
// Contoh penerapan konsep polimorphism
public class Polimorphism {
public static void main(String[ ] args) {
cetakObyek(new Balok());
cetakObyek(new PersegiPanjang());
cetakObyek(new BangunDatar());
cetakObyek(new Object());
}
public static void cetakObyek(Object obyek) {
System.out.println(obyek);
}
} // Akhir kelas Polimorphism
class Balok extends PersegiPanjang {
public String toString() {
return "Mempunyai sisi panjang, lebar dan tinggi";
}
}
class PersegiPanjang extends BangunDatar {
public String toString() {
return "Mempunyai sisi panjang dan lebar";
}
}
class BangunDatar extends Object {
public String toString() {
return "Mempunyai berbagai bentuk";
}
}
Baris nomor 14 -16 adalah deklarasi metoda cetakObyek yang mempunyai satu parameter dengan tipe kelas Object. Kelas Object merupakan akar dari semua kelas di Java. Langsung maupun tidak langsung, semua kelas di Java merupakan turunan dari kelas Object. Anda dapat memanggil atau menggunakan metoda cetakObyek dengan argumen berupa obyek yang dibuat dari kelas turunan superclass Object.
Ketika metoda cetakObyek dipanggil (baris nomor 8 – 11), argumen obyek akan diminta. obyek yang berfungsi sebagai argumen metoda dapat berupa obyek yang merupakan kelas turunan dari kelas Object yaitu kelas BangunDatar, kelas PersegiPanjang maupun kelas Balok. Masing-masing kelas turunan mendeklarasikan ulang metoda toString yang mempunyai implementasi berbeda. Java Virtual Machine (JVM) akan menentukan secara dinamis implementasi metode toString yang digunakan saat program dijalankan. Kemampuan menentukan secara dinamis ini disebut dengan dynamic binding.
Dari gambaran program di atas, apabila argumen parameter sebuah metoda adalah tipe superclass, maka argumen metoda yang diberikan dapat berupa tipe dari subclass-nya. Kemampuan seperti inilah yang dimaksud dengan polymorphism. Dari gambaran tersebut, dapat didefinisikan kembali bahwa polymorphism adalah kemampuan untuk menghasilkan sesuatu yang berbeda dengan cara yang sama. Pemberian obyek dari subclass ke obyek dari superclass dapat dilakukan tanpa perlu melakukan konversi.
- Pengertian Enkapsulasi
Dalam istilah berorientasi-objek, enkapsulasi berkaitan dengan penyembunyian informasi. System-sistem yang tidak berorientasi-objek berdasarkan pada rutin dan subprogram yang berbagi-pakai data global, atau yang menerima data yang dikirimkan oleh pemanggil.Pendekatan berorientasi-objek, di pihak lain, mengadopsi konsep bahwa data dan fungsi mestinya dipaketkan bersama ke dalam sebuah kapsul tunggal.Bentuk kelas ini melayani maksud tersebut. Sebuah kelas terdiri dari elemen data dan elemen pemrosesan. Elemen data sebuah kelas disebut attribute, dan operasi pemrosesan disebut metodenya. Atribut dan metode merupakan anggota kelas: atribut adalah anggota data dan metode adalah fungsi anggota.
Maksud enkapsulasi disini adalah menyembunyikan detail implementasi sementara memusatkan pada antarmuka. Tujuannya adalah membuat sebuah abstraksi yang memaksa programmer berpikir secara konseptual. Biasanya, anggota – anggota data dari sebuah kelas terlihat oleh penggunanya. Jika sebuah anggota data harus dibuat agar dapat diakses oleh client kelas, maka kelas tersebut menyediakan sebuah metode yang memeriksanya dan mengembalikan nilainya. Saat sebuah kelas mengekspos anggota data, ia dikatakan memecahkan enkapsulasi.
Enkapsulasi program yang mengolah data dengan deklarasi dan penyimpanan data adalah kunci dari rancangan berorientasi-objek. Enkapsulasi dapat dipikirkan sebagai bungkusan (wrapper) pelindung program dan data yang sedang diolah. Pembungkus ini mendefiniskan perilaku dan melindungi program dan data agar tidak diakses sembarangan oleh program lain. Contoh dalam dunia nyata, transmisi otomatis pada mobil mengenkapsulasi ribuan keping informasi dari mesin, seperti percepatan, kemiringan, tanjakan, dan posisi perseneling. Kita sebagai sopir, cukup melakukan satu hal untuk mempengaruhi enkapsulasi yang rumit ini yaitu memindahkan tuas perseneling.
Kita tidak dapat mempengaruhi transmisi dengan menyalakan lampu sein atau wiper. Keampuhan enkapsulasi program adalah setiap orang tahu cara mengkasesnya, sehingga dapat menggunakannya tanpa harus mengerti cara implementasinya secara terperinci. Contoh lain, lusinan pabrik pembuat mobil dapat mengimplemetasikan gambaran tentang transmisi ini ketika membuat system transmisi dengan cara masing-masing.
Karena tujuannya mengenkapsulasi kerumitan, ada mekanisme untuk menyembunyikan kerumitanimplementasi dalam class. Setiap method atau variable dalam class dapat jadi private atau public. Antarmuka public suatu class menunjukan semua yang perlu atau harus diketahui oleh pemakai. Kita dapat menyatakan method dan data instance sebagai private sehingga tidak dapat diakses oleh program lain diluar implementasi class yang kita buat. Antarmuka public harus diplih dengan hati-hati supaya tidak terlalu banyak membuka bagian class.
- Overloading
Method Overloading adalah sebuah kemampuan yang membolehkan sebuah class mempunyai 2 atau lebih method dengan nama yang sama, yang membedakan adalah parameternya.
Pada method overloading perbedaan parameter mencakup :
- Jumlah parameter
- Tipe data dari parameter
- Urutan dari tipe data parameter
Method Overloading juga dikenal dengan sebutan Static Polymorphism. Berikut ini contoh Class yang melakukan Overloading.
public class ContohOverloading {
public void jumlah (int a, int b){
System.out.println("Jumlah 2 angka ="+ (a + b));
}
//oveloading perbedaan jumlah parameter
public void jumlah (int a, int b, int c){
System.out.println("Jumlah 3 angka =" + (a + b + c));
}
//overloading perbedaan tipe data parameter
public void jumlah (double a, int b){
System.out.println("Jumlah 2 angka (double+int) = "+ (a + b));
}
//overloading perbedaan urutan tipe data parameter
public void jumlah (int b, double a){
System.out.println("Jumlah 2 angka (int+double) = "+ (a + b));
}
}
Penggunaan pada class utama :
public class PenggunaanOverloading {
public static void main(String[] args) {
ContohOverloading co = new ContohOverloading();
co.jumlah(83,32);
co.jumlah(34,454,432);
co.jumlah(34.43,34);
co.jumlah(28,33.23);
}
}
- Overriding
Method overriding merupakan method yang parrent class yang ditulis kembali oleh subclass. Aturan dari method overriding pada Java :
- Parameter yang terdapat pada method overriding di subclass harus sama dengan parameter yang terdapat pada parent class.
- Aturan hak akses, hak akses method overriding di subclass tidak boleh lebih ketat di bandingkan dengan hak akses method pada parent class.
Berikut ini contoh overriding :
public class Binatang {
public void begerak(){
System.out.println("Binatang bergerak sesuai kemampuannya");
}
public void berkembangBiak(){
System.out.println("Binatang berkembang biak sesuai kemampuannya");
}
}
public class Mamalia extends Binatang {
//overriding method parent class
public void begerak(){
System.out.println("Mamalia bergerak sebagian besar dengan kakinya");
}
public void berlari(){
System.out.println("Sebagian Mamalia dapat berlari");
}
}
public class PenggunaanOverriding {
public static void main(String[] args) {
// TODO Auto-generated method stub
Binatang b = new Binatang();
Mamalia m = new Mamalia();
Binatang bm = new Mamalia();
b.begerak();
m.begerak();
bm.begerak();
bm.berkembangBiak();
}
}
Komentar
Posting Komentar