OOPning to'rtta asosiy tamoyilidan biri — inkapsulyatsiya (encapsulation). Bu so'z "kapsulaga solish" degan ma'noni anglatadi: ma'lumotlarni tashqaridan yashirish va ularga faqat nazorat ostida kirish imkonini berish.
Tasavvur qiling: televizor. Siz pulti orqali kanalni o'zgartirasiz, ovozni sozlaysiz — bu ochiq interfeys. Ammo televizorning ichidagi sxemalar, elektr o'tkazgichlar, mikrosxemalarga to'g'ridan-to'g'ri qo'l tekmaysiz. Ularni ko'rishingiz ham shart emas — faqat pult orqali boshqarasiz.
OOPda ham xuddi shunday: klassning ichki ma'lumotlari tashqaridan yashiriladi, ularga faqat maxsus metodlar orqali kirish mumkin.
# Inkapsulyatsiyasiz — MUAMMO
class BankHisobi:
def __init__(self, balans):
self.balans = balans # hamma o'zgartira oladi!
hisob = BankHisobi(1000)
hisob.balans = -99999 # bu noto'g'ri, lekin to'sib bo'lmaydi!
print(hisob.balans) # -99999 — bank hisobi manfiy bo'lishi mumkin emasBu kodda balans atributi to'liq ochiq. Istalgan kod uni ixtiyoriy qiymatga o'zgartira oladi — hatto -99999 ga ham. Bu jiddiy xato manbayi.
# Inkapsulyatsiya BILAN — to'g'ri yondashuv
class BankHisobi:
def __init__(self, balans):
self.__balans = balans # yashirilgan!
def balans_korsatish(self):
return self.__balans # faqat ko'rish
def pul_qoshish(self, miqdor):
if miqdor > 0: # nazorat!
self.__balans += miqdor
hisob = BankHisobi(1000)
hisob.pul_qoshish(500)
print(hisob.balans_korsatish()) # 1500 — to'g'ri!
# hisob.__balans = -99999 # asl balansga ta'sir qilmaydi!Endi __balans yashirilgan. Faqat pul_qoshish() metodi orqali balansni o'zgartirish mumkin — va u har doim tekshiruv o'tkazadi.
Inkapsulyatsiya ikki narsani ta'minlaydi:
Muhim qoidalar:
Inkapsulyatsiya tushunchalarini tekshirish
Quyidagi savollarga javob bering va inkapsulyatsiyaning asosiy maqsadini mustahkamlang: