Pemrograman Berorientasi Objek (OOP) Pada JavaScript

JavaScript adalah salah satu bahasa pemrograman paling populer di dunia, digunakan dalam pengembangan web, aplikasi, dan perangkat lunak lainnya. Salah satu paradigma yang didukung oleh JavaScript adalah Pemrograman Berorientasi Objek (Object-Oriented Programming atau OOP). Paradigma ini memudahkan pengembang dalam membangun aplikasi yang kompleks dengan cara mengorganisasi kode menjadi objek-objek yang saling berinteraksi.

Artikel ini akan membahas konsep dasar OOP dalam JavaScript, termasuk kelas (class), objek (object), pewarisan (inheritance), enkapsulasi (encapsulation), dan polimorfisme (polymorphism).
Apa itu Pemrograman Berorientasi Objek?

Pemrograman Berorientasi Objek adalah paradigma pemrograman yang berfokus pada penciptaan objek. Objek adalah entitas yang memiliki properti dan metode. Dalam JavaScript, objek digunakan untuk merepresentasikan hal-hal nyata atau konsep abstrak.

Contoh objek dalam JavaScript:

const mobil = {
  merk: "Toyota",
  model: "Avanza",
  tahun: 2020,
  nyalakanMesin: function () {
    console.log("Mesin dinyalakan");
  },
};

console.log(mobil.merk); // Output: Toyota
mobil.nyalakanMesin(); // Output: Mesin dinyalakan

Konsep Dasar OOP dalam JavaScript

Kelas dan Objek
Dalam OOP, kelas adalah blueprint untuk membuat objek. JavaScript mulai mendukung sintaks kelas secara eksplisit sejak ES6.

Contoh:

class Mobil {
  constructor(merk, model, tahun) {
    this.merk = merk;
    this.model = model;
    this.tahun = tahun;
  }

  nyalakanMesin() {
    console.log(`${this.merk} ${this.model} mesin dinyalakan`);
  }
}

// Membuat objek dari kelas
const mobil1 = new Mobil("Toyota", "Avanza", 2020);
const mobil2 = new Mobil("Honda", "Civic", 2021);

console.log(mobil1.merk); // Output: Toyota
mobil2.nyalakanMesin(); // Output: Honda Civic mesin dinyalakan

Pewarisan (Inheritance)
Pewarisan memungkinkan sebuah kelas untuk mewarisi properti dan metode dari kelas lain. Dalam JavaScript, pewarisan dilakukan menggunakan kata kunci extends.

Contoh:

class Kendaraan {
  constructor(jenis, merk) {
    this.jenis = jenis;
    this.merk = merk;
  }

  info() {
    console.log(`Ini adalah ${this.jenis} merk ${this.merk}`);
  }
}

class Motor extends Kendaraan {
  constructor(merk, tipe) {
    super("Motor", merk); // Memanggil constructor kelas induk
    this.tipe = tipe;
  }

  infoTipe() {
    console.log(`Motor ini bertipe ${this.tipe}`);
  }
}

const motor1 = new Motor("Yamaha", "Sport");
motor1.info(); // Output: Ini adalah Motor merk Yamaha
motor1.infoTipe(); // Output: Motor ini bertipe Sport

Enkapsulasi (Encapsulation)
Enkapsulasi adalah konsep untuk membatasi akses ke properti atau metode tertentu. Dalam JavaScript, hal ini dilakukan dengan menggunakan properti atau metode bersifat privat.

Contoh:

class AkunBank {
  #saldo; // Properti privat

  constructor(nama, saldoAwal) {
    this.nama = nama;
    this.#saldo = saldoAwal;
  }

  setoran(jumlah) {
    this.#saldo += jumlah;
    console.log(`Setoran berhasil. Saldo sekarang: ${this.#saldo}`);
  }

  cekSaldo() {
    console.log(`Saldo Anda: ${this.#saldo}`);
  }
}

const akun1 = new AkunBank("Andi", 1000000);
akun1.setoran(500000); // Output: Setoran berhasil. Saldo sekarang: 1500000
akun1.cekSaldo(); // Output: Saldo Anda: 1500000

Catatan: Properti privat diawali dengan tanda # dan hanya dapat diakses dari dalam kelas.

Polimorfisme (Polymorphism)
Polimorfisme memungkinkan metode yang sama untuk memiliki perilaku berbeda pada kelas turunan.

Contoh:

class Hewan {
  suara() {
    console.log("Hewan bersuara");
  }
}

class Kucing extends Hewan {
  suara() {
    console.log("Meong");
  }
}

class Anjing extends Hewan {
  suara() {
    console.log("Guk guk");
  }
}

const hewan1 = new Hewan();
const kucing1 = new Kucing();
const anjing1 = new Anjing();

hewan1.suara(); // Output: Hewan bersuara
kucing1.suara(); // Output: Meong
anjing1.suara(); // Output: Guk guk

Manfaat OOP dalam JavaScript

  1. Modularitas: Kode lebih terorganisir karena menggunakan kelas dan objek.
  2. Reusabilitas: Kelas dapat digunakan kembali untuk membuat objek baru.
  3. Kemudahan Pemeliharaan: Struktur kode yang jelas memudahkan pengembang dalam memperbaiki atau menambah fitur.
  4. Abstraksi: Detail implementasi tersembunyi, sehingga pengembang hanya fokus pada fungsionalitas utama.

Kesimpulan

Pemrograman Berorientasi Objek dalam JavaScript adalah pendekatan yang sangat bermanfaat untuk mengembangkan aplikasi yang kompleks. Dengan memahami konsep dasar seperti kelas, pewarisan, enkapsulasi, dan polimorfisme, pengembang dapat menulis kode yang lebih efisien, terstruktur, dan mudah dipelihara.