Access Modifier dalam OOP C# – Pemula

0
417

Access modifier adalah “penjaga pintu” yang mengatur siapa boleh mengakses bagian-bagian kelas seperti field, method, atau constructor di C#. Mereka penting dalam OOP untuk menjaga data aman dan program terstruktur.

Bayangkan kelas seperti rumah: public seperti pintu depan terbuka untuk semua, private seperti kamar pribadi hanya untuk pemilik.

Jenis Access Modifier

C# punya enam access modifier utama: public, private, protected, internal, protected internal, dan private protected.

Modifier Akses dari Mana?
public Mana saja (seluruh program)
private Hanya dalam kelas itu sendiri
protected Kelas sendiri + kelas turunan
internal Dalam assembly (proyek) yang sama
protected internal Assembly sama atau kelas turunan di mana saja
private protected Kelas sendiri + turunan di assembly sama

Default untuk member kelas adalah private, sedangkan untuk kelas top-level adalah internal.

Analogi Dunia Sekolah

Supaya mudah dipahami, perhatikan analogi berikut:

Access Modifier Analogi di Sekolah
public Semua warga sekolah boleh tahu
private Rahasia pribadi siswa
protected Hanya keluarga
internal Hanya satu sekolah
protected internal Satu yayasan

Public: Terbuka untuk Semua

Public memungkinkan akses dari mana saja, cocok untuk method atau field yang harus digunakan luas.

Contoh Sederhana (Siswa):

using System;

class Siswa {
    public string nama = "Andi";  // Bisa diakses dari mana saja
    public void Tampilkan() {
        Console.WriteLine("Nama: " + nama);
    }
}

class Program {
    static void Main() {
        Siswa s = new Siswa();
        Console.WriteLine(s.nama);  // OK!
        s.Tampilkan();  // Output: Nama: Andi
    }
}

Ini seperti nama siswa di papan kelas, semua bisa lihat.

Private: Rahasia Class

Private hanya bisa diakses dalam kelasnya sendiri, bagus untuk data sensitif seperti password.

Contoh (Bank):

class Rekening {
    private double saldo = 1000000;  // Hanya Rekening yang bisa ubah langsung

    public void Setor(double jumlah) {
        saldo += jumlah;  // Akses saldo di sini OK
    }

    public double LihatSaldo() {
        return saldo;
    }
}

class Program {
    static void Main() {
        Rekening r = new Rekening();
        // r.saldo = 500000;  // ERROR! Private
        r.Setor(500000);
        Console.WriteLine(r.LihatSaldo());  // Output: 1500000
    }
}

Analogi: Saldo seperti isi dompet, hanya pemilik yang pegang.

Protected: Warisan Kelas

Protected bisa diakses di kelas sendiri dan anak kelasnya (inheritance), berguna saat turunan butuh akses data induk.

Contoh (Kendaraan -> Motor):

class Kendaraan {
    protected string mesin = "V2";
}

class Motor : Kendaraan {
    public void Info() {
        Console.WriteLine("Mesin: " + mesin);  // OK, protected
    }
}

class Program {
    static void Main() {
        Motor m = new Motor();
        m.Info();  // Output: Mesin: V2
        // Console.WriteLine(m.mesin);  // ERROR! Diluar kelas turunan
    }
}

Seperti resep keluarga, anak waris bisa pakai tapi orang luar tidak.

Internal: Batas Proyek

Internal hanya dalam satu assembly (proyek .exe atau .dll yang sama).

Contoh (Hitung dalam Proyek):

internal class Kalkulator {
    internal int Tambah(int a, int b) {
        return a + b;
    }
}

class Program {
    static void Main() {
        Kalkulator k = new Kalkulator();
        Console.WriteLine(k.Tambah(5, 3));
    }
}

Jika proyek lain, tidak bisa akses. Analogi: Hanya karyawan kantor yang boleh pakai alat kantor.

Protected Internal & Private Protected

Protected internal: Assembly sama ATAU turunan di mana saja.

Private protected: Turunan HANYA di assembly sama (C# 7.2+).

Contoh Singkat Private Protected:

class Induk {
    private protected int rahasia = 42;
}

class Anak : Induk {
    public void Tampil() {
        Console.WriteLine(rahasia);  
    }
}

Ini seperti rahasia keluarga tapi hanya cabang di kota yang sama.

Latihan untuk Siswa SMK

  1. Buat Kelas Hewan dengan field protected umur, method public BertambahUmur(). Buat kelas turunan Kucing, tampilkan umur dari Kucing. Coba akses umur langsung dari Main – apa errornya?
  2. Simulasi Toko: Kelas Produk private hargaBeli, public hargaJual. Method internal hitungUntung(). Test di Main dan kelas lain. Perbandingan: Ubah contoh public jadi private, lihat apa yang error dan kenapa.
  3. Project Mini: Buat sistem perpustakaan dengan Buku (internal), Siswa (public), dan Peminjaman (protected untuk turunan). Compile dan test akses.

Coba jalankan di Visual Studio atau online compiler. Jika terjadi error, maka di situlah ada pembelajarnya.(*)

LEAVE A REPLY

Please enter your comment!
Please enter your name here