Bajardi: Elmurodov Shamshod Jahongir o’g’li


Konstruktorlar va kuzda tutilgan qiymatlar


Download 142.73 Kb.
bet10/17
Sana19.06.2023
Hajmi142.73 Kb.
#1605144
1   ...   6   7   8   9   10   11   12   13   ...   17
Bog'liq
Dasturlash asoslati 2-semestr

Konstruktorlar va kuzda tutilgan qiymatlar
Konstruktorlarda kuzda tutilgan qiymatlardan ham foydalanish mumkindir. Misol uchun qo’yidagi konstruktor employee oklad qiymatini dasturda ko’rsatilmagan bo’lsa 10000.0 teng qilib oladi.:
employee::employee(char *name, long employee_id, float salary = 10000.00)
{ strcpy(employee::name, name);
employee::employee_id = employee_id;
if (salary < 50000.0)
employee::salary = salary;
else // Nedopustimihy oklad
employee::salary = 0.0;
Destruktorlar
Sinfning biror ob'ekti uchun ajratilgan hotira ob'ekt yo’qotilgandan so’ng bo’shatilishi lozimdir. Sinflarning mahsus komponentalari destruktorlar, bu vazifani avtomatik bajarish imkonini yaratadi.
Destruktorni standart shakli qo’yidagicha :
~ sinf_nomi ( ) {destruktor tanasi}
Destruktor parametri yoki qaytariluvchi qiymatga ega bo’lishi mumkin emas. (hatto void tipidagi)
Foydalanilgan adabiyotlar.
CIO Wiki (2019). Modulli dasturlash. Olingan: cio-wiki.org.
IT ta'riflari (2020). Modulli dasturlash. Olingan: defit.org.
New Mexico Tech (2020). Funksiyalar bilan modulli dasturlash. Olingan: ee.nmt.edu.
Kristian Mayoli (2020). Modulli kod yozishning 3 ta ijodiy texnikasi. Tech Beacon. Olingan: techbeacon.com.
Geeks uchun Geeks (2020). Dasturlashda modulli yondashuv. Olingan: geeksforgeeks.org.
O'qish (2020). Modulli dasturlash: Java-da ta'rif va dastur. Olingan: study.com

Inkapsulatsiya
Reja:
1.Inkapsulyatsiya haqida ma’lumot.
2.Klassning xususiyatlarini Inkapsulatsiya qilish.
3.Klasslarni modulga ajratish.


Inkapsulyatsiya ( ing.  encapsulation , lot.dan capsula  ) — informatika fanida uning tuzilishi (maʼlumotlari) va xatti-harakatini (usullarini) belgilovchi abstraksiya elementlarini ajratish jarayoni; inkapsulyatsiya mavhumlikning shartnoma majburiyatlarini (protokol/interfeys) ularni amalga oshirishdan ajratish uchun mo'ljallangan. Amalda, bu sinf ikki qismdan iborat bo'lishi kerakligini anglatadi: interfeys va amalga oshirish. Ko'pgina dasturlash tillarini ( C++ , C# , Java va boshqalar) amalga oshirish komponentning turli qismlariga kirishni farqlash imkonini beruvchi yashirish mexanizmini ta'minlaydi.
Inkapsulyatsiya ko'pincha ob'ektga yo'naltirilgan dasturlash (OOP) uchun eksklyuziv tushuncha sifatida ko'rib chiqiladi , lekin aslida u boshqalarda keng tarqalgan (qarang: yozuv subtiplari va yozuv va variant polimorfizmi ). OOPda inkapsulyatsiya ma'lumotlarni abstraktsiyalash printsipi bilan chambarchas bog'liq ( mavhum ma'lumotlar turlari bilan adashtirmaslik kerak , ularning amalga oshirilishi inkapsulyatsiyani ta'minlaydi, ammo boshqa tabiatga ega). Bu, xususan, turli manbalarda terminologiyada farqlarni keltirib chiqaradi. C++ yoki Java hamjamiyatida yashirmasdan inkapsulyatsiya odatda past deb hisoblanadi . Biroq, ba'zi tillar (masalan,Smalltalk , Python ) inkapsulyatsiyani amalga oshiradi, lekin printsipial jihatdan yashirish imkoniyatini ta'minlamaydi. Boshqalar ( Standart ML , OCaml ) bu tushunchalarni qat'iy ravishda ortogonal sifatida ajratib turadi va ularni semantik jihatdan boshqacha tarzda taqdim etadi
Obyektga Yo'naltirilgan Dasturlashning tamoyillaridan biri bu inkapsulyatsiya, ya'ni obyektning xususiyatlarga to'g'ridan-to'g'ri (nuqta orqali) murojat qilishni va ularning qiymatini o'zgartirishni taqiqlab qo'yish. Pythonda bunday yopiq xususiyatlarning nomi ikki pastki chiziq bilan boshlanadi:
from uuid import uuid4
class Avto:
"""Avtomobil klassi"""
def __init__(self,make,model,rang,yil,narh,km=0):
"""Avtomobilning xususiyatlari"""
self.make = make
self.model = model
self.rang = rang
self.yil = yil
self.narh = narh
self.__km = km
self.__id = uuid4()
def get_km(self):
return self.__km
def get_id(self):
return self.__id
Yuqoridagi kodimizning 11-qatorida __km xususiyati avtomobilning necha km yurgani haqida ma'lumot saqlaydi va bu ma'lumotni tashqaridan o'zgartirib bo'lmaydi. Kodimizning 12-qatorida esa har bir yangi yaratilgan avtomobilga yangi, noyob va takrorlanmas ID generasiya qilish uchun uuid4() funksiyasidan foydalanayapmiz. Deylik biz mashinalar sotish uchun onlayn bozor yaratsak, bozorimizga qo'shilgan har bir moshina endi o'zining ID raqamiga ega bo'ladi va bu ID raqamni to'g'ridan-to'g'ri (nuqta orqali) ko'rib bo'lmaydi.
avto1 = Avto("GM","Malibu","Qora",2020,40000,100000)
avto1.__km
Natija: AttributeError: 'Avto' object has no attribute '__km'
Yopiq xususiyatlarni ko'rish uchun esa alohida metodlar yozish maqsadga muvofiq bo'ladi (get_km() va get_id()):
print(f"ID: {avto1.get_id()}")
Natija: ID: 1d4f39a4-3222-4682-9231-6275ca5e1bff
Bunday yopiq xususiyatlarni o'zgartirish ham metodlar orqali amalga oshirilishi kerak. Misol uchun mashinaning necha km yurganini o'zgartirish uchun klassimizga quyidagi metodni qo'shamiz:
def add_km(self,km):
"""Mashinaning km ga yana km qo'shish"""
if km>=0:
self.__km += km
else: print("Mashina km kamaytirib bo'lmaydi")
avto1.add_km(1500)
print(avto1.get_km())
Natija: 101500
Inkapsulyatsiyaning maqsadi obyektning ma'lum xususiyatlarini tashqi ta'sirdan himoya qilish. Misol uchun yuqoridagi misolimizda mashinaning qancha yurganini faqat musbat tarafga o'zgartirish mumkin, noyob ID raqamini esa umuman o'zgartirib bo'lmaydi.
KLASSNING XUSUSIYATLARINI INKAPSULYATSIYA QILISH
Klassga oid xususiyatlar ham huddi yuoqridagi kabi nomidan avval ikki pastki chiziq qo'shish bilan inkapsulyatsiya qilinadi:
class Avto:
"""Avtomobil klassi"""
__num_avto = 0 # klassga oid xususiyat
def __init__(self,make,model,rang,yil,narh):
"""Avtomobilning xususiyatlari"""
self.make = make
self.model = model
self.rang = rang
self.yil = yil
self.narh = narh
Avto.__num_avto += 1

Download 142.73 Kb.

Do'stlaringiz bilan baham:
1   ...   6   7   8   9   10   11   12   13   ...   17




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling