Menu
CoddyTech

Properti untuk Enkapsulasi

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

property adalah alat utama untuk menerapkan enkapsulasi di C#. Alih-alih mengekspos field secara langsung, kamu membungkusnya dengan property yang mengatur cara data diakses dan diubah.

Pola ini menggabungkan field privat dengan property publik yang menyertakan validasi atau logika dalam accessor-nya:

public class Temperature
{
    private double celsius;
    
    public double Celsius
    {
        get { return celsius; }
        set
        {
            if (value < -273.15)
                celsius = -273.15;  // Batas minimum nol mutlak
            else
                celsius = value;
        }
    }
}

Sekarang, kode eksternal tidak bisa menetapkan suhu yang mustahil. Property bertindak sebagai penjaga, memastikan object-mu selalu berada dalam keadaan yang valid. Inilah enkapsulasi dalam praktik: data internal terlindungi, tetapi tetap dapat diakses melalui antarmuka yang terkontrol.

Kamu juga dapat menggunakan property untuk menghitung nilai atau memicu efek samping:

public double Fahrenheit
{
    get { return celsius * 9 / 5 + 32; }
    set { celsius = (value - 32) * 5 / 9; }
}

Dunia luar melihat dua property, tetapi secara internal hanya ada satu field. Property memungkinkan kamu mengubah detail implementasi tanpa merusak kode yang menggunakan class-mu, ini adalah salah satu manfaat utama enkapsulasi yang baik.

challenge icon

Tantangan

Mudah

Mari kita bangun sistem inventaris produk yang menggunakan property untuk melindungi integritas data. Kamu akan membuat class yang harganya tidak pernah bisa negatif dan jumlahnya selalu berada dalam batas yang valid. Ini menunjukkan cara property bertindak sebagai penjaga data.

Kamu akan mengatur kodemu dalam dua file:

  • Product.cs: Buat class Product dalam namespace Inventory yang mengelola informasi produk dengan validasi melalui property. Produkmu memerlukan:
    • Field privat price (decimal) dengan property publik Price yang memastikan harga tidak pernah kurang dari 0. Jika seseorang mencoba menetapkan harga negatif, nilai yang disimpan harus menjadi 0
    • Field privat quantity (int) dengan property publik Quantity yang menjaga nilai tetap antara 0 dan 1000. Nilai di bawah 0 menjadi 0, nilai di atas 1000 menjadi 1000
    • Property publik Name (string) yang diimplementasikan secara otomatis
    • Property hanya-baca terhitung TotalValue yang mengembalikan Price * Quantity
    Sertakan constructor yang menerima nama, harga, dan jumlah (dalam urutan tersebut), lalu menetapkan semua nilai melalui property agar validasi diterapkan.
  • Program.cs: Di file utama, buat Product menggunakan nilai input. Lalu coba ubah harga dan jumlah dengan nilai input tambahan yang mungkin tidak valid. Cetak keadaan produk setelah dibuat dan setelah setiap perubahan untuk melihat cara property melindungi data.

Kamu akan menerima lima input:

  • Nama produk
  • Harga awal (decimal)
  • Jumlah awal (integer)
  • Harga baru yang akan ditetapkan (decimal, mungkin negatif)
  • Jumlah baru yang akan ditetapkan (integer, mungkin di luar rentang)

Cetak output dengan format berikut:

After creation:
{Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
After modifications:
{Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}

Misalnya, jika inputnya adalah Laptop, 999.99, 50, -100, dan 1500, outputnya akan seperti berikut:

After creation:
Laptop: Price=999.99, Qty=50, Total=49999.50
After modifications:
Laptop: Price=0, Qty=1000, Total=0

Perhatikan bahwa harga negatif berubah menjadi 0 dan jumlah 1500 dibatasi menjadi 1000. Property-mu melindungi object dari keadaan yang tidak valid. Inilah enkapsulasi yang bekerja!

Coba sendiri

using System;
using Inventory;

class Program
{
    public static void Main(string[] args)
    {
        // Baca input
        string name = Console.ReadLine();
        decimal initialPrice = Convert.ToDecimal(Console.ReadLine());
        int initialQuantity = Convert.ToInt32(Console.ReadLine());
        decimal newPrice = Convert.ToDecimal(Console.ReadLine());
        int newQuantity = Convert.ToInt32(Console.ReadLine());

        // TODO: Buat Product menggunakan nilai awal
        
        // TODO: Cetak keadaan produk setelah dibuat
        Console.WriteLine("After creation:");
        // Format cetak: {Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
        
        // TODO: Ubah harga dan jumlah menggunakan nilai baru
        
        // TODO: Cetak keadaan produk setelah diubah
        Console.WriteLine("After modifications:");
        // Format cetak: {Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
    }
}
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