Skip to content

Commit ab0cdce

Browse files
kondiakwildanie12azqilana
authored
Menambahkan materi basic Object Oriented Programing (bellshade#106)
* docs: penambahan materi basic infinite loop * add: pengenalan OOP * docs: memperbaiki beberapa paragraf untuk artikel fundamental OOP (join task) * add: trigger workflow manual * fix: mengubah huruf kecil jd besar menghapus karakter berlebih * docs: penyusunan ulang kalimat analogi di awal oop Co-authored-by: Muhammad Azqilana <[email protected]> * docs: update dokumentasi berdasarkan request changes #1 Co-authored-by: Badar Wildanie <[email protected]> Co-authored-by: Muhammad Azqilana <[email protected]>
1 parent ba23847 commit ab0cdce

File tree

5 files changed

+198
-3
lines changed

5 files changed

+198
-3
lines changed
58.5 KB
Loading
46.2 KB
Loading
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace Basic\OOP;
4+
5+
//OOP
6+
class Contoh
7+
{
8+
private $param = array();
9+
10+
public function set($nama, $nilai)
11+
{
12+
$this->param[$nama] = $nilai;
13+
}
14+
15+
public function get($nama)
16+
{
17+
return isset($this->param[$nama]) ? $this->param[$nama] : null;
18+
}
19+
}
20+
21+
//driven
22+
$test = new Contoh('nama', 'Bellshade');
23+
echo $test->get('nama');
24+
25+
//.End of OOP
26+
27+
//Prosedural
28+
function newContoh()
29+
{
30+
return array();
31+
}
32+
33+
function setContoh(&$param, $nama, $nilai)
34+
{
35+
return $param[$nama] = $nilai;
36+
}
37+
38+
function getContoh($param, $nama)
39+
{
40+
return isset($param[$nama]) ? $param[$nama] : null;
41+
}
42+
43+
//penggunaan prosedural
44+
$test = newContoh();
45+
setContoh($test, 'nama', 'Bellshade');
46+
echo getContoh($test, 'nama');
47+
48+
//.Prosedural

basics/14_oop_dasar/README.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<p align="center">
2+
<img width="30%" src="../../assets/images/bellshade-inline.png" />
3+
<h1 align="center">Object Oriented Programing (OOP)</h1>
4+
</p>
5+
6+
Object Oriented Programing atau pemrograman berorientasi terhadap objek lebih sering disebut sebagai OOP adalah salah satu paradigma dalam pemrograman untuk memudahkan pengembangan sebuah aplikasi. Pada materi kali ini kita akan coba mempelajari mengenai paradigma OOP dan implementasinya menggunakan bahasa pemrograman PHP.
7+
8+
## Daftar isi
9+
10+
- [Pengenalan Pemrograman Berorientasi Objek (OOP)](#1-pengenalan-pemrograman-berorientasi-objek-oop)
11+
- [Apa itu?](#apa-itu)
12+
- [Perbedaannya OOP dengan metode prosedural biasa](#perbedaannya-oop-dengan-metode-prosedural-biasa)
13+
14+
15+
## 1. Pengenalan Pemrograman Berorientasi Objek (OOP)
16+
17+
Pada materi sebelumnya kita sudah mencoba membuat contoh-contoh baris kode yang kebanyakan merupakan pola kerja pemrograman prosedural atau pemrograman terstruktur. Dalam pemrograman ada yang disebut sebagai paradigma Pemrograman yang artinya sudut padang seorang programmer dalam menyelesaikan suatu kasus atau masalah dengan cara pemrograman. Hal ini penting bagi seorang programmer untuk mengidentifikasi permasalahan dan menyusun sebuah solusi dalam bentuk pemrograman.
18+
19+
Ada beberapa paradigma pemrograman sebagai contoh paradigma prosedural yang sudah sering kita gunakan dalam materi sebelumnya, dan paradigma _object oriented programing_ (OOP) atau Pemrograman Berorientasi Objek.
20+
21+
### Apa itu?
22+
23+
OOP singkatan dari _Object Oriented Programming_. OOP bukan hanya sekedar tentang merubah cara menuliskan baris kode, tapi juga mempermudah dalam pengembangan aplikasi kita. OOP adalah model pemrograman yang mengolah desain software menggunakan data dan objek daripada menggunakan fungsi dan logika prosedural.
24+
25+
Pada dasarnya paradigma pemrograman berorientasi objek adalah metode pemrograman yang memecah bagian-bagian dari aplikasi menjadi 1 bagian yang memiliki 1 fungsionalitas utama. Dari bagian-bagian ini dihubungkan satu sama lain berdasarkan fungsinya masing-masing sehingga membentuk aplikasi yang utuh. Akibatnya, sebuah aplikasi dapat terdiri dari bagian-bagian yang rapi terstruktur, _scalable_ dan _reusable_ sehingga paradigma ini bagus sekali untuk diterapkan pada project berskala besar.
26+
27+
Jika kita analogikan pada kehidupan sehari-hari, bayangkan ada sebuah restoran makanan. Agar pelayanan pada restoran tersebut dapat berjalan dengan efisien, semua aktifitas dalam restoran tersebut dibagi menjadi beberapa bagian. Ada yang jadi pelayan, ada yang di kasir, ada yang memasak di dapur,dsb. Jika kamu perhatikan, pecahan bagian-bagian ini mempunyai tugasnya sendiri-sendiri dan memiliki prosedur masing-masing. Akan tetapi satu bagian harus tetap berhubungan dengan bagian-bagian lainnya agar restoran bisa berjalan dengan lancar dan efisien.
28+
<br/>
29+
<br/>
30+
31+
### Perbedaannya OOP dengan metode prosedural biasa
32+
33+
Pemrograman dengan paradigma prosedural bekerja secara urut dan sistematis, sedangkan OOP bekerja dengan sebuah objek yang fleksibel, dapat dikembangkan _(scalable)_, dan dapat digunakan ulang _(reusable)_
34+
35+
<ins>Analogi Singkat</ins>
36+
37+
Jika kita menggunakan kembali analogi sebelumnya, pemrograman dengan cara prosedural dapat diibaratkan dengan melakukan pelayanan makanan secara berurutan mulai menerima pesanan, memasak di dapur sampai memberikan makanan ke pelanggan. Analogi yang tepat untuk alur prosedural adalah tiap aktifitas restoran tidak mempunyai _standar operational procedure_ (SOP) yang baik. Misalnya ada kemungkinan untuk kasir terlibat dalam bagian dapur, cara pemesanan selalu berubah tiap kali ada pelanggan dan sebagainya. Situasi yang kacau seperti ini dapat menimbulkan konsistensi yang buruk.
38+
39+
Di samping itu, paradigma pemrograman berorientasi objek telah mendefinisikan semua langkah-langkahnya dengan baik. Satu bagian kasir fokus mengerjakan pekerjaannya sesuai dengan prosedur yang jelas dan sudah ditentukan sehingga kasir tidak perlu mengurusi bagian dapur namun tetap berinteraksi dengannya secara rapi dan teratur. Akibatnya setiap bagian (objek) dapat fokus mengerjakan bagiannya masing-masing dengan lebih teratur. Selain itu jika ada masalah dengan alur layanannya, bisa mudah untuk dicari letak kesalahannya dan dapat diterapkan solusi yang mudah untuk diintegrasikan.
40+
41+
<ins>Gambaran pemrograman</ins>
42+
43+
Sama halnya dengan pemrograman sebenarnya. Misalnya pada implementasi form tambah data barang, hal-hal yang diimplementasikan pastinya dimulai dengan:
44+
- menampilkan form
45+
- mempopulasikan data barang
46+
- melakukan validasi dan
47+
- menambahkan rekam data ke database.
48+
49+
Jika menggunakan metode prosedural, biasanya semua itu dilakukan seluruhnya secara berurutan dalam satu file sehingga jika kita ingin membuat edit data barang yang sejatinya memiliki banyak kesamaan dengan tambah data barang harus membuat ulang dan melakukan hal yang sama berulang kali sehingga terjadi duplikasi. Perhatikan juga, hal ini bisa mengakibatkan konsistensi yang buruk seperti misalnya jika ada perubahan pada halaman tambah data, seringkali ada perbedaan kode dengan halaman edit data karena harus ada duplikasi yang dilakukan.
50+
51+
<p align="center">
52+
<img src="../../assets/content/basics/14_oop_dasar/1-prosedural.png" width="50%" />
53+
</p>
54+
55+
Sedangkan pada pemrograman berorientasi objek, setiap fungsi _use case_ dipecah pada tiap-tiap objek yang nantinya berkorelasi satu sama lain membentuk sebuah fungsi aplikasi yang sebenarnya. Misalnya, objek `Barang` dibuat untuk mempopulasikan data barang. Di objek ini bisa dilakukan hal-hal seperti memastikan data barang tetap pada format dan bentuk yang ditentukan. Begitu pula dengan validasinya, bisa juga dibuat objek seperti `BarangRequest` yang menangani validasi saat sebuah form dikirimkan, memastikan semua inputan sudah sesuai yang diinginkan. Dan begitu pula untuk _use case_ yang lain seperti `BarangModel` khusus untuk interaksi dengan database.
56+
57+
Perhatikan disini karena setiap _use case_ disendirikan pada tiap-tiap objek, developer bisa fokus menuliskan apapun **khusus** untuk _use case_ tersebut. Developer bisa leluasa menuliskan kode-kode yang kompleks hanya untuk _use case_ objek tertentu secara terstruktur. Berbeda dengan prosedural yang prakteknya menumpuk semua kode menjadi satu sehingga susah dibaca dan tidak terstruktur. Ini sangat penting sekali karena dapat memudahkan kinerja programmer dalam memanajemen kode-kodenya. Selain itu, yang paling dirasa keuntungannya yaitu pada saat kerja tim yang mengharuskan kode terstruktur agar dapat dimengerti oleh semua anggota tim.
58+
59+
<p align="center">
60+
<img src="../../assets/content/basics/14_oop_dasar/2-oop.png" width="50%" />
61+
</p>
62+
63+
64+
Semua hal _use case_ diibaratkan sebagai sebuah objek yang terorganisir bertujuan membantu dalam menyelesaikan sesuai _use case_nya. Sehingga apapun dapat di gambarkan kedalam objek ini. Objek berisikan fungsi-fungsi dan atribute-atribute, dimana objek dapat di gandakan dengan nilai dari atribut berbeda-beda tetapi dapat menjalankan fungsi yang sama. Karena bersifat modular objek dapat digunakan kembali. Sehingga pengembangan dan perawatan sebuah aplikasi menjadi lebih mudah. Data dalam properti dan metode objek dapat diproteksi dengan encapsulasi dan memberikan batas hak akses modifikasi _(yang akan dibahas nanti)_. Dengan demikian data dirasa "lebih aman" dari pada pemrograman prosedural.
65+
66+

basics/5_perulangan/README.md

Lines changed: 84 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
- [2.1 Nested Foreach](#21-nested-foreach)
1313
- [List sebagai Pengganti Nested Foreach](#list-sebagai-pengganti-nested-foreach)
1414
- [3. Perulangan While](#3-perulangan-while)
15-
- [4. Perulangan Do While](#4-perulangan-do-while)
16-
- [Referensi](#referensi)
15+
- [4. Perulangan Do While](#4-perulangan-do-while)
16+
- [5. Perulangan Tak Terbatas](#5-perulangan-tak-terbatas)
1717

1818
## Jenis-Jenis Perulangan
1919

@@ -303,7 +303,7 @@ Dari diagram alur di atas bisa kita lihat bahwa *while* hampir sama dengan *for*
303303
// Deklarasi parameter $i sesuai diagram bernilai 0
304304
$i = 0;
305305
// Perulangan while dengan ekspresi selama $i lebih kecil dari 5
306-
while($ < 5){
306+
while($i < 5){
307307
// echo nilai $i dan kemudian $i ditambah 1 (post increment)
308308
echo $i++;
309309
}
@@ -374,6 +374,87 @@ end:
374374
return $i;
375375
```
376376

377+
## 5. Perulangan Tak Terbatas
378+
379+
Kita bisa saja suatu saat membuat sebuah perulangan yang tidak pernah berhenti. Perulangan ini disebut sebagai perulangan tak terbatas (infinite loop). perulangan ini akan terus bekerja selamanya, bagaimanapun setiap programer bisa saja melakukan kesalahan ini, karena sedikit perubahan atau salah meletakan suatu ekspresi akan menyebabkan nilai dari ekspresi akan selalu bernilai benar-`true`. sebagai contoh dari baris kode perulangan while diatas kita salah memposisikan variable dari $i, coba perhatikan baris kode dibawah ini :
380+
381+
```php
382+
<?php
383+
$i = 0;
384+
while ($i < 5)
385+
{
386+
echo $i++;
387+
}
388+
?>
389+
```
390+
391+
Maka kode di atas akan melakukan print dari angka 0 sampai angka 4, tapi jika tanpa sengaja variabel $i kita posisikan seperti ini :
392+
393+
```php
394+
while($i < 5)
395+
{
396+
$i = 0;
397+
echo $i++;
398+
}
399+
```
400+
401+
Maka baris kode di akan akan selalu melakukan print nilai `0` tanpa henti, karena setiap perlungan dilakukan nilai dari variable $i akan kembali menjadi `0` sehingga menyebabkan ekspresi 1 < 5 adalah benar-`true`.
402+
403+
Jika hal ini terjadi saat kita melakukan testing atau debugging terhadap baris kode kita, jangan jadi panik coba lakukan salah satu dari metode ini :
404+
405+
1. Jika testing kita berjalan dalam webpage.
406+
Tunggu saja beberapa detik, biasa settingan php mempunyai masa time out selama 30 detik, bila dalam 30 detik tidak berhenti, kemungkian konfigurasi ini telah diganti, kita dapat menggunakan tombol stop pada browser kita untuk menghentikan perulangan ini.
407+
2. Jika PHP kita jalankan dalam mode Command Line Interface (CLI).
408+
Kita dapat menekan tombol CTRL+C, maka script PHP akan berhenti, terkadang script akan terus berjalan beberapa saat lagi, tapi pasti akan berhenti secepat nya.
409+
410+
Dalam pengebangan aplikasi ada kalanya kita akan melakukan loop yang sangat banyak seperti dalam pencarian, jika kita ragu terhadap perulangan yang kita lakukan kita dapat menyelipkan fungsi `break` dalam perulangan kita yang kemudian dapat kita hilangkan jika kita rasa perulangan tersebut telah berjalan dengan benar, sebagai contoh baris kode dibawah ini :
411+
412+
```php
413+
<?php
414+
$data = false;
415+
$i = 1; //variable untuk mengecek banyak nya loop
416+
while ($data = true) //Seharunya kita mengecek apakah data ini benar tetapi kita malah mengeset data ini menjadi benar
417+
{
418+
echo 'Data Benar<br>';
419+
$data = false;
420+
421+
#pencegahan sementara agar tidak terjadi infinite loop
422+
$i++;
423+
if ($i > 5)
424+
{
425+
#hentikan perulangan
426+
break;
427+
}
428+
}
429+
430+
?>
431+
```
432+
433+
Hasil dari perulangan di atas akan menjadi seperti ini :
434+
435+
```text
436+
data benar
437+
data benar
438+
data benar
439+
data benar
440+
data benar
441+
```
442+
443+
Dimana kita seharusnya menggunakan operator pembanding(`==`,`===`) tapi tanpa sengaja kita menggukan operator penugasan(`=`). Kemudian kita dapat memperbaiki perulangan yang kita buat.
444+
445+
Setelah kita jalankan script PHP tersebut dan kita merasa bahwa perulangan yang terjadi sudah benar, kita dapat menghapus baris kode dari pencegahan perulangan tersebut. atau dengan cara lain jika menggukan operator persaman dalam ekspresi, kita dapat membalik posisi variabel dan nilai, jika kita salah memasukan operator hal ini hanya akan menimbulkan pesan kesalahan. contoh :
446+
447+
```php
448+
$data = true;
449+
while (true = $data)
450+
{
451+
lakukan sesuatu;
452+
$data = false;
453+
}
454+
```
455+
456+
Baris kode diatas tidak akan melakukan perulangan tetapi akan memunculkan pesan kesalahan. Hal ini tidak berlaku untuk penggunaan operator lebih besar atau lebih kecil.
457+
377458
### Referensi
378459

379460
- [W3School - PHP Loops](https://www.w3schools.com/php/php_looping.asp)

0 commit comments

Comments
 (0)