Darsliklar C# Enkapsulatsiya. (Sinf/Class)

C# C# Enkapsulatsiya. (Sinf/Class)

Enkapsulatsiya — OOP ning birinchi ustuni. Uning mohiyati: obyektning ichki ma’lumotini tashqi dunyodan yashirib, unga faqat nazorat qilinadigan yo’llar orqali kirish. Bu ma’lumotni tasodifan yoki noto’g’ri o’zgartirishdan himoya qiladi. Bank hisobini tasavvur qiling: balansni istagan kishi to’g’ridan-to’g’ri o’zgartira olmasligi kerak.

Enkapsulatsiyama’lumot va u ustidagi amallarni bir sinfga jamlab, ichki holatni private bilan yashirish va unga faqat public a’zolar orqali kirishga ruxsat berish tamoyili.

Muammo: himoyasiz maydon

Avval maydon public bo’lganda qanday muammo yuzaga kelishini ko’ramiz:

using System;

class Hisob
{
    public int Balans = 0;
}

Hisob h = new Hisob();
h.Balans = -5000;   // mantiqan noto'g'ri, lekin ruxsat etilgan
Console.WriteLine($"Balans: {h.Balans}");
Balans: -5000

Manfiy balans — xato, ammo public maydon bunga yo’l qo’ydi. Enkapsulatsiya buni hal qiladi.

Yechim: private + xususiyat

Maydonni private qilib yashiramiz va unga xususiyat (property) orqali nazorat qilinadigan kirish beramiz:

using System;

class Hisob
{
    private int balans = 0;

    public int Balans
    {
        get { return balans; }
        set { if (value >= 0) balans = value; }   // manfiyni rad etadi
    }
}

Hisob h = new Hisob();
h.Balans = 1000;
h.Balans = -500;   // rad etiladi
Console.WriteLine($"Balans: {h.Balans}");
Balans: 1000

Endi balans private va yashirin. Balans xususiyati orqali kirish nazorat qilinadi: set bloki manfiy qiymatni rad etdi. value — o’rnatilayotgan qiymatni bildiruvchi maxsus so’z.

Xususiyat (property) — C# usuli

C#’da enkapsulatsiya get/set xususiyatlari orqali amalga oshiriladi. Ularni jadvalda ko’ramiz:

Qism Vazifasi
get qiymatni qaytaradi (o’qish)
set qiymatni tekshirib o’rnatadi (yozish)
value o’rnatilayotgan qiymat

Faqat o’qiladigan xususiyat uchun set ni tashlab ketish yoki private set qilish mumkin.

Nega enkapsulatsiya muhim?

Enkapsulatsiya uch foyda beradi: ma’lumot himoyalanadi, ichki tuzilishni o’zgartirsangiz tashqi kod buzilmaydi, va sinf bilan ishlash soddalashadi. C#’da xususiyatlar bu tamoyilni nafis va tabiiy qiladi.

Xulosa

Bu bo’limda enkapsulatsiya tamoyilini, private maydon va get/set xususiyatlari bilan ma’lumotni himoyalashni va value so’zini ko’rib chiqdik. Enkapsulatsiya — ishonchli obyekt dizaynining poydevori. Keyingi darsda merosxo’rlikka o’tamiz.