Jumat, 02 Oktober 2020

KONSEP PBO-INHERINTANCE

Pada kali ini saya akan mengulas dasar-dasar pemrograman berorientasi objek dalam PHP. Kita akan mulai dengan pengantar kelas (class) dan objek(object), dan kita akan membahas beberapa konsep canggih seperti pewarisan (inheritance) dan polimorfisme di bagian akhir.

Pemrograman berorientasi objek, yang biasa disebut sebagai OOP, adalah pendekatan yang membantu Anda mengembangkan aplikasi yang kompleks dengan cara yang mudah dipelihara dan terukur dalam jangka panjang. Dalam dunia OOP, entitas dunia nyata seperti PersonCar, atau Animal diperlakukan sebagai object. Dalam pemrograman berorientasi objek, Anda berinteraksi dengan aplikasi dengan menggunakan objek. Ini berbeda dengan pemrograman prosedural, terutama dimana Anda berinteraksi dengan fungsi dan variabel global.

Di OOP, ada konsep "class", yang digunakan untuk memodelkan atau memetakan entitas dunia nyata ke templat data(properti) dan fungsionalitas (method). "Object" adalah turunan dari sebuah class, dan Anda dapat membuat banyak instance dari class yang sama. Sebagai contoh, ada class Person tunggal, tetapi banyak object Person dapat menjadi instance dari class ini — danzainabhector, dll.

Class mendefinisikan properti. Misalnya, untuk class Person, Kami mungkin memiliki nameage, dan phoneNumber. Kemudian setiap object dari Person akan memiliki nilai sendiri untuk properti tersebut.

Anda juga dapat mendefinisikan method di class yang memungkinkan Anda untuk memanipulasi nilai properti object dan melakukan operasi pada object. Sebagai contoh, Anda bisa menentukan method save yang menyimpan informasi object ke database.

Apa itu Class pada PHP?

Class adalah template yang mewakili entitas dunia nyata, dan mendefinisikan properti dan method entitas. Pada bagian ini, kita akan membahas tipikal anatomi dasar class pada PHP.

Cara terbaik untuk memahami konsep baru adalah dengan sebuah contoh. Jadi mari kita lihat class Employee pada potongan kode berikut, yang mewakili entitas dari employee (karyawan).

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
class Employee
{
  private $first_name;
  private $last_name;
  private $age;
  
  public function __construct($first_name, $last_name, $age)
  {
    $this->first_name = $first_name;
    $this->last_name = $last_name;
    $this->age = $age;
  }
 
  public function getFirstName()
  {
    return $this->first_name;
  }
 
  public function getLastName()
  {
    return $this->last_name;
  }
 
  public function getAge()
  {
    return $this->age;
  }
}
?>

Pernyataan class Employee pada baris pertama mendefinisikan class Employee. Kemudian, kita akan mendeklarasikan properti, konstruktor, dan method class lainnya.

Anda bisa menganggap properti class sebagai variabel yang digunakan untuk menyimpan informasi tentang object. Dalam contoh di atas, kami telah menetapkan tiga properti — first_namelast_name, dan age. Dalam kebanyakan kasus, properti class diakses melalui object yang dipakai.

Properti ini bersifat private, yang berarti mereka hanya dapat diakses dari dalam class. Ini adalah tingkat akses teraman untuk properti. Kami akan membahas berbagai tingkat akses untuk properti dan method class nanti di artikel ini.

Konstruktor adalah method class khusus yang dipanggil secara otomatis ketika Anda instantiate sebuah object. Kami akan melihat cara membuat instance object di beberapa bagian berikutnya, tetapi untuk sekarang Anda hanya perlu tahu bahwa konstruktor digunakan untuk menginisialisasi properti object ketika object sedang dibuat.

Anda dapat mendefinisikan konstruktor dengan mendefinisikan method __construct.

Kita dapat menganggap method class sebagai fungsi yang melakukan tindakan spesifik yang terkait dengan object. Dalam kebanyakan kasus, mereka digunakan untuk mengakses dan memanipulasi properti object dan melakukan operasi terkait.

Dalam contoh di atas, kami telah mendefinisikan method getLastName, yang mengembalikan nama belakang yang dikaitkan dengan object.

Jadi itu adalah pengantar singkat tentang struktur class pada PHP. Di bagian selanjutnya, kita akan melihat cara membuat instance object dari class Employee.

Pada bagian sebelumnya, kita membahas struktur dasar sebuah class di PHP. Sekarang, ketika Anda ingin menggunakan class, Anda harus melakukan instantiate, dan hasil akhirnya adalah sebuah object. Jadi kita bisa menganggap class sebagai cetak biru, dan sebuah object adalah hal aktual yang dapat Anda kerjakan.

