Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Menambahkan materi basic Object Oriented Programing #106

Merged
merged 8 commits into from
Nov 27, 2021
48 changes: 48 additions & 0 deletions basics/14_oop_dasar/1_prosedural_dan_oop.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

namespace Basic\OOP;

//OOP
class Contoh
{
private $param = array();

public function set($nama, $nilai)
{
$this->param[$nama] = $nilai;
}

public function get($nama)
{
return isset($this->param[$nama]) ? $this->param[$nama] : null;
}
}

//driven
$test = new Contoh('nama', 'Bellshade');
echo $test->get('nama');

//.End of OOP

//Prosedural
function newContoh()
{
return array();
}

function setContoh(&$param, $nama, $nilai)
{
return $param[$nama] = $nilai;
}

function getContoh($param, $nama)
{
return isset($param[$nama]) ? $param[$nama] : null;
}

//penggunaan prosedural
$test = newContoh();
setContoh($test, 'nama', 'Bellshade');
echo getContoh($test, 'nama');

//.Prosedural
96 changes: 96 additions & 0 deletions basics/14_oop_dasar/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
<p align="center">
<img width="30%" src="../../assets/images/bellshade-inline.png" />
<h1 align="center">Object Oriented Programing (OOP)</h1>
</p>

Object Oriented Programing atau pemograman berorientasi terhadap objek lebih sering disebut sebagai OOP adalah salah satu paradigma dalam pemogram untuk memudahkan dalam pengembangan sebuah aplikasi. Materi kali ini kita akan coba mempelajari mengenai paradigma OOP dalam bahasa pemograman PHP.
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved

## Daftar isi

