Encapsulation dan Access Modifiers di C++

Encapsulation dan Access Modifiers di C++

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++

  1. public
    • Anggota dapat diakses dari mana saja, termasuk di luar kelas.
  2. private
    • Anggota hanya dapat diakses dari dalam kelas tempat mereka didefinisikan.
    • Ini adalah pengaturan default jika tidak ada access modifier yang ditentukan.
  3. 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

  1. Kontrol akses terhadap data:
    • Data penting hanya bisa diubah melalui metode yang diizinkan.
  2. Meningkatkan keamanan:
    • Mencegah akses langsung ke atribut internal.
  3. Kemudahan pemeliharaan:
    • Perubahan pada implementasi internal tidak memengaruhi kode eksternal.
  4. Validasi data:
    • Setter memungkinkan validasi sebelum atribut diubah.

Praktik Baik Encapsulation

  1. Selalu gunakan private untuk atribut kelas, kecuali jika benar-benar harus diakses secara langsung.
  2. Gunakan getter dan setter untuk mengontrol akses dan validasi data.
  3. Gunakan protected jika atribut perlu diakses oleh kelas turunan.
  4. 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

Your email address will not be published. Required fields are marked *