Encapsulation adalah salah satu pilar utama dalam Pemrograman Berorientasi Objek (OOP). Encapsulation melibatkan penyembunyian data dalam sebuah kelas dan hanya memperbolehkan akses melalui metode yang telah ditentukan.
Di C++, access modifiers digunakan untuk mengontrol visibilitas anggota kelas (atribut dan metode) guna mendukung konsep enkapsulasi.
Access Modifiers di C++
public
- Anggota dapat diakses dari mana saja, termasuk di luar kelas.
private
- Anggota hanya dapat diakses dari dalam kelas tempat mereka didefinisikan.
- Ini adalah pengaturan default jika tidak ada access modifier yang ditentukan.
protected
- Anggota dapat diakses dari dalam kelas itu sendiri dan kelas-kelas turunannya (subclass), tetapi tidak dari luar kelas.
Contoh Implementasi Encapsulation
Contoh Sederhana
#include <iostream>
using namespace std;
class Mobil {
private:
string merk; // Atribut privat
int tahun;
public:
// Setter untuk atribut merk
void setMerk(string m) {
merk = m;
}
// Getter untuk atribut merk
string getMerk() {
return merk;
}
// Setter untuk atribut tahun
void setTahun(int t) {
if (t > 1886) { // Validasi (mobil pertama kali dibuat tahun 1886)
tahun = t;
} else {
tahun = 1886; // Tahun default jika input tidak valid
}
}
// Getter untuk atribut tahun
int getTahun() {
return tahun;
}
};
int main() {
Mobil mobil1;
// Mengatur nilai atribut melalui setter
mobil1.setMerk("Toyota");
mobil1.setTahun(2020);
// Mengambil nilai atribut melalui getter
cout << "Merk: " << mobil1.getMerk() << endl;
cout << "Tahun: " << mobil1.getTahun() << endl;
return 0;
}
Output:
Merk: Toyota
Tahun: 2020
Menggunakan protected
protected
digunakan untuk mengizinkan akses anggota oleh kelas turunan.
Contoh:
#include <iostream>
using namespace std;
class Hewan {
protected:
string nama;
public:
void setNama(string n) {
nama = n;
}
};
class Anjing : public Hewan {
public:
void tampilkanNama() {
cout << "Nama Anjing: " << nama << endl; // Akses atribut protected
}
};
int main() {
Anjing anjing;
anjing.setNama("Bulldog");
anjing.tampilkanNama();
return 0;
}
Output:
Nama Anjing: Bulldog
Manfaat Encapsulation
- Kontrol akses terhadap data:
- Data penting hanya bisa diubah melalui metode yang diizinkan.
- Meningkatkan keamanan:
- Mencegah akses langsung ke atribut internal.
- Kemudahan pemeliharaan:
- Perubahan pada implementasi internal tidak memengaruhi kode eksternal.
- Validasi data:
- Setter memungkinkan validasi sebelum atribut diubah.
Praktik Baik Encapsulation
- Selalu gunakan private untuk atribut kelas, kecuali jika benar-benar harus diakses secara langsung.
- Gunakan getter dan setter untuk mengontrol akses dan validasi data.
- Gunakan protected jika atribut perlu diakses oleh kelas turunan.
- Hindari membuat semua anggota
public
, karena akan melanggar prinsip enkapsulasi.
Jika ada bagian yang ingin Anda eksplor lebih lanjut, seperti studi kasus implementasi enkapsulasi dalam program besar, beri tahu saya! 😊
Leave a Reply