Pengertian OOP (Object Oriented Programming)

Pengertian OOP (Object Oriented Programming)

Object-Oriented Programming atau OOP adalah metode programming yang berorientasi pada object. Program yang berupa gabungan dari beberapa komponen kecil yang telah ada sebelumnya, sehingga dapat mempermudah pekerjaan seorang programmer dalam melakukan pengembangan.

Metode ini memiliki empat prinsip yang menjadi konsep dasar OOP yaitu :

  • Encapsulation adalah konsep tentang pengikatan data atau metode berbeda yang di satukan atau “dikapsulkan” menjadi satu unit data. Encapsulation juga sering di gunakan karena terdapat fitur information-hiding mechanism. Mekanisme ini menghilangkan akses publik ke atribut-atribut yang terdapat di dalam “kapsul” tersebut. Metode ini dapat memudahkan kamu dalam mendefinisikan atribut apa saja yang dapat di baca dan di perbarui.Pengimplementasiannya :
    Kapsulnya itu adalah class. Isi kapsulnya adalah data (variabel) dan fungsi (method). Encapsulation artinya kamu membungkus data dan fungsi ke dalam 1 class, lalu mengatur siapa yang boleh lihat atau ubah data itu, dan apa saja yang boleh di baca dan di ubah.
<?php 

class Obat extends Model
{
    protected $fillable = ['nama', 'dosis'];      // hanya ini yang bisa diisi
    protected $hidden = ['kode_rahasia_pabrik'];  // disembunyikan

    public function aturDosis($dosis)
    {
        if ($dosis < 1000) {
            $this->dosis = $dosis;
        } else {
            throw new Exception("Overdosis!");
        }
    }
}
?>
  • Inheritance Prinsip adalah di mana kita dapat membentuk class baru yang “mewarisi” atau memiliki bagian-bagian dari class yang sudah ada sebelumnya. Konsep ini menggunakan sistem hirarki atau bertingkat. Semakin spesifik subclassnya, semakin sedikit pula komponen yang dapat di warisi class tersebut.
    Pengimplementasiannya :
    Pembuatan Class baru ( mobil ) dengan tambahan extend ke class utama ( kendaraan ) dengan mewarisi bagian yang sudah ada sebelumnya ( function bergerak ). Mobil mewarisi method bergerak() dari Kendaraan, tapi di-override supaya lebih spesifik.
class Kendaraan {
    public function bergerak() {
        return "Kendaraan bergerak";
    }
}

class Mobil extends Kendaraan {
    public function bergerak() {
        return "Mobil melaju di jalan";
    }
}

$kendaraan = new Kendaraan();
echo $kendaraan->bergerak(); // Output: Kendaraan bergerak

$mobil = new Mobil();
echo $mobil->bergerak(); // Output: Mobil melaju di jalan
  • Abstract Class adalah class-class yang memiliki informasi abstrak dan metode-metode dari sekumpulan data. Abstract Class tidak bisa di ubah dan berlaku juga sebagai kerangka dalam penciptaan berbagai subclass (berperan seperti Superclass yang di bahas di konsep Inheritance). Suatu abstract class memiliki informasi dan metode yang dapat di turunkan ke subclass-nya. Kemudian, seluruh subclass tersebut akan mengikuti apa saja metode turunan dari abstract class tersebut.
abstract class Bentuk {
    abstract public function luas();
}

class Persegi extends Bentuk {
    private $sisi;

    public function __construct($sisi) {
        $this->sisi = $sisi;
    }

    public function luas() {
        return $this->sisi * $this->sisi;
    }
}

$persegi = new Persegi(4);
echo $persegi->luas(); // Output: 16


Bentuk adalah kelas abstrak dengan method abstrak luas(), yang wajib diimplementasi oleh subclass.
Pengguna tidak perlu tahu bagaimana luas dihitung, cukup panggil method luas()

  • Polymorphism Prinsip ( bentuk banyak ) adalah konsep di mana suatu objek berbeda-beda dapat di akses melalui satu interface. Sebuah objek polymorphic dapat beradaptasi dengan metode apapun yang di implementasikan pada objek tersebut, dan setiap class memiliki interpretasinya tersendiri terhadap interfacenya.
    Pengimplementasiannya :
    Method suara() punya implementasi berbeda sesuai jenis hewan, walaupun namanya sama.
