# Modul Pembelajaran: Pengantar OOP & Lingkungan Kerja

## Bagian 1: Review Procedural vs OOP

### 1.1. Pemrograman Prosedural
Sebelum ada OOP, kita menulis kode secara **Prosedural**.
-   Fokus pada urutan langkah (prosedur/fungsi).
-   Data dan Fungsi terpisah.
-   Cocok untuk program kecil dan sederhana.

**Contoh Prosedural:**
```php
$nama = "Budi";
$energi = 100;

function makan($energi_saat_ini) {
    return $energi_saat_ini + 10;
}

$energi = makan($energi);
```

### 1.2. Pemrograman Berorientasi Objek (OOP)
OOP adalah paradigma yang memandang program sebagai kumpulan **Objek** yang saling berinteraksi.
-   Fokus pada Objek (Benda).
-   Data (Property) dan Fungsi (Method) dibungkus jadi satu dalam Objek.
-   Cocok untuk aplikasi besar dan kompleks.

**Contoh OOP:**
```php
class Manusia {
    public $nama;
    public $energi = 100;

    public function makan() {
        $this->energi += 10;
    }
}

$budi = new Manusia();
$budi->makan();
```

### 1.3. Kenapa Harus OOP?
1.  **Struktur Lebih Rapi**: Kode tidak berantakan (Spaghetti Code).
2.  **Reusability**: Class yang sudah dibuat bisa dipakai di project lain.
3.  **Easier Maintenance**: Lebih mudah mencari bug karena terisolasi di dalam objek.
4.  **Standar Industri**: Framework modern (Laravel, Symfony) 100% OOP.

---

## Bagian 2: Persiapan Lingkungan Kerja (Tools)

Untuk mulai coding PHP OOP secara profesional, Anda wajib menginstal tools berikut:

### 2.1. Web Server & PHP (XAMPP / Laragon)
PHP adalah bahasa server-side, jadi butuh server untuk berjalan.
-   **Windows**: Gunakan **Laragon** (Rekomendasi) atau **XAMPP**.
-   **Mac**: Gunakan **MAMP** atau **Laravel Valet**.
-   **Linux**: Install Apache/Nginx & PHP via terminal.

**Cara Cek Instalasi:**
Buka Terminal/CMD, ketik: `php -v`.

### 2.2. Code Editor (VS Code)
Jangan pakai Notepad! Gunakan **Visual Studio Code**.
**Extension Wajib:**
-   **PHP Intelephense**: Untuk auto-complete dan deteksi error.
-   **Material Icon Theme**: Agar ikon file terlihat jelas.
-   **Prettier**: Untuk merapikan kode.

### 2.3. Version Control (Git)
Git wajib hukumnya bagi programmer.
-   Download di [git-scm.com](https://git-scm.com/).
-   Setting awal:
    ```bash
    git config --global user.name "Nama Anda"
    git config --global user.email "email@anda.com"
    ```

---

## Bagian 3: Konsep "Everything is an Object"

Dalam OOP, kita diajak untuk melihat dunia nyata dan memodelkannya ke dalam kode.

### 3.1. Analogi Mobil
Bayangkan sebuah Mobil.
-   **Sifat (Properties)**: Warna, Merk, Kecepatan, Jumlah Roda.
-   **Perilaku (Methods)**: Maju, Mundur, Belok, Klakson.

Dalam kode, kita buat cetakannya (**Class**):
```php
class Mobil {
    public $warna;
    public $merk;
    
    public function maju() {
        echo "Mobil maju...";
    }
}
```

Dari cetakan itu, kita bisa buat banyak mobil (**Object**):
-   Mobil A (Merah, Toyota)
-   Mobil B (Hitam, Honda)

### 3.2. Analogi Game RPG
-   **Class**: `Hero`
-   **Properties**: `Health`, `Mana`, `AttackPower`
-   **Methods**: `attack()`, `defend()`, `heal()`

---

## Bagian 4: Memulai Project Pertama

1.  Buka folder `htdocs` (di XAMPP) atau `www` (di Laragon).
2.  Buat folder baru: `belajar-oop`.
3.  Buka folder itu di VS Code.
4.  Buat file `index.php`.
5.  Tulis kode:
    ```php
    <?php
    echo "Halo Dunia OOP!";
    ```
6.  Buka browser: `localhost/belajar-oop`.

Selamat! Anda siap menyelami dunia OOP.
