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.
Enkapsulatsiya — ma’lumot (maydonlar) va u ustidagi amallarni (metodlar) bir sinfga jamlab, ichki holatni
privatebilan yashirish va unga faqatpublicmetodlar orqali kirishga ruxsat berish tamoyili.
Muammo: himoyasiz maydon
Avval maydon public bo’lganda qanday muammo yuzaga kelishini ko’ramiz. Balansni istalgan qiymatga, hatto manfiyga ham o’zgartirib bo’ladi:
class Hisob {
public int balans = 0;
}
public class Main {
public static void main(String[] args) {
Hisob h = new Hisob();
h.balans = -5000; // mantiqan noto'g'ri, lekin ruxsat etilgan
System.out.println("Balans: " + h.balans);
}
}
Balans: -5000
Manfiy balans — xato, ammo public maydon bunga yo’l qo’ydi. Enkapsulatsiya buni hal qiladi.
Yechim: private + getter/setter
Maydonni private qilib yashiramiz va unga faqat tekshiruvli metodlar orqali kirishga ruxsat beramiz. Bu metodlar getter (o’qish) va setter (yozish) deb ataladi:
class Hisob {
private int balans = 0;
public void toldirish(int summa) {
if (summa > 0) {
balans += summa;
}
}
public int getBalans() {
return balans;
}
}
public class Main {
public static void main(String[] args) {
Hisob h = new Hisob();
h.toldirish(1000);
h.toldirish(-500); // rad etiladi
System.out.println("Balans: " + h.getBalans());
}
}
Balans: 1000
Endi balans to’g’ridan-to’g’ri o’zgartirilmaydi. toldirish metodi manfiy summani rad etdi. Ma’lumot endi himoyalangan.
Getter va Setter
private maydonga kirishning standart naqshi. Ularni jadvalda ko’ramiz:
| Metod turi | Vazifasi | Nomlash | Misol |
|---|---|---|---|
| Getter | qiymatni qaytaradi | get bilan |
getBall() |
| Setter | tekshirib o’rnatadi | set bilan |
setBall(int) |
Setter tekshiruvni o’z ichiga oladi:
class Talaba {
private int ball;
public void setBall(int ball) {
if (ball >= 0 && ball <= 100) { // faqat 0-100
this.ball = ball;
}
}
public int getBall() {
return ball;
}
}
public class Main {
public static void main(String[] args) {
Talaba t = new Talaba();
t.setBall(95);
System.out.println("Ball: " + t.getBall());
}
}
Ball: 95
Nega enkapsulatsiya muhim?
Enkapsulatsiya uch foyda beradi: ma’lumot himoyalanadi (noto’g’ri qiymat kirmaydi), ichki tuzilishni o’zgartirsangiz tashqi kod buzilmaydi, va sinf bilan ishlash soddalashadi. Bu — ishonchli, katta tizimlar qurishning asosidir.
Xulosa
Bu bo’limda enkapsulatsiya tamoyilini, private maydon va public getter/setter bilan ma’lumotni himoyalashni va tekshiruvli setterni ko’rib chiqdik. Enkapsulatsiya — ishonchli obyekt dizaynining poydevori. Keyingi darsda merosxo’rlik — sinflarni kengaytirishga o’tamiz.