2. Obyektga yo`naltirilgan dasturlash tushunchasi
Yuqoridagi ikkita konsepsiyani amalga oshirish uchun C++ tilida
sinflar
ishlatiladi.
Sinf
termini bilan Obyektlar turi aniqlanadi. Sinfning har bir vakili
(nusxasi)
Obyekt
deb nomlanadi. Har bir Obyekt o’zining alohida holatiga ega
bo’ladi. Obyekt holati uning
berilganlar-a’zolarning
ayni paytdagi qiymati bilan
aniqlanadi. Sinf vazifasi uning
funksiya-a’zolarining
sinf Obyektlari ustida
bajaradigan amallar imkoniyati bilan aniqlanadi.
Berilgan sinf Obyektini yaratish
konstruktor
deb nomlanuvchi maxsus
funksiya-a’zo tomonidan, o’chirish esa destruktor deb nomlanuvchi maxsus
funksiya–a’zo orqali amalga oshiriladi.
Sinf ichki berilganlarini murojaatni cheklab qo’yishi mumkin. Cheklov
berilganlarni ochiq (public), yopiq (private) va himoyalangan (protected) deb
aniqlash bilan tayinlanadi.
Sinf, shu turdagi Obyektning tashqi dunyo bilan o’zaro bog’lanishi uchun
qat’iy muloqot shartlarini aniqlaydi. Yopiq berilganlarga yoki kodga faqat shu
Obyekt ichida murojaat qilish mumkin. Boshqa tomondan, ochiq berilganlarga va
kodlarga, garchi ular Obyekt ichida aniqlangan bo’lsa ham, dasturning ixtiyoriy
joyidan murojaat qilish mumkin va ular Obyektni tashqi olam bilan muloqotni
yaratishga xizmat qiladi. Yaratilgan Obyektlarni, ularni funksiya–a’zolariga
oddiygina murojaat orqali amalga oshiriluvchi
xabarlar
(yoki
so’rovlar
) yordamida
boshqarish mumkin. Keyinchalik Windows xabarlari bilan adashtirmaslik uchun
so’rov termini ishlatiladi.
Vorislik – bu shunday jarayonki, unda bir Obyekt boshqasining xossalarini
o’zlashtirishi mumkin bo’ladi. Vorislik orqali mavjud sinflar asosida hosilaviy
sinflarni qurish mumkin bo’ladi. Hosilaviy sinf (
sinf–avlod
) o’zining ona sinfidan
(
sinf-ajdod
) berilganlar va funksiyalarni vorislik bo’yicha oladi, hamda ular satriga
faqat o’ziga xos bo’lgan qirralarni amalga oshirishga imkon beruvchi berilgan va
funksiyalarni qo’shadi. Ajdod sinfdagi himoyalangan berilgan-a’zolarga va
funksiya-a’zolarga ajdod sinfda murojaat qilish mumkin bo’ladi. Bundan tashqari,
hosilaviy sinfda ona sinf funksiyalari qayta aniqlanishi mumkin. Demak, vorislik
asosida bir-biri bilan “ona-bola” munosabatidagi sinflar shajarasini yaratish
mumkin.
Tayanch sinf
termini sinflar shajarasidagi ona sinf sinonimi sifatida
ishlatiladi. Agar Obyekt o’z atributlarini (berilganlar-a’zolar va funksiyalar–a’zolar)
faqat bitta ona sinfdan vorislik bilan olsa,
yakka (
yoki
oddiy) vorislik
deyiladi. Agar
Obyekt o’z atributlarini bir nechta ona sinflardan olsa,
to’plamli vorislik
deyiladi.
Polimorfizm – bu kodning, bajarilish paytidan yuzaga keladigan holatga
bog’liq ravishda o’zini turlicha amal qilish xususiyatidir. Polimorfizm – bu faqat
Obyektlar xususiyati bo’lmasdan, balki funksiyalar-a’zolar xususiyatidir va ular
xususan, bitta nomdagi funksiya-a’zoni, har xil turdagi argumentlarga ega va
bajaridagan amali unga uzatiladigan argumentlar turiga bog’liq bo’lgan funksiyalar
uchun (o’rnida) foydalanish imkoniyatida namoyon bo’ladi. Bu holatga
funksiyalarni qayta yuklash
deyiladi. Polimorfizm amallarga ham qo’llanishi
mumkin, ya’ni amal mazmuni (natijasi) operand (berilgan) turiga bog’liq bo’ladi.
Polimorfizmning bunday turiga
amallarni qayta yuklash
deyiladi.
Polimorfizmning yana bir ta’rifi quyidagicha: polimorfizm – bu tayanch sinfga
ko’rsatgichlarning (murojaatlarning), ularni virtual funksiyalarni chaqirishdagi turli
shakl (qiymatlarni) qabul qilish imkoniyatidir. C++ tilining bunday imkoniyati
kechiktirilgan bog’lanish
natijasidir. Kechiktirilgan bog’lanishda chaqiriladigan
funksiya-a’zolar adreslari dastur bajarilishi jarayonida dinamik ravishda aniqlanadi.
An’anaviy dasturlash tillarida esa bu adreslar statik bo’lib, ular kompilyasiya paytida
aniqlanadi (
oldindan bog’lanish
). Kechiktirilgan bog’lanish faqat virtual funksiyalar
uchun o’rinli.
Dasturda ishlatiladigan har bir o’zgaruvchi o’z toifasiga ega va u quyidagilarni
aniqlaydi:
1.
Xotiradagi o’lchovini;
2.
Unda saqlanayotgan ma’lumotlarni;
3.
Uning yordamida bajarilishi mumkin bulgan amallarni.
C++ tilida dasturchi o’ziga kerakli ixtiyoriy toifani hosil qilishi mumkin. Bu
yangi toifa ichki toifalarning xossalari va ularning funksional imkoniyatlarini o’zida
ifodalaydi. Yangi toifa sinfni e’lon qilish orqali tuziladi. Sinf bu – bir-biri bilan
funksional bog’angan o’zgaruvchilar va usullar (funksiyalar) to’plamidir.
Masalan: Mushuk nomli sinf tuzmoqchimiz. Bu yerda uning yoshi, og’irligi
kabi o’zgaruvchilar va miyovlash, sichqon tutish kabi funksiyalardan ishdatiladi.
Yoki Mashina sinfi g’ildirak, eshik, o’rindiq, oyna kabi o’zgaruvchilar va xaydash,
to’xtatish kabi funksiyalardan iborat.
Sinfdagi o’zgaruvchilar – sinf a’zolari yoki sinf xossalari deyiladi.
Sinfdagi funksiyalar odatda o’zgaruvchilar ustida biror bir amal bajaradi.
Ularni sinf usullari (metodlari) deb ham ataladi.
Sinfni e’lon qilish uchun class so’zi , { } ichida esa shu sinfning a’zolari va
usullari keltiriladi. Masalan:
class non
{ int ogirlik ;
int baho ;
void yasash ( );
void yopish ( );
void eyish ( );
}
Sinfni e’lon qilishda xotira ajratilmaydi. Sinf e’lon qilinganda kompilyator
faqat shunday (non) sinf borligini, hamda unda qanday qiymatlar (ogirlik, baho)
saqlanishi mumkinligini, ular yordamida qanday amallarni (yasash, yopish, yeyish)
bajarish mumkinligi haqida xabar beradi. Bu sinf Obyekti hammasi bo’lib 4 bayt joy
egallaydi (2 ta int).
Obyekt sinfning biror bir nusxasi hisoblanadi.
C++ tilida toifalarga qiymat o’zlashtirilmaydi, balki o’zgaruvchiga
o’zlashtiriladi. Shuning uchun to’g’ridan-to’g’ri int = 55 deb yozib bo’lmaganidek
non.baho=1200 deb ham bo’lmaydi. O’zlashtirishda xatolikka yo’l qo’ymaslik
uchun oldin non sinfiga tegishli patir Obyektini hosil qilamiz keyin esa unga kerakli
qiymatlarni beramiz.
Masalan:
int a; // butun toifali a o’zgaruvchisi, Obyekti
non patir; //
Endi non sinfining real Obyekti aniqlanganidan so’ng uning a’zolariga
murojaat
patir.baho = 1200;
patir.ogirlik = 500;
patir.yasash ( ) ;
Sinfni e’lon qilishda quyidagilardan foydalaniladi:
public - ochiq
private – yopiq
Sinfning barcha usul va a’zolari boshlang’ich holda avtomatik ravishda yopiq
bo’ladi. Yopiq a’zolarga esa faqat shu sinfning usullari orqaligina murojaat qilish
mumkin. Obyektning ochiq a’zolariga esa dasturdagi barcha funksiyalar murojaat
qilishi mumkin. Lekin sinf a’zolariga murojaat qilish ancha mushkul ish hisoblanadi.
Agar to’g’ridan to’g’ri:
non patir;
patir.baho = 1200;
patir.og`irlik = 500; deb yozsak xato bo’ladi.
A’zolarga murojaat qilishdan oldin uni ochiq deb e’lon
qilish kerak:
Do'stlaringiz bilan baham: |