Sessi 14 OOP Pada PHP
Rabu, 11 Juli 2012
Object Oriented Programming (OOP) atau Pemrogrman Berbasis Objek adalah paradigma pemrograman yang memodelkan masalah dengan pendekatan objek. Konsep dari OOP sendiri adalah semua pemecahan masalah dibagi ke dalam objek seperti inheritance atau pewarisan, encapsulation atau pembungkusan, dan polymorphism atau kebanyakrupaan.
Perbedaan OOP dengan pemrograman prosedural
Menurut Bjarne Stroustrup dalam sebuah papernya yang berjudul “what is object oriented programming ?” paradigma dalam OOP adalah tentukan kelas yang kita inginkan, lengkapi sederetan operasi untuk kelas, tentukan struktur secara eksplisit dengan pewarisan. Sedangkan pemrograman prosedural berparadigma tentukan prosedur yang kita inginkan, gunakan algoritma terbaik yang bisa ditentukan. Dapat disimpulkan pemrograman prosedural berorientasi pada aksi, sedangkan OOP berorientasi pada objek.Kelas dan Objek
Kelas adalah kumpulan objek-objek yang memiliki kemiripan perilaku (method) atu ciri atau karakterisitik
1
2
3
4
5
6
7
8
9
|
|
Inheritance
Fungsi utama pewarisan dalah menciptakan kelas baru dari kelas yang sudah ada. Dalam konsep ini kelas anak (child) mewarisi semua variabel dan method dari kelas asal(parent), namun masih dapat menambah variabel atau method baru jika memang diperlukan. Ada beberapa macam Inheritance atau pewarisan yang ada di dalam OOP yakni Single Inheritance dan Multple InheritanceSingle Inheritance
Multple Inheritance
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
|
PHP tidak mendukung multiple inheritance dan perubahan PHP versi 5 ditekankan pada OOP salah satunya adalah beberapa tambahan untuk kemampuan inheritance
Encapsulation
Aspek ini berguna untuk menyembunyikan kelas dari luar sehingga pengaksesan data member (atribut dan method) suatu kelas tidak dapat diubah secara langsung oleh kelas lain. Enkapsulasi sangat berhungungan erat dengan modifier, yaitu :- Private
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
|
- Protected
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
|
- Public
Polymorphism
Kemampuan suatu objek untuk memiliki bentuk atau wujud yang berbeda melalui suatu cara yang sama. Polimorfisme mengijinkan suatu kelas induk untuk mendefinisikan suatu method general untuk semua kelas turunannya dan selanjutnya kelas-kelas turunan dapat memperbaharui implemnetasi dari method tersebut secara lebih spesifik sesuai dengan karakteristik masing-masing. Polimorfisme dapat bekerja dengan kelas yang berbeda tidak perlu tahu kelas mana yang menggunakannya, karena semua menggunakan cara yang sama.Sebuah analogi untuk polimorfisme adalah tombol. Semua orang tahu bagaimana menggunakan tombol, yaitu anda hanya menekan tombol tersebut. Lalu apa yang tombol lakukan? tergantung pada apa yang terhubung dan di mana tombol itu digunakan, tetapi tidak mempengaruhi bagaimana tombol digunakan.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
|
KelasInduk KelasAnak |
Interface
PHP hanya mendukung single inherintace saja, artinya hanya kelas anak hanya mewarisi satu dari kelas induk. Namun kita bisa menggunakan interface sbagai alternatifnya. Interface hampir sama dengan kelas, tetapi hanya memiliki konstanta dan kumpulan method yang hanya memuat dekalarsi dan struktur method, tanpa detail implementasinya.Sebuah analogi untuk interface adalah sepeda. Sepeda merupakan kendaraan, namun sepeda juga bisa dikategorikan sebagai alat olah raga. Apakah bisa katakan bahwa sepeda merupakan turunan dari kendaraan dan alat olah raga ? Tidak mungkin, karena dalam PHP tidak mendukung multiple inherintace. Hal yang mungkin adalah sepeda merupakan turunan dari kendaraan, yang juga memiliki sifat seperti alat olah raga. Inilah yang disebut interface, “memiliki sifat seperti…”, namun bukan turunannya.
1
2
3
4
5
| interface MyInterface { public function doThis(); public function doThat(); public function setName( $name ); } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| // VALID class MyClass implements MyInterface { protected $name ; public function doThis() { // kode doThis } public function doThat() { // kode doThat } public function setName( $name ) { $this ->name = $name ; } } // INVALID class MyClass implements MyInterface { // tidak ada method doThis private function doThat() { // harus public! } public function setName() { // tidak ada argument name! } } |
Kelas Abstrak
Kelas abstrak didesain untuk bertindak sebagai kelas dasar yang nantinya diperluas oleh kelas-kelas turunannya dan kelas abstrak tidak dapat dinstanisasikan secara langsung menjadi objek. Kelas yang diwarisi kelas abstrak harus mengimplementasikan semua metode abstrak didefinisikan dalam kelas abstrak. Beberapa aturan dalam pendefinisian kelas abstrak- Kelas yang berisi sedikitnya sebuah method abstrak harus didefinisikan sebagai abstrak
- Method abstrak tidak boleh mendefinisikan implemntasi hanya signature
- Kelas (non-abstrak) yang merupakan turunan kelas abstrak harus mendefiniskan semua method abstrak dan visibilitas minimal sama atau lebih luas.
1
2
3
4
5
6
7
8
9
| abstract class MyAbstract { public $name ; public function doThis() { // kode doThis } abstract public function doThat(); abstract public function setName( $name ); } |
1
2
3
4
5
6
7
8
9
10
11
| class MyClass extends MyAbstract { public function doThat() { // kode doThat } public function setName( $name ) { // kode setName } } |
Contoh Polymorphism, kelas abstrak dan interface
Kita ingin membuat rumus bangunan menghitung luas dan keliling, untuk persegi, persegi panjang dan segitiga. Dari ketiga bangunan tersebut memiliki sifat yang sama yaitu menghitung luas dan keliling. Beberapa memiliki bentuk hampir sama yang bisa dijadikan bentukan. Jadi kita membuat sebuah interface bangunan dan kelas abstrak untuk pewarisan bangunan persegi.Persegi Panjang
Persegi
Segitiga
gunakan fungsi PHP sqrt untuk hitung akar kuadratimplementasi
1
2
3
4
5
6
7
8
9
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
|
|
Keliling Segitiga : 15
Keliling Persegi : 16
Keliling PersegiPanjang : 24
Luas Segitiga : 9.9215674164922
Luas Persegi : 16
Luas PersegiPanjang : 32
Tidak ada komentar:
Posting Komentar