#15 ENKAPSULASI

Enkapsulasi adalah konsep dalam Pemrograman Berorientasi Objek yang bertujuan:

Menyembunyikan data (data hiding) dan membatasi akses ke atribut melalui method (getter & setter).

Dengan enkapsulasi, data dalam objek lebih aman karena tidak dapat dimodifikasi secara langsung dari luar class.

A. Karakteristik Enkapsulasi

1. Atribut dibuat private
2. Akses atribut melalui:
Getter → untuk mengambil data
Setter → untuk mengubah data

3. Menggunakan access modifier:
private → hanya bisa diakses dari dalam class itu sendiri
public → bisa diakses dari luar
protected → dapat diakses oleh class turunan


B. Contoh Kasus (Sederhana)

❌ Tanpa Enkapsulasi

public class Siswa {
    String nama;     // langsung bisa diakses = tidak aman
    int umur;
}
Dari luar class:
Siswa s = new Siswa();
s.umur = -5;     // ERROR LOGIKA: umur tidak boleh minus

Data tidak aman → inilah alasan enkapsulasi dibutuhkan.


C. Contoh Enkapsulasi yang Benar (Dengan Getter & Setter)

public class Siswa {
    private String nama;
    private int umur;

    public void setNama(String nama) {
        this.nama = nama;
    }

    public String getNama() {
        return nama;
    }

    public void setUmur(int umur) {
        if(umur > 0 && umur < 100){
            this.umur = umur;
        } else {
            System.out.println("Umur tidak valid!");
        }
    }

    public int getUmur() {
        return umur;
    }
}

Pembahasan:

  • Atribut nama dan umur dibuat private → tidak bisa diakses langsung.
  • Atribut diakses lewat public method:

- setNama() dan setUmur() untuk memberi nilai
- getNama() dan getUmur() untuk mengambil nilai

  • Pada setUmur(), ada logika validasi → mencegah data tidak valid.

 

D. Class Main (Pengujian)

public class Main {
    public static void main(String[] args) {

        Siswa s = new Siswa();

        s.setNama("Budi");
        s.setUmur(16);

        System.out.println("Nama : " + s.getNama());
        System.out.println("Umur : " + s.getUmur());

        // uji validasi
        s.setUmur(-5); 
    }
}

Output

Nama : Budi
Umur : 16
Umur tidak valid!
 

E. Studi Kasus Enkapsulasi – Tingkat Menengah

Kasus: Enkapsulasi Data Rekening Bank

Class RekeningBank

public class RekeningBank {
    private String pemilik;
    private double saldo;

    public RekeningBank(String pemilik, double saldoAwal){
        this.pemilik = pemilik;
        this.saldo = saldoAwal;
    }

    public String getPemilik(){
        return pemilik;
    }

    public double getSaldo(){
        return saldo;
    }

    public void setor(double jumlah){
        saldo += jumlah;
    }

    public void tarik(double jumlah){
        if(jumlah > saldo){
            System.out.println("Saldo tidak cukup!");
        } else {
            saldo -= jumlah;
        }
    }
}

Pembahasan:

✔ Data tidak bisa diakses langsung
✔ Setiap transaksi melalui method → lebih aman
✔ Validasi saldo melindungi objek dari kesalahan logika


F. Contoh Pola Enkapsulasi yang Baik (Best Practice)

  1. Atribut selalu private
  2. Getter/Setter wajib ada jika atribut perlu diakses
  3. Beri validasi pada setter
  4. Gunakan konvensi penamaan Java (camelCase)
  5. Bedakan state dan behavior

G. Perbedaan Enkapsulasi dengan Konsep PBO Lain

Konsep Fungsi Contoh
Enkapsulasi Lindungi data getter, setter
Abstraksi Sederhanakan kompleksitas abstract class
Inheritance Pewarisan class class A extends B
Polimorfisme Banyak bentuk override/overload


Posting Komentar

Lebih baru Lebih lama

Formulir Kontak