1. [Pengenalan OOP.](#1-pengenalan-pemograman-berorientasi-objek)
- [Apa itu OOP.](#11-apa-itu-oop)
- [Perbedaan antara Prosedural dan ber-Orientasi Objek](#12-perbedaan-pemograman-prosedural-dan-pemograman-objek)
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved


## 1. Pengenalan Pemograman Berorientasi Objek

Dalam materi sebelumnya kita sudah mencoba membuat contoh-contoh baris kode yang rata-rata baris kode tersebut merupakan pola kerja pemograman prosedural atau pemograman terstruktur. dalam pemograman ada yang disebut sebagai Paradigma Pemograman yaitu sudut padang seorang programer dalam menyelesaikan suatu kasus atau masalah dengan cara pemograman. Hal ini penting bagi seorang programer untuk mengidentifikasi permasalahan dan menyusun sebuah solusi dalam bentuk pemograman.
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved

Ada beberapa paradigma pemograman sebagai contoh paradigma prosedural yang sudah sering kita gunakan dalam materi sebelumnya, dan paradigma object oriented programing(OOP) atau Pemograman Berorientasi Objek.
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved

### 1.1 Apa itu OOP

OOP bukan hanya sekedar tentang merubah cara menuliskan baris kode, tapi akan mempermudah dalam pengembangan aplikasi kita. sebagai contoh kita analogikan dalam kehidupan sehari-hari kita melakukann komukasi jarak jauh, berbelanja, main game dan lain sebagainya. untuk mempermudahkan semua itu akhirnya kita mengenal yang namanya smartphone. Nah dalam OOP smartphone dapat diartikan sebagai kelas(class) dan Samaun S11 atau iPun X sebagai objek (object), dan fitur-fitur didalamnya berupa metode (method), type, imei, simcard dan lainnya sebagai properti(property). smartphone tersebut dapat mempermudah kita dalam melakukan sesuatu. Contoh bila kita mau pergi kesuatu tempat dari pada antri menuggu kendaraan umum kita dapat menggunakan aplikasi ngabjek atau ngabtaksi, mau main game tinggal buka aplikasi gaming, mau internetan bisa buka aplikasi nomad browser, dan lain sebagainya.

Kesimpulan OOP paradigma pemograman dengan cara menyediakan objek-objek sebagai solusi dalam penyelesaikan masalah pemograman. objek ini biasanya terdiri dari properti dan metode yang saling berkaitan yang digabungkan menjadi satu variabel untuk menyelesaiakan permasalahan sendiri, dan dapat bekerja sama dengan objek lain untuk menyelesaikan permasalahan pemograman yang lebih rumit.
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved

Objek merupakan sebuah variabel instansiasi dari sebuah kelas, atau dapat kita bayangakan sebuah array yang didalam elemennya terdapat bukan hanya data tetapi juga fungsi-fungsi yang disebut metode(method).

Demikian gambaran singkat mengenai Pemograman Berorientasi Objek, untuk lebih memahami kita pelajari lebih lanjut pada materi dibawah ini.
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved

>tips :
>siapkan secangkir kopi walaupun anda bukan seorang yang suka minum kopi, dan putar musik kegemaran anda, hal ini dapat membatu kita dalam mempelajari materi selanjutnya.

### 1.2 Perbedaan Pemograman Prosedural dan Pemograman Objek

Pemograman Prosedural bekerja secara terstruktur dan sitematis, sedangkan OOP bekerja secara flexsible dengan menggunakan objek, atau dapat kita gunakan analogi seperti sebelumnya.
Dimana sebuah pemogram prosedural adalah kita tanpa smartphone dan OOP kita dengan smartphone, keduanya dapat mengerjakan hal yang sama tapi dengan cara yang berbeda, contoh saat kita ingin kesekolah atau kekantor dengan ojek dalam pemograman prosedural kita akan menjalankan prosedur siapkan uang tunai pergi ke pangkalan ojek, jika ojek tidak ada tunggu, jika tidak bisa menunggu pergi ke pangakalan lain, jika sudah ketemu ojeknya sampaikan ke abang ojek tujuan kita dan tanya biayanya, jika sudah oke berangkat ketujuan dengan abang ojek dan lakukan pembayaran. Nah dalam pemograman OOP kita cukup menggunakan smartphone dengan membuka aplikasi ngabjek tadi masukan tujuan kita, maka aplikasi tadi akan menemukan ojeknya serta menginformasikan biaya yang harus kita keluarkan, kita bisa pilih motode pembayaran secara tunai atau dengan nomad pay, jika kita setuju tinggal pilih oke dan menunggu jemputan dari abang ojeknya sambil mendengar musik dan menyeruput kopi yang kita buat tadi.

Nah diatas kita melakukan hal yang sama dengan cara yang berbeda dan tentu memiliki kelebihan dan kekurangan sendiri.

Dari analogi diatas pemograman prosedural berisi perintah dan tugas tugas yang terstruktur secara sitematis sehingga permasalahan dapat diselesaikan, sedangkan dalam OOP pemograman menggunakan sebuah objek yang dapat menyelesaikan masalah dengan solusi yang telah ditanamkan kepadanya dan bisa kita lihat metode-metode didalam objek dapat bekerja sama untuk menyelesaikan masalah seperti contoh diatas ngabjek dapat bekerja sama dengan nomad pay untuk menyelesaikan masalah pembayaran.
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved

Secara umum Pemograman Prosedural berkerja secara terstruktur dengan cara memanggil prosedur-prosedur, prosedure ini berupa fungsi, rutinitas dan sub rutinitas, melakukan pendekatan tahap demi tahap terhapat masalah komputasi, untuk memecahkan masalah tersebut menjadi variabel dan rutinitas melalui perintah-perintah terstruktur dan berurutan.

Dengan demikian pemograman prosedural melakukan pendekatan dari atas dengan memecah sebuah program besar menjadi bagian bagian kecil berupa fungsi. ini bekerja secara langsung secara logika megikuti alur. data akan berpindah dari satu fungsi ke fungsi yang lain secara bebas.

Sedangkan pemograman berorientasi terhadap objek semua hal dalam komputasi akan di ibaratkan sebagai sebuah objek yang terorganisir bertujuan membantu dalam menyelesaikan masalah komputasi. 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 pemberikan batas hak akses modifikasi dimana dalam OOP dibagi 3 kelompok yaitu, private, protected, public dengan demikian data dirasa "lebih aman" dari pada pemograman prosedural.
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved

Dibawah ini sebuah contoh sederhana baris kode menggunakan pendekatan prosedural dan pendekatan secara objek untuk membuat sebuah array, menambahkan nilai kedalam array kemudian memanggil nilai tersebut.
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved

contoh Prosedural :

```php
<?php
function newContoh(){
retrun array();
}

function SetContoh(&$contoh, $nama, $nilai){
return $contoh[$nama] = $nilai;
}

function getContoh($contoh, $nama){
return isset($contoh[$nama]) ? $contoh[$nama] : null;
}

#driven
$contoh = newContoh();
setContoh($contoh, 'nama', 'Bellshade');
echo getContoh($contoh, 'nama'); //hasil Bellshade
?>
```

contoh OOP :

```php
<?php
class Contoh
{
private $param = array();

public function set($nama, $nilai){
$this->param[$nama] = $nilai;
}

public function get($nama){
return isset($this->param[$nama]) ? $this->param[$nama] : null;
}
}

#driven
$contoh = new Contoh();
$contoh->set('nama', 'Bellshade');
echo $contoh->get('nama') //Hasil Bellshade
?>
```
87 changes: 84 additions & 3 deletions basics/5_perulangan/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
- [2.1 Nested Foreach](#21-nested-foreach)
- [List sebagai Pengganti Nested Foreach](#list-sebagai-pengganti-nested-foreach)
- [3. Perulangan While](#3-perulangan-while)
- [4. Perulangan Do While](#4-perulangan-do-while)
- [Referensi](#referensi)
- [4. Perulangan Do While](#4-perulangan-do-while)
- [5. Perulangan Tak Terbatas](#5-perulangan-tak-terbatas)

## Jenis-Jenis Perulangan

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

## 5. Perulangan Tak Terbatas

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 :

```php
<?php
$i = 0;
while ($i < 5)
{
echo $i++;
}
?>
```

Maka kode di atas akan melakukan print dari angka 0 sampai angka 4, tapi jika tanpa sengaja variabel $i kita posisikan seperti ini :

```php
while($i < 5)
{
$i = 0;
echo $i++;
}
```

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`.
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved

Jika hal ini terjadi saat kita melakukan testing atau debugging terhadap baris kode kita, jangan jadi panik coba lakukan salah satu dari metode ini :

1. Jika testing kita berjalan dalam webpage.
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.
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved
2. Jika PHP kita jalankan dalam mode Command Line Interface (CLI).
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.

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 :
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved

```php
<?php
$data = false;
$i = 1; //variable untuk mengecek banyak nya loop
while ($data = true) //Seharunya kita mengecek apakah data ini benar tetapi kita malah mengeset data ini menjadi benar
{
echo 'Data Benar<br>';
$data = false;

#pencegahan sementara agar tidak terjadi infinite loop
$i++;
if ($i > 5)
{
#hentikan perulangan
break;
}
}

?>
```

Hasil dari perulangan di atas akan menjadi seperti ini :

```text
data benar
data benar
data benar
data benar
data benar
```

Dimana kita seharusnya menggunakan operator pembanding(`==`,`===`) tapi tanpa sengaja kita menggukan operator penugasan(`=`). Kemudian kita dapat memperbaiki perulangan yang kita buat.
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved

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 :
wildanie12 marked this conversation as resolved.
Show resolved Hide resolved

```php
$data = true;
while (true = $data)
{
lakukan sesuatu;
$data = false;
}
```

Baris kode diatas tidak akan melakukan perulangan tetapi akan memunculkan pesan kesalahan. Hal ini tidak berlaku untuk penggunaan operator lebih besar atau lebih kecil.

### Referensi

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