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.
Tantangan
MudahMari 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 classProductdalam namespaceInventoryyang mengelola informasi produk dengan validasi melalui property. Produkmu memerlukan:- Field privat
price(decimal) dengan property publikPriceyang memastikan harga tidak pernah kurang dari0. Jika seseorang mencoba menetapkan harga negatif, nilai yang disimpan harus menjadi0 - Field privat
quantity(int) dengan property publikQuantityyang menjaga nilai tetap antara0dan1000. Nilai di bawah 0 menjadi 0, nilai di atas 1000 menjadi 1000 - Property publik
Name(string) yang diimplementasikan secara otomatis - Property hanya-baca terhitung
TotalValueyang mengembalikanPrice * Quantity
- Field privat
Program.cs: Di file utama, buatProductmenggunakan 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=0Perhatikan 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}
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalNamespace & DirektifPengantar class & objectKata Kunci 'this'Method dan ParameterField vs PropertyKonstruktorInisialisasi objectRingkasan: Kalkulator Sederhana4Pewarisan
Sintaks Dasar Pewarisan (:)Kata Kunci 'base'Kata Kunci Virtual & OverrideClass SealedBase Class 'object'Rangkuman: Hierarki Karyawan7Fitur Lanjutan
Overloading OperatorIndexer (this[])Penimpaan ToString()Extension methodRingkasan: Custom list2Property & Anggota Statis
Property yang Diimplementasikan OtomatisProperty Hanya Baca dan Hanya TulisField dan method StatisClass StatisAnggota Berbentuk Ekspresi5Polimorfisme & Antarmuka
Polimorfisme saat kompilasi vs runtimeAntarmuka vs kelas abstrakBeberapa antarmukaAntarmuka eksplisitUpcasting & DowncastingRingkasan, Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi daripada PewarisanGenerics (class dan method)Delegate dan EventAtribut dan ReflectionIDisposable dan Pernyataan usingDasar-Dasar Dependency Injection11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola Composite3Arsitektur class
Data Instance vs StaticKata Kunci 'readonly' & 'const'Field PendukungRingkasan: Pengelola Rekening Bank6Enkapsulasi
Pengubah AksesProperti untuk EnkapsulasiImplementasi Penyembunyian DataPola ImutabilitasUlasan: Data SiswaLatihan sendiri: Compiler C# online