OOP g'oyasi, inkapsulyatsiya, kirish huquqlari, getter/setter
9-sinfAndroid dasturlash6-hafta · 18-darsMa'lumotni himoya qilish
Kim ko'ra oladi
Qoidali yozish
Kotlinda sinf qaysi kalit so'z bilan e'lon qilinadi?
class.Ma'lumotni himoya qilish
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
}
public bo'lsa, istalgan joydan noto'g'ri qiymat yozish mumkin. Inkapsulyatsiya shu xatolardan himoya qiladi.Inkapsulyatsiya nima?
Kim ko'ra oladi
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
}
Qaysi modifikator faqat shu sinf ichida ko'rinadi?
private — eng cheklangan.Qoidali yozish
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.private set nimani bildiradi?
Avval private, kerak bo'lsa ochasiz.
Obyektga yo'naltirilgan dasturlash
Ichki ma'lumotni himoya qilish
Faqat sinf ichida ko'rinadi
Sinf va merosxo'rlarida ko'rinadi
Xossani private qiling.
qoshish(), yechish().
Qoidalarni yozing.
| Modifikator | Qayerda ko'rinadi | Eslatma |
|---|---|---|
public | Hamma joyda | Standart |
private | Faqat shu sinfda | Eng cheklangan |
protected | Sinf va merosxo'rlarda | Meros mavzusida |
internal | Bitta modulda | Loyiha qismi |
Pastga bosing: modifikatorlar
BankHisobi sinfini yozing: private set bilan balans.qoshish() va yechish() metodlariga qoidalarni qo'shing.main() da tashqaridan balansni o'zgartirishga urinib, xatoni ko'ring va izohlang.
class Hisob {
var balans = 0.0
}
class Hisob {
var balans = 0.0
private set
}
Ma'lumotni yoping, metodlarni oching.
Sir sinfida kod xossasi faqat sinf ichida ko'rinsin.Hisob da balans ni tashqaridan o'qish mumkin, yozish mumkin bo'lmasin.baho faqat 0 dan 100 gacha qiymat olsin.qoshish() va yechish() metodlarini qoidalar bilan yozing.private qilib, metodlar orqali ochamiz? 2 sabab yozing.4 tamoyil, obyektlar bilan fikrlash.
Ichki ma'lumotni himoya qilish.
private, protected, internal, public.
Uyga vazifa: BankHisobi: inkapsulyatsiya va private set.
open class va override
7-hafta · 19-dars