2-modul · 2-dars: Encapsulation · Package
Daraja: O'rta
Encapsulation · Package. OOP bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi Encapsulation · Package tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya Ma'lumot (field) va methodlarni bitta birlikka (class) o'rash. Field lar `private` qilinib, tashqaridan yashirilgani uchun «data hiding» deyiladi.
Field larni `private` qilib, ularga `public` getter va setter methodlari orqali kirish berib.
## Intervyuga tayyorgarlik ### Encapsulation nima? Nimaga Data hiding deyiladi? Ma'lumot (field) va methodlarni bitta birlikka (class) o'rash. Field lar `private` qilinib, tashqaridan yashirilgani uchun «data hiding» deyiladi.
### Encapsulationga qanday erishamiz? Field larni `private` qilib, ularga `public` getter va setter methodlari orqali kirish berib.
### Encapsulation-ning qanday afzalliklari bor? Nazorat (setter da validatsiya), moslashuvchanlik, xavfsizlik va past bog'liqlik (loose coupling).
### Getter va Setter methodlari qanday vazifani bajaradi? Getter — private field qiymatini o'qib beradi; Setter — uni nazorat (validatsiya) bilan o'zgartiradi.
### Getter va Setter methodlari ishlatilishidagi xatolar? Har bir field ga o'ylamay getter/setter yozish inkapsulyatsiyani buzadi. Mutable obyektni to'g'ridan qaytarish esa ichki holatni oshkor qiladi.
### Package-lar bizga nimaga kerak? Class larni mantiqiy guruhlash, nom to'qnashuvini oldini olish va kirishni boshqarish uchun.
### Package-larni qanday nomlash kerak? Kichik harflarda, domen nomining teskarisi bilan: `uz.company.project`.
### Package a'zolari (members) deb nimaga aytiladi? Package ichidagi class, interface, enum va boshqa turlarga.
### Tashqi package a'zolaridan qanday foydalanish turlari bor? To'liq nom (fully qualified) bilan, `import` orqali (bitta class yoki `*`), yoki `import static` orqali.
## Versiya va aniqlik Java misollari Java 17 bazasiga mo‘ljallangan. JDK/JRE paketlash usuli distributivga bog‘liq; JVM bayt-kodni interpretatsiya va JIT orqali bajarishi mumkin. GC uchun aniq bajarilish vaqtiga kafolat yo‘q; finalization resurs yopish usuli emas. Thread stop/suspend/resume kabi eski metodlar amaliy yechim emas. Koddagi import, klass yoki tashqi kutubxona kontekstini tekshiring.
## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/2-module.md) [Rasmiy qo‘llanma](https://dev.java/learn/classes-objects/) [Sizning avvalgi savol-javob arxivingiz](https://lightyer.uz/java/interview.html)
Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.
Kod misoli
class Account {
private int balance;
void deposit(int amount) {
if (amount <= 0) throw new IllegalArgumentException("Musbat summa kerak");
balance += amount;
}
int balance() { return balance; }
}
Keng tarqalgan xatolar
- Har maydonga o'ylamasdan getter va setter yozish: bu maydonni `public` qilish bilan bir xil.
- Getter da ichki collection ni to'g'ridan-to'g'ri qaytarish - tashqaridan uni o'zgartirib yuborish mumkin.
Mashqlar
- Bank hisobi class ini yozing: balans faqat `depozit`/`yechish` metodlari orqali o'zgarsin.
- Getter ichki ro'yxatni himoyalangan ko'rinishda qaytaradigan qilib o'zgartiring.
Teglar: pdp, modul-02, nazariya