Inkapsulyatsiya, merosiylik, polimorfizm
Oldingi bobda biz Python dasturlash tilida ob`yektga mo`ljallangan dasturlashhaqida so`z yuritgan edik, endi esa bu mavzuni davom ettirgan holda OMDning inkapsulyatsiya, merosiylik va polimorfizm tushunchalari haqida gaplashamiz.
Inkapsulyatsiya
Inkapsulyatsiya – bu ob`yektning tashkil etuvchi komponentlari (metodlari va o`zgaruvchilari)ga murojaatning cheklanishidir. Inkapsulyatsiya ba`zi komponentlarga faqatgina klass ichida murojaat qilish imkonini beradi.
Inkapsulyatsiya Pythonda faqatgina dasturchilar orasidagi qaysi atributlar umumiy va qaysilari ichki ekanligi to`g`risidagi kelishuv sifatida amal qiladi.
Atribut nomining boshlanishidagi bittalik tagchiziq bu o`zgaruvchi yoki metodning klass metodlaridan tashqarida foydalanishga mo`ljallanmaganligini, lekin, atributga shu nom bo`yicha murojaat etish mumkinligini bildiradi.
class A:
def _private(self):
print("Bu yashirin metod!")
>>> a = A()
>>> a._private()
Bu yashirin metod!
>>> class B:
... def __private(self):
... print("Bu yashirin metod!")
...
>>> b = B()
>>> b.__private()
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'B' object has no attribute '__private'
aAtribut nomining boshlanishidagi ikkitalik tagchiziqning mavjudligi bu atributning yanada kuchliroq himoyalanishiga asos bo`ladi: endi atributga bu nom bilan ham murojaat qilib bo`lmaydi.
L
>>> b._B__private()
Bu yashirin metod!
ekin bu ham to`la himoyani ta`minlay olmaydi, chunki, atributga _klass nimo__atribut nomi nomi orqali murojaat qilish mumkin bo`ladi.
Merosiylik
Merosiylikning ma`nosi shundan iboratki, avlod klass ajdod bo`lgan klassning barcha atributlariga ega bo`lib, shu bilan birga ularning ba`zilarini qayta tavsiflanishi yoki avlod klassda qo`shilishi ham mumkin. Masalan biz lug`atga o`xshash o`zimizning shaxsiy klassimizni yaratishimiz mumkin:
>>> class Mydict(dict):
... def get(self, key, default = 0):
... return dict.get(self, key, default)
...
>>> a = dict(a=1, b=2)
>>> b = Mydict(a=1, b=2)
>>> b['c'] = 4
>>> print(b)
{'a': 1, 'c': 4, 'b': 2}
>>> print(a.get('v'))
None
>>> print(b.get('v'))
0
Mydict klassi o`zini xuddi lug`at kabi tutayotganligi, faqat uning farqi – get metodi odatiy hollarda None emas, 0 ni qaytarishiga e`tibor qiling.
Dostları ilə paylaş: |