Dalam konteks class Employee yang baru saja kita buat di bagian sebelumnya, mari kita lihat bagaimana membuat instance object dari class tersebut.

1
2
3
4
5
6
7
<?php
$objEmployee = new Employee('Bob', 'Smith', 30);
 
echo $objEmployee->getFirstName(); // print 'Bob'
echo $objEmployee->getLastName(); // prints 'Smith'
echo $objEmployee->getAge(); // prints '30'
?>

Anda harus menggunakan kata kunci new ketika Anda ingin membuat instance suatu object dari setiap class bersama dengan nama class nya, dan Anda akan mendapatkan kembali contoh object baru dari kelas tersebut.

Jika kelas telah mendefinisikan method __construct dan membutuhkan argumen, Anda harus meneruskan argumen tersebut saat Anda membuat instance sebuah object. Dalam kasus kami, konstruktor class Employee memerlukan tiga argumen, dan karenanya kami telah melewati ini ketika kami membuat objek $objEmployee. Seperti yang kita bahas sebelumnya, method __construct dipanggil secara otomatis ketika object dipakai.

Selanjutnya, kami telah memanggil method class pada object $objEmployee untuk mencetak informasi yang diinisialisasi selama pembuatan object. Tentu saja, Anda dapat membuat beberapa object dari class yang sama, seperti yang ditunjukkan pada potongan kode berikut.

01
02
03
04
05
06
07
08
09
10
11
12
13
<?php
$objEmployeeOne = new Employee('Bob', 'Smith', 30);
 
echo $objEmployeeOne->getFirstName(); // prints 'Bob'
echo $objEmployeeOne->getLastName(); // prints 'Smith'
echo $objEmployeeOne->getAge(); // prints '30'
 
$objEmployeeTwo = new Employee('John', 'Smith', 34);
 
echo $objEmployeeTwo->getFirstName(); // prints 'John'
echo $objEmployeeTwo->getLastName(); // prints 'Smith'
echo $objEmployeeTwo->getAge(); // prints '34'
?>

Gambar berikut ini adalah representasi grafis dari class Employee dan beberapa instance-nya.



Sederhananya, class adalah cetak biru yang dapat Anda gunakan untuk membuat object yang terstruktur.

Di bagian sebelumnya, kami membahas cara membuat instance objek dari class Employee. Sangat menarik untuk dicatat bahwa object $objEmployee itu sendiri membungkus bersama properti dan method class. Dengan kata lain, ia menyembunyikan detail tersebut dari sisa program. Dalam dunia OOP, ini disebut enkapsulasi data.

Enkapsulasi adalah aspek penting dari OOP yang memungkinkan Anda untuk membatasi akses ke properti atau method dari object tertentu. Dan itu membawa kita ke topik lain untuk didiskusikan: tingkat akses.

Saat Anda mendefinisikan properti atau method dalam sebuah class, Anda dapat mendeklarasikannya memiliki salah satu dari tiga level akses ini  publicprivate, atau protected.

Saat Anda mendeklarasikan properti atau method sebagai public, properti dapat diakses dari mana saja di luar class. Nilai properti public dapat dimodifikasi dari mana saja dalam kode Anda.

Mari kita lihat contoh untuk memahami tingkat akses public.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<?php
class Person
{
  public $name;
 
  public function getName()
  {
    return $this->name;
  }
}
 
$person = new Person();
$person->name = 'Bob Smith';
echo $person->getName(); // prints 'Bob Smith'
?>

Seperti yang Anda lihat pada contoh di atas, kami telah melakukan deklarasi properti name untuk public. Karenanya, Anda dapat mengaturnya dari mana saja di luar class, seperti yang kami lakukan di sini.

Ketika Anda mendeklarasikan properti atau method sebagai private, itu hanya dapat diakses dari dalam class. Ini berarti bahwa Anda perlu mendefinisikan method get dan set untuk mendapatkan dan mengatur nilai properti tersebut.

Sekali lagi, mari kita revisi contoh sebelumnya untuk memahami tingkatan akses private.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<?php
class Person
{
  private $name;
 
  public function getName()
  {
    return $this->name;
  }
 
  public function setName($name)
  {
    $this->name = $name;
  }
}
 
$person = new Person();
$person->name = 'Bob Smith'; // Throws an error
$person->setName('Bob Smith');
echo $person->getName(); // prints 'Bob Smith'
?>

Jika Anda mencoba mengakses properti private dari luar class, itu akan menimbulkan kesalahan yang fatal Cannot access private property Person::$name. Dengan demikian, Anda perlu mengatur nilai properti pribadi menggunakan method setter, seperti yang kami lakukan menggunakan method setName.

