Butun, haqiqiy


Download 1.28 Mb.
bet17/22
Sana15.06.2023
Hajmi1.28 Mb.
#1479408
1   ...   14   15   16   17   18   19   20   21   22
Bog'liq
C tilida o‘zgarmaslar

(* ) (
);

Bunda <tur>- funksiya qaytaruvchi qiymat turi* - ko‘rsatkich o‘zgaruvchining nomi;
- funksiya parametrlarining yoki ularning turlarining ro‘yxati.
Masalan:
int (*fun)(float,float);

30. Obyektga yo’naltirilgan dasturlash tamoyillari.


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.

31. Sinflar va Obyektlar.


Sinf – bu dasturchi tomonidan yaratilgan sun’iy tur hisoblanadi. Sinf orqali obyektlar hosil qilinadi. Obyektlar orqali esa sinf maydonlariga murajat qilinadi. Struktura – bu maydonlariga cheklovlar aniqlanmagan, bir nechta standart turlar bilan ishlash imkoni yaratuvchi dasturchi tomonidan yaratilgan sun’iy tur hisoblanadi.
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, programmaning ixtiyoriy joyidan murojaat qilish mumkin va ular obyektni tashqi olam bilan muloqatni yaratishga xizmat qiladi. Yaratilgan obyektlarni, ularni funksiya – a’zolariga oddiygina murojaat orqali amalga oshiriluvchi xabarlar (yoki so‘rovlar) yordamida boshqarish mumkin.
Ma’lumotlarni abstraksiyalash – berilganlarni yangi turini yaratish imkoniyati bo‘lib, bu turlar bilan xuddi ma’lumotlarning tayanch turlari bilan ishlagandek ishlash mumkin. Odatda yangi turlarni ma’lumotlarning abstrakt turi deyiladi, garchi ularni soddaroq qilib «foydalanuvchi tomonidan aniqlangan tur» deb atash ham mumkin. DASTURLASH 1 Inkapsulyasiya 5 Inkapsulyasiya – bu berilganlar va ularni qayta ishlovchi kodni birlashtirish mehanizmi. Inkapsulyasiya berilganlar va kodni tashqi ta’sirdan saqlash imkonini beradi. Yuqoridagi ikkita konsepsiyani amalga oshirish uchun C++ tilida sinflar ishlatiladi. Sinf termini bilan obyektlar turi aniqlanadi. Sinfning har bir vakili (nushasi) 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 funksiyaa’zolarining sinf obyektlari ustida bajaradigan amallar imkoniyati bilan aniqlanadi.
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:

Download 1.28 Mb.

Do'stlaringiz bilan baham:
1   ...   14   15   16   17   18   19   20   21   22




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