Please Kindly Share To Your Social Media
Polymorphism
Dari arti kata kita bisa tebah yaitu Banyak Bentuk. Dalam dunia OOP programming,
Polymorphism adalah konsep fundamental dimana class-class mempunyai fungsi berbeda akan tetapi berbagi interface yang sama.
Contoh HP_Samsung,HP_Nokia,HP_Sony bisa kirim sms namun tentu dengan cara kerja yang berbeda masing-masing bukan ?
Secara sederhana kira-kira seperti itulah Polymorphism. Dalam Polymorphism ada 2 cara yang umum digunakan yaitu : Interface dan Abstract Class
Interface
Interface memiliki konsep sama dengan Class yakni tidak ada kode-kode didalamnya. Dan hanya boleh ada Method dan Argument dan lagi tidak boleh ada kode didalam method-method tersebut
interface MyInterface{
//method-method
}
interface MyInterface{
public function bebas();
public function bebas2($param);
}
class MyClass implements MyInterface{..}
class MyClass implements MyInterface,MyInterface2,MyInterface3{..}
interface KendaraanBermotor{
public function ngeRem();
public function ngeGas();
public function mundur();
}
class Mobil implements KendaraanBermotor{
protected $jml_roda;
public function ngeRem(){
return "Ngerem nya pakai Tuas dikaki doang";
}
public function ngeGas(){
return "Ngegas nya pakai tuas dikaki";
}
public function mundur(){
return "Ada kontrol khusus mundur, orang gperlu turun";
}
}
class Motor implements KendaraanBermotor{
protected $jml_roda;
public function ngeRem(){
return "Ngerem nya pakai Tuas dikaki atau ditangan";
}
public function ngeGas(){
return "Ngegas nya pakai tangan";
}
public function mundur(){
return "Mundur perlu turun atau dorong pake kaki";
}
}
//buat Object
$obj = new Mobil();
echo $obj->ngeGas();
echo $obj->ngeRem();
echo $obj->mundur();
$obj = new Mobil(); menjadi $obj = new Motor();
interface KendaraanBermotor{
public function ngeRem();
public function ngeGas();
public function mundur();
public function isMember(); //perhatikan...
}
class Mobil implements KendaraanBermotor{
protected $is_member = false;
public function __construct($identify=null){
if($identify){
$this->is_member = $identify;
}
}
//...
public function isMember(){
return $this->is_member;
}
}
class Motor implements KendaraanBermotor{
//misal buat propertiesnya
protected $is_member = false;
public function __construct($identify=null){
if($identify){
$this->is_member = $identify;
}
}
//...
public function isMember(){
return $this->is_member;
}
}
/*Perhatikan Class berikut*/
class Customer{
private $obj;
//pakai typeHinting : KendaraanBermotor $obj
public function __construct(KendaraanBermotor $obj){
$this->obj = $obj;
}
public function beli(){
if(!$this->obj->isMember()){
return "Maaf Anda belum menjadi member";
}
return "Welcome back Bro !!, Mau beli ? ";
}
}
$obj = new Motor(false);//misal false=bukan member,coba ganti ke true
$obj2 = new Customer($obj);
echo $obj2->beli();
//Outputnya : Maaf Anda belum menjadi member
Abstract Class
Abstract Class dilihat dari penamaanya dapat kita katakan bahwa itu adalah hal yang Abstract alias tidak nyata. Abstract Class biasanya dibuat untuk diturunkan ke Class lain dengan kata lain Abstract Class akan berisi semua hal paling general dari Class-Class anaknya. Seperti Class pada umumnya, Abstract Class juga bisa mempunyai properties,hak akses,dan method namun Abstract Class tidak bisa dibuatkan Object nya sendiri.
abstract class Mamalia{
abstract protected function berJalan($pakai);
abstract protected function makan($apaan); //abstract method
}
//pakai extends
class Manusia extends Mamalia{
public function berJalan($pakai){
return "Manusia Jalan pakai {$pakai}";
}
public function makan($apaan){
return "Manusia biasa makan {$apaan}";
}
}
class Kucing extends Mamalia{
public function berJalan($pakai){
return "Kucing Jalan pakai {$pakai}";
}
public function makan($apaan){
return "Kucing biasa makan {$apaan}";
}
}
$obj = new Manusia;
echo $obj->makan("Nasi");
echo $obj->berJalan("Kaki");
echo "
";
$obj = new Kucing;
echo $obj->makan("Ikan asin");
echo $obj->berJalan("Empat kaki");
abstract class DB
{
protected $driver;
public function __construct($dv){
$this->driver = $dv;
}
public function getDriver(){
return $this->driver;
}
abstract protected function select($table, $kolom);
abstract protected function limit($lim);
}
class DbMysql extends DB
{
public function select($table, $kolom){
//...
}
public function limit($lim){
//...
}
}
class DbOracle extends DB
{
public function select($table, $kolom){
//...
}
public function limit($limt){
//...
}
}
//Misal penggunaannya
$db = new DbMysql('mysql'); //ganti misal DbOracle('oracle')
$db->select('users', array('id', 'nama','alamat'));
$db->limit(10);
Interface vs Abstract Class ?
tapi pakai sesuai spesifikasi design OOP aplikasi masing-masing saja dan bahkan banyak yang menggabungkan keduanya. Tapi keyword singkat yang perlu diingat adalah
jika kita rasa kita perlu menambahkan di Polymorphism itu Properties, Method yang menurut kita harus ada kode block nya, maka bisa gunakan Abstract Class. CMIIW
abstract class DB
{
protected $driver;
public function __construct($dv){
$this->driver = $dv;
}
public function getDriver(){
return $this->driver;
}
abstract protected function select($table, $kolom);
abstract protected function limit($lim);
}