Lampung Dev – Pemrograman Berbasis Objek (Object-Oriented Programming, OOP) adalah paradigma pemrograman yang menggunakan “objek” untuk merepresentasikan data dan metode. OOP membantu dalam membuat kode yang lebih modular, terorganisir, dan mudah dipelihara. Dalam artikel ini, kita akan membahas konsep dasar OOP dan bagaimana mengimplementasikannya menggunakan JavaScript.
Baca juga: Cara Menggunakan Foreach di Node.js?
Konsep Dasar Pemrograman Berbasis Objek
- Objek Objek adalah entitas yang memiliki atribut (properti) dan perilaku (metode). Objek adalah instansiasi dari sebuah kelas.
- Contoh: Mobil memiliki atribut seperti warna dan model, serta metode seperti bergerak dan berhenti.
- Kelas (Class) Kelas adalah cetak biru atau template untuk membuat objek. Kelas mendefinisikan atribut dan metode yang akan dimiliki oleh objek.
- Contoh: Kelas
Mobil
mendefinisikan atribut sepertiwarna
danmodel
, serta metode sepertibergerak()
danberhenti()
.
- Contoh: Kelas
- Enkapsulasi (Encapsulation) Enkapsulasi adalah konsep menyembunyikan detail implementasi dari pengguna dan hanya mengekspos metode dan properti yang diperlukan. Ini membantu dalam melindungi data dan memastikan integritas objek.
- Contoh: Menggunakan metode getter dan setter untuk mengakses dan mengubah nilai properti secara aman.
- Pewarisan (Inheritance) Pewarisan adalah mekanisme dimana sebuah kelas dapat mewarisi properti dan metode dari kelas lain. Ini memungkinkan penggunaan kembali kode dan memperluas fungsionalitas kelas yang ada.
- Contoh: Kelas
MobilBalap
mewarisi dari kelasMobil
dan menambahkan properti atau metode tambahan.
- Contoh: Kelas
- Polimorfisme (Polymorphism) Polimorfisme memungkinkan objek untuk menggunakan metode yang sama dengan cara yang berbeda. Ini bisa dicapai melalui overloading (menimpa) metode di kelas anak.
- Contoh: Metode
bergerak()
bisa diimplementasikan berbeda di kelasMobil
danMobilBalap
.
- Contoh: Metode
Implementasi OOP dengan JavaScript
Mari kita lihat bagaimana konsep-konsep ini dapat diimplementasikan dalam JavaScript.
1. Membuat Kelas dan Objek
class Mobil {
constructor(merk, model, tahun) {
this.merk = merk;
this.model = model;
this.tahun = tahun;
}
bergerak() {
console.log(`${this.merk} ${this.model} bergerak.`);
}
berhenti() {
console.log(`${this.merk} ${this.model} berhenti.`);
}
}
// Membuat objek dari kelas Mobil
const mobilSaya = new Mobil('Toyota', 'Corolla', 2020);
mobilSaya.bergerak(); // Output: Toyota Corolla bergerak.
mobilSaya.berhenti(); // Output: Toyota Corolla berhenti.
Penjelasan:
- Di sini,
class Mobil
mendefinisikan sebuah kelas dengan konstruktor yang menerimamerk
,model
, dantahun
sebagai parameter. Mobil
memiliki dua metode:bergerak
danberhenti
, yang mencetak pesan ke konsol.const mobilSaya
membuat instance baru dari kelasMobil
dengan nilai atribut yang diberikan dan kemudian memanggil metodebergerak
danberhenti
.
Baca juga: Cara Install XAMPP (Apache, MariaDB, PHP dan Perl) pada Windows
2. Enkapsulasi dengan Getter dan Setter
class Mobil {
constructor(merk, model, tahun) {
this._merk = merk;
this._model = model;
this._tahun = tahun;
}
get merk() {
return this._merk;
}
set merk(merkBaru) {
this._merk = merkBaru;
}
bergerak() {
console.log(`${this._merk} ${this._model} bergerak.`);
}
berhenti() {
console.log(`${this._merk} ${this._model} berhenti.`);
}
}
const mobilSaya = new Mobil('Honda', 'Civic', 2019);
mobilSaya.bergerak(); // Output: Honda Civic bergerak.
mobilSaya.merk = 'Nissan';
console.log(mobilSaya.merk); // Output: Nissan
Penjelasan:
- Enkapsulasi diterapkan dengan menggunakan underscore (
_
) di depan nama properti (_merk
,_model
,_tahun
) untuk menandai bahwa properti tersebut bersifat privat. get merk
danset merk
adalah metode akses (getter dan setter) yang memungkinkan kita mengakses dan mengubah nilai propertimerk
dengan cara yang aman.- Objek
mobilSaya
dibuat denganmerk
awal ‘Honda’, yang kemudian diubah menjadi ‘Nissan’ menggunakan settermerk
.
3. Pewarisan
class Mobil {
constructor(merk, model, tahun) {
this.merk = merk;
this.model = model;
this.tahun = tahun;
}
bergerak() {
console.log(`${this.merk} ${this.model} bergerak.`);
}
berhenti() {
console.log(`${this.merk} ${this.model} berhenti.`);
}
}
class MobilBalap extends Mobil {
constructor(merk, model, tahun, kecepatanMaksimum) {
super(merk, model, tahun);
this.kecepatanMaksimum = kecepatanMaksimum;
}
bergerak() {
console.log(`${this.merk} ${this.model} bergerak dengan kecepatan tinggi!`);
}
tampilkanKecepatanMaksimum() {
console.log(`Kecepatan maksimum ${this.merk} ${this.model} adalah ${this.kecepatanMaksimum} km/jam.`);
}
}
const mobilBalapSaya = new MobilBalap('Ferrari', 'F8', 2022, 340);
mobilBalapSaya.bergerak(); // Output: Ferrari F8 bergerak dengan kecepatan tinggi!
mobilBalapSaya.tampilkanKecepatanMaksimum(); // Output: Kecepatan maksimum Ferrari F8 adalah 340 km/jam.
Penjelasan:
class MobilBalap
mewarisi dariclass Mobil
menggunakan kata kunciextends
.- Konstruktor
MobilBalap
memanggil konstruktorMobil
menggunakansuper
untuk menginisialisasi properti yang diwarisi. MobilBalap
menambahkan properti barukecepatanMaksimum
dan metodetampilkanKecepatanMaksimum
.bergerak
diMobilBalap
menimpa (override) metodebergerak
diMobil
untuk mencetak pesan yang berbeda.
Baca juga: Bagaimana Prospek Karir Jurusan Teknik Informatika?
4. Polimorfisme
class Mobil {
constructor(merk, model, tahun) {
this.merk = merk;
this.model = model;
this.tahun = tahun;
}
bergerak() {
console.log(`${this.merk} ${this.model} bergerak.`);
}
berhenti() {
console.log(`${this.merk} ${this.model} berhenti.`);
}
}
class MobilBalap extends Mobil {
constructor(merk, model, tahun, kecepatanMaksimum) {
super(merk, model, tahun);
this.kecepatanMaksimum = kecepatanMaksimum;
}
bergerak() {
console.log(`${this.merk} ${this.model} bergerak dengan kecepatan tinggi!`);
}
}
const mobilBiasa = new Mobil('Toyota', 'Corolla', 2020);
const mobilBalapSaya = new MobilBalap('Ferrari', 'F8', 2022, 340);
mobilBiasa.bergerak(); // Output: Toyota Corolla bergerak.
mobilBalapSaya.bergerak(); // Output: Ferrari F8 bergerak dengan kecepatan tinggi!
Penjelasan:
class Mobil
danclass MobilBalap
mendefinisikan metodebergerak
masing-masing dengan implementasi berbeda.mobilBiasa
adalah instance dariMobil
, sedangkanmobilBalapSaya
adalah instance dariMobilBalap
.- Ketika
bergerak
dipanggil padamobilBiasa
, ia menggunakan implementasi dariMobil
. Sebaliknya, ketikabergerak
dipanggil padamobilBalapSaya
, ia menggunakan implementasi dariMobilBalap
, menunjukkan konsep polimorfisme.
Kesimpulan
Pemrograman Berbasis Objek (OOP) menawarkan banyak manfaat seperti modularitas, kemudahan dalam pemeliharaan kode, dan fleksibilitas dalam pengembangan perangkat lunak. Dengan memahami konsep dasar seperti objek, kelas, enkapsulasi, pewarisan, dan polimorfisme, pengembang dapat menulis kode yang lebih efisien dan dapat diandalkan. JavaScript, sebagai bahasa pemrograman yang fleksibel, mendukung paradigma OOP dan memungkinkan pengembang untuk menerapkan prinsip-prinsip ini dalam pengembangan aplikasi mereka.