AXV

OOP asoslari va inkapsulyatsiya

OOP g'oyasi, inkapsulyatsiya, kirish huquqlari, getter/setter

9-sinfAndroid dasturlash6-hafta · 18-dars

Bugun nimalarni o'rganamiz?

OYD va inkapsulyatsiya

Ma'lumotni himoya qilish

Kirish huquqlari

Kim ko'ra oladi

private set va setter

Qoidali yozish

Takrorlash

Kotlinda sinf qaysi kalit so'z bilan e'lon qilinadi?

class.
01

OYD va inkapsulyatsiya

Ma'lumotni himoya qilish

Inkapsulyatsiya

Ma'lumot yashirin(private) Metodlarorqali kirish Qoidalarnitekshirish Xavfsiz holat Ichki ma'lumotni himoya qiling

Himoyasiz sinf: muammo


class Hisob {
    var balans: Double = 0.0
}

fun main() {
    val h = Hisob()
    h.balans = -5000.0     // hech kim to'xtatmaydi!
    println(h.balans)      // -5000.0
}
  
Hamma narsa public bo'lsa, istalgan joydan noto'g'ri qiymat yozish mumkin. Inkapsulyatsiya shu xatolardan himoya qiladi.

Mini-test

Inkapsulyatsiya nima?

Ma'lumotga kirishni cheklash va nazorat qilish.
02

Kirish huquqlari

Kim ko'ra oladi

Huquqlar kengligi

private:sinf ichida protected: +merosxo'rlar internal:modul public:hamma joy Tordan kengga

Kirish modifikatorlari


open class Transport {
    private val kalit = "1234"        // faqat Transport ichida
    protected var tezlik = 0          // + merosxo'r sinflarda
    internal fun modulInfo() = "Modul ichida"
    fun nomi() = "Transport"          // public (standart)
}

fun main() {
    val t = Transport()
    println(t.nomi())                 // ishlaydi
    // println(t.kalit)               // XATO: private
    // println(t.tezlik)              // XATO: protected
}
  
Xato xabarini o'qing: «Cannot access 'kalit': it is private in 'Transport'». Bu kompilyatorning himoyasi: dastur ishga tushmasdan xato topiladi.

Mini-test

Qaysi modifikator faqat shu sinf ichida ko'rinadi?

private — eng cheklangan.
03

private set va setter

Qoidali yozish

BankHisobi

private set qoshish():tekshiradi yechish():tekshiradi balans: faqato'qiladi Ma'lumot faqat metodlar orqali o'zgaradi

BankHisobi


class BankHisobi(val egasi: String) {
    var balans: Double = 0.0
        private set

    fun qoshish(summa: Double) {
        if (summa > 0) balans += summa
    }

    fun yechish(summa: Double): Boolean {
        if (summa <= 0 || summa > balans) return false
        balans -= summa
        return true
    }
}
  
val xossa uchun setter yo'q. var xossada private set yozuvi — tashqaridan o'qish mumkin, yozish mumkin emas.

Mini-test

private set nimani bildiradi?

O'qish ochiq, yozish yopiq.

public va private

public

Hamma joydan ko'rinadi (standart)
VS

private

Faqat shu sinf ichida ko'rinadi

Avval private, kerak bo'lsa ochasiz.

Atamalar. Bosing

OYD

bosing

Obyektga yo'naltirilgan dasturlash

Inkapsulyatsiya

bosing

Ichki ma'lumotni himoya qilish

private

bosing

Faqat sinf ichida ko'rinadi

protected

bosing

Sinf va merosxo'rlarida ko'rinadi

Inkapsulyatsiya qadamlari

1. Yoping

Xossani private qiling.

2. Metod bering

qoshish(), yechish().

3. Tekshiring

Qoidalarni yozing.

Kirish modifikatorlari

ModifikatorQayerda ko'rinadiEslatma
publicHamma joydaStandart
privateFaqat shu sinfdaEng cheklangan
protectedSinf va merosxo'rlardaMeros mavzusida
internalBitta moduldaLoyiha qismi

Pastga bosing: modifikatorlar

Himoyalangan sinf

  1. BankHisobi sinfini yozing: private set bilan balans.
  2. qoshish() va yechish() metodlariga qoidalarni qo'shing.
  3. main() da tashqaridan balansni o'zgartirishga urinib, xatoni ko'ring va izohlang.

Balansni himoyalash


class Hisob {
    var balans = 0.0
}
  

Balansni himoyalash


class Hisob {
    var balans = 0.0
        private set
}
  

OYD raqamlarda

0
OYD tamoyili: inkapsulyatsiya, meros, polimorfizm, abstraksiya
0
kirish modifikatori: public, private, protected, internal
0
qoida: avval eng cheklangan huquq

Ma'lumotni yoping, metodlarni oching.

Amaliy topshiriq 20 daqiqa

OsonModifikatorlarni sanang: Kotlinning 4 ta kirish modifikatorini yozing.
Osonprivate xossa: Sir sinfida kod xossasi faqat sinf ichida ko'rinsin.
O'rtaprivate set: Hisob da balans ni tashqaridan o'qish mumkin, yozish mumkin bo'lmasin.
O'rtaMaxsus setter: baho faqat 0 dan 100 gacha qiymat olsin.
QiyinBankHisobi: qoshish() va yechish() metodlarini qoidalar bilan yozing.
BonusNega private?: Xossalarni nega private qilib, metodlar orqali ochamiz? 2 sabab yozing.

Dars xulosasi

OYD

4 tamoyil, obyektlar bilan fikrlash.

Inkapsulyatsiya

Ichki ma'lumotni himoya qilish.

Kirish huquqlari

private, protected, internal, public.

Uyga vazifa: BankHisobi: inkapsulyatsiya va private set.

Keyingi dars: Meros olish

open class va override

7-hafta · 19-dars