Menu
CoddyTech

Pengubah Akses

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 31 dari 70.

Pengubah akses mengatur siapa yang dapat melihat dan menggunakan anggota class-mu. Pengubah ini adalah dasar enkapsulasi, salah satu prinsip inti OOP. Dengan membatasi akses, kamu melindungi datamu dan membuat batasan yang jelas dalam kodemu.

C# menyediakan empat access modifier utama:

public class BankAccount
{
    public string AccountHolder;      // Dapat diakses dari mana saja
    private decimal balance;          // Hanya di dalam class ini
    protected string accountType;     // Di dalam class ini dan class turunannya
    internal int branchCode;          // Di dalam assembly yang sama
}

Member public dapat diakses dari kode mana pun.

Anggota private hanya dapat diakses di dalam class yang sama. Ini adalah tingkat pembatasan tertinggi dan merupakan pengaturan default untuk anggota class.

protected memungkinkan akses dari class itu sendiri dan class apa pun yang mewarisinya.

internal membatasi akses ke kode dalam assembly (proyek) yang sama.

Jika tidak ada modifier yang ditentukan, member class secara default bersifat private:

class Example
{
    int secret;  // secara bawaan bersifat private
}

Memilih tingkat akses yang tepat berarti hanya membuka hal yang diperlukan. Mulailah dengan private dan tingkatkan visibilitas hanya jika kamu punya alasan yang jelas. Ini mencegah kode lain bergantung pada detail implementasi yang mungkin ingin kamu ubah nanti.

challenge icon

Tantangan

Mudah

Mari bangun sistem profil pengguna yang aman untuk menunjukkan bagaimana access modifier melindungi data sensitif sekaligus hanya menampilkan informasi yang diperlukan. Kamu akan membuat class dengan tingkat visibilitas berbeda untuk setiap informasi, berdasarkan siapa yang seharusnya dapat mengaksesnya.

Kamu akan membagi kodemu ke dalam tiga file:

  • UserProfile.cs: Buat class UserProfile di namespace Security untuk mengelola informasi pengguna dengan tingkat akses yang sesuai. Profil ini harus memiliki:
    • Property public Username (string), siapa pun dapat melihat nama pengguna
    • Field private password (string), hanya class itu sendiri yang dapat mengaksesnya
    • Field protected email (string), class ini dan turunannya dapat mengaksesnya
    • Field internal userId (int), dapat diakses di dalam assembly yang sama
    Sertakan constructor yang menerima username, password, email, dan userId. Tambahkan method public bernama GetPublicInfo() yang mengembalikan "User: {Username}". Tambahkan method public lain bernama ValidatePassword(string input) yang mengembalikan true jika input cocok dengan password private, dan false jika tidak.
  • AdminProfile.cs: Buat class AdminProfile di namespace Security yang mewarisi UserProfile. Class ini menunjukkan bagaimana member protected dapat diakses di class turunan. Constructor harus menerima empat parameter yang sama dan meneruskannya ke constructor dasar. Tambahkan method public bernama GetAdminInfo() yang mengembalikan "Admin: {Username}, Email: {email}", perhatikan bahwa kamu dapat mengakses field email yang protected di sini!
  • Program.cs: Di file utamamu, buat UserProfile dan AdminProfile menggunakan nilai input. Tunjukkan tingkat aksesnya dengan memanggil method publik yang tersedia dan mengakses field internal secara langsung karena kamu berada di assembly yang sama. Tampilkan informasi yang dapat diungkapkan oleh setiap jenis pengguna.

Kamu akan menerima lima input:

  • Nama pengguna
  • Kata sandi
  • Email
  • ID pengguna (bilangan bulat)
  • Percobaan kata sandi untuk divalidasi

Cetak output dalam format ini:

Regular User:
{GetPublicInfo() result}
Internal ID: {userId}
Password valid: {ValidatePassword result}
Admin User:
{GetAdminInfo() result}

Misalnya, jika inputnya adalah alice, secret123, alice@email.com, 1001, dan secret123, outputnya akan seperti ini:

Regular User:
User: alice
Internal ID: 1001
Password valid: True
Admin User:
Admin: alice, Email: alice@email.com

Perhatikan bahwa kata sandi tetap tersembunyi sepenuhnya. Kamu hanya dapat memvalidasinya, bukan mengambilnya. Email dilindungi, jadi hanya AdminProfile (class turunan) yang dapat menampilkannya. userId internal dapat diakses dari file utamamu karena berada di assembly yang sama. Inilah enkapsulasi!

Coba sendiri

using System;
using Security;

class Program
{
    public static void Main(string[] args)
    {
        // Baca input
        string username = Console.ReadLine();
        string password = Console.ReadLine();
        string email = Console.ReadLine();
        int userId = Convert.ToInt32(Console.ReadLine());
        string passwordAttempt = Console.ReadLine();

        // TODO: Buat object UserProfile dengan nilai input

        // TODO: Buat object AdminProfile dengan nilai input yang sama

        // TODO: Cetak "Regular User:"

        // TODO: Cetak hasil GetPublicInfo()

        // TODO: Cetak "Internal ID: " lalu nilai field userId (dapat diakses karena berada dalam assembly yang sama)

        // TODO: Cetak "Password valid: " lalu hasil ValidatePassword()

        // TODO: Cetak "Admin User:"

        // TODO: Cetak hasil GetAdminInfo()
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C# online