class Hewan {
    public function suara() {
        return "Hewan bersuara";
    }
}

class Kucing extends Hewan {
    public function suara() {
        return "Meong";
    }
}

class Anjing extends Hewan {
    public function suara() {
        return "Guk guk";
    }
}

$hewan1 = new Kucing();
$hewan2 = new Anjing();

echo $hewan1->suara(); // Output: Meong
echo $hewan2->suara(); // Output: Guk guk

Dalam Java, terdapat 2 jenis polymorphism yaitu :
Static Polymorphism ( method overloading ) — Ini terjadi saat banyak method dengan nama sama tapi parameter berbeda dalam satu class.

class Calculator {
    int tambah(int a, int b) {
        return a + b;
    }
    int tambah(int a, int b, int c) {
        return a + b + c;
    }
}

Calculator calc = new Calculator();
System.out.println(calc.tambah(2, 3));      // Output: 5
System.out.println(calc.tambah(2, 3, 4));   // Output: 9

Dynamic Polymorphism. — Ini terjadi saat subclass meng-override method superclass, dan pemilihan method yang dipanggil terjadi waktu runtime (runtime).

class Hewan {
    void suara() {
        System.out.println("Hewan bersuara");
    }
}

class Kucing extends Hewan {
    @Override
    void suara() {
        System.out.println("Meong");
    }
}

Hewan hewan = new Kucing();
hewan.suara();  // Output: Meong

Kelebihan OOP

  1. Modular dan Terstruktur. Karena kode dipisah dalam class, program jadi lebih terorganisir dan mudah dipahami.
  2. Reusable (Bisa Dipakai Ulang). Class dan objek bisa dipakai ulang di berbagai bagian program tanpa menulis ulang kode.
  3. Mudah Maintenance & Pengembangan. Kalau ada bug atau ingin tambah fitur, kamu cukup ubah class tertentu tanpa harus bongkar seluruh kode.
  4. Memodelkan Dunia Nyata. OOP memudahkan memodelkan objek nyata (misal: Mobil, User, Produk) sehingga logika program jadi lebih natural.
  5. Enkapsulasi Membuat Keamanan Data. Data bisa dilindungi dari akses luar yang tidak diinginkan lewat encapsulation.
  6. Inheritance Memudahkan Pewarisan dan Ekstensi. Kode bisa diturunkan dan dikembangkan tanpa mengulang dari nol.
  7. Polymorphism Membuat Kode Lebih Fleksibel. Objek bisa diperlakukan sama meskipun dari class berbeda, mempermudah pengembangan sistem besar.

Kekurangan OOP

  1. Lebih Kompleks untuk Pemula. Konsep OOP seperti inheritance, polymorphism, abstraction butuh waktu untuk dipahami.
  2. Kinerja Bisa Lebih Lambat. Karena ada overhead dari objek dan pemanggilan method, program OOP kadang lebih berat dibandingkan pemrograman prosedural.
  3. Over-Engineering. Kadang developer bisa terlalu rumit bikin class yang sebenarnya nggak perlu, bikin kode jadi sulit dipahami dan di-maintain.
  4. Tidak Cocok untuk Semua Masalah. Untuk program yang sangat sederhana atau scripting kecil, OOP kadang malah berlebihan.
  5. Debugging Bisa Sulit. Karena ada banyak interaksi antar objek dan inheritance, bug bisa tersembunyi dan sulit dilacak.

Tujuan OOP adalah bikin kode lebih rapi, aman, gampang diatur, mudah dikembangkan, dan dekat dengan logika dunia nyata. Tujuan / Manfaat penggunaan OOP :

  • Menulis kode yang lebih rapi dan jelas
  • Meminimalkan duplikasi kode
  • Kalau ada bug, kamu tahu harus perbaiki bagian mana (gak harus bongkar semua)
  • bikin logika aplikasi lebih mudah dipahami, apalagi dalam tim besar
  • bisa pakai ulang logika class yang sama untuk class lain yang mirip
  • Hanya bisa diubah lewat method resmi yang kamu kontrol (get/set)
  • Cocok banget buat program skala besar yang kompleks