Ada alasan bagus mengapa Anda mungkin ingin menjadikan properti private. Misalnya, mungkin beberapa tindakan harus diambil (memperbarui basis data, mengatakan, atau merender ulang template) jika properti itu berubah. Dalam hal ini, Anda dapat mendefinisikan method setter dan menangani logika khusus ketika properti diubah.

Akhirnya, ketika Anda mendeklarasikan properti atau method sebagai protected, itu dapat diakses oleh class yang sama yang telah mendefinisikannya dan class yang mewarisi class tersebut. Kami akan membahas inheritance pada bagian selanjutnya, jadi kami akan kembali ke tingkat akses yang dilindungi sedikit sebentar lagi.

Inheritance adalah aspek penting dari paradigma pemrograman berorientasi objek yang memungkinkan Anda mewarisi properti dan method class lain dengan melakukan extend. class yang diwariskan disebut parent class (class induk), dan class yang mewarisi kelas lain disebut child class. Ketika Anda melakukan instantiate sebuah object dari child class, itu akan mewarisi properti dan method dari parent class juga.

Mari kita lihat screenshot berikut untuk memahami konsep dari pewarisan (inheritance).



Dalam contoh di atas, class Person adalah parent class, dan class Employee memperluas (extend) atau mewarisi class Person dan disebut child class.

Mari kita coba melalui contoh dunia nyata untuk memahami cara kerjanya.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
class Person
{
  protected $name;
  protected $age;
 
  public function getName()
  {
    return $this->name;
  }
 
  public function setName($name)
  {
    $this->name = $name;
  }
 
  private function callToPrivateNameAndAge()
  {
    return "{$this->name} is {$this->age} years old.";
  }
 
  protected function callToProtectedNameAndAge()
  {
    return "{$this->name} is {$this->age} years old.";
  }
}
 
class Employee extends Person
{
  private $designation;
  private $salary;
 
  public function getAge()
  {
    return $this->age;
  }
 
  public function setAge($age)
  {
    $this->age = $age;
  }
 
  public function getDesignation()
  {
    return $this->designation;
  }
 
  public function setDesignation($designation)
  {
    $this->designation = $designation;
  }
 
  public function getSalary()
  {
    return $this->salary;
  }
 
  public function setSalary($salary)
  {
    $this->salary = $salary;
  }
 
  public function getNameAndAge()
  {
    return $this->callToProtectedNameAndAge();
  }
}
 
$employee = new Employee();
 
$employee->setName('Bob Smith');
$employee->setAge(30);
$employee->setDesignation('Software Engineer');
$employee->setSalary('30K');
 
echo $employee->getName(); // prints 'Bob Smith'
echo $employee->getAge(); // prints '30'
echo $employee->getDesignation(); // prints 'Software Engineer'
echo $employee->getSalary(); // prints '30K'
echo $employee->getNameAndAge(); // prints 'Bob Smith is 30 years old.'
echo $employee->callToPrivateNameAndAge(); // produces 'Fatal Error'
?>

Yang penting untuk diperhatikan di sini adalah bahwa class Employee telah menggunakan kata kunci extends untuk mewarisi class Person. Sekarang, class Employee dapat mengakses semua properti dan method dari class Person yang dinyatakan sebagai public atau protected. (Itu tidak dapat mengakses anggota yang dinyatakan sebagai private).

Dalam contoh di atas, objek $employee dapat mengakses method getName dan setName yang didefinisikan dalam class Person karena mereka dinyatakan sebagai public.

Selanjutnya, kami telah mengakses method callToProtectedNameAndAge menggunakan method getNameAndAge yang didefinisikan dalam class Employee, karena dinyatakan sebagai protected. Akhirnya, object $employee tidak dapat mengakses method callToPrivateNameAndAge dari class Person karena dideklarasikan sebagai private.

Di sisi lain, Anda dapat menggunakan object $employee untuk melakukan set pada properti age dari class Person, seperti yang kami lakukan pada method setAge yang didefinisikan dalam class Employee, karena properti age dinyatakan sebagai protected.

Jadi itu pengantar singkat tentang pewarisan (inheritence). Ini membantu Anda mengurangi duplikasi kode, dan dengan demikian mendorong konsep reusability (penggunaan kembali kode).

Contoh Soal :

Buatlah sebuah class induk dengan nama Sekolah, memiliki Public properti nama, protected properti lokasi dan public method jurusan.Kemudian saya membuat class baru dengan nama Smk,yang akan mewarisi properti/method dari class Sekolah.

Tampilannya:




Tidak ada komentar: