|
Sharof rashidov nomidagi samarqand davlat universiteti intellektual tizimlar va kompyuter texnologiyalari fakulteti dasturiy injinering yo
|
bet | 4/10 | Sana | 05.06.2024 | Hajmi | 86,91 Kb. | | #260484 |
Bog'liq Kurs 11.2. OYD qo’llash sohalari
Obyektga yo'naltirilgan dasturlash (OYD) - bu dasturlashga yangi bir yondashuvdir. Hisoblash texnikasining rivojlanishi va yechilayotgan masalalarni tobora murakkablashuvi dasturlashning turli modellarini (paradigmalarini) yuzaga kelishiga sabab bo'lmoqda. Birinchi kompilyatorlarda (masalan, FORTRAN tili) dasturlashning funksiyalardan foydalanishga asoslangan prosedura modelini qo'llab quvvatlagan. Bu model yordamida dastur tuzuvchi bir nechta ming satrli dasturlarni yozishi mumkin edi. Rivojlanishning keyingi bosqichida dasturlarning strukturali modeli paydo bo'ldi va ALGOL, Pascal va C tillari kompilyatorlarida o'z aksini topdi. Strukturali dasturlashning mohiyati - dasturni o'zaro bog'langan proseduralar (bloklar) va ular qayta ishlaydigan berilganlarning majmuasi deb qarashdan iborat. Ushbu model dastur bloklari keng qo'llashga, GOTO operatoridan imkon qadar kam foydalanishga tayangan va unda dastur tuzuvchi o'n ming satrdan ortiq dasturlarni yarata olgan. Yaratilgan dasturni prosedurali modelga nisbatan sozlash va nazorat qilish oson kechgan.
Murakkab masalalarni yechish uchun dasturlashning yangi uslubiga zarurat paydo bo'ldiki, u OYD modelida amalga oshirildi. OYD modeli bir nechta tayanch konsepsiyalarga asoslanadi. Berilganlarni abstraksiyalash - berilganlarni yangi turini yaratish imkoniyati bo'lib, bu turlar bilan xuddi berilganlarning tayanch turlari bilan ishlagandek ishlash mumkin. Odatda yangi turlarni berilganlarning abstrakt turi deyiladi, garchi ularni soddaroq qilib "foydalanuvchi tomonidan aniqlanigan tur" deb atash mumkin.
Inkapsulyasiya - bu berilganlar va ulami qayta ishlovchi kodni birlashtirish mexanizmidir. Inkapsulyasiya berilganlar va kodni tashqi ta'sirdan saqlash imkonini beradi.
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 funksiyaa'zo orqali amalga oshiriladi.
Sinfichki 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 ixtiyoriyjoyidan 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 boshqusining xossalarini o'zlashtirishi mumkin bo'ladi. Vorislik orqali mavjud sinflar asosida hosilaviy sinflami 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 sinftermini sinflar shajarasidagi ona sinfsinonimi sifatida ishlatiladi. Agar Obyekt o'z atributlarini (berilganlar-a'zolar va funksiyalar a'zolar) faqat bitta ona sinfdan vorislik bilan olsa, vakka (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 dcyiladi.
Polimortizmning yana bir ta'rifi quyidagicha: polimorfizm - bu tayanch sinfga ko'rsatgichlaring (murojaatlamaning), ulamni virtual funksiyalami 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 quyidagilami aniqlaydi:
1. Xotindagi o'lchovimi;
2. Unda saqlannyotgan ma'lumotlarni;
3. Uning yordamida bajarilishi mumkin bulgan amallami.
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 yashi, 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'zganavchilar - sinfa'zolari yoki sinf xossalari deyiladi. Sinfdagi funksiyalar odatda o'zgaruvchilar ustida biror bir amal bajaradi. Ulami sinfusullari (metodlari) deb ham ataladi.
Sinfni e'lon qilish uchun class so'zi , qavs ichida esa shu sinfning a'zolari va usallari 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 amallami (yasash, yopish, yeyish) bajarish mumkinligi haqida xabar beradi. Bu sinfObyekti hammasi bo'lib 4 bayt joy egallaydi (2 ta int). Obyekt sinfning biror bir nusxasi hisoblanadi.
C++ tilida toifalarga qiymat o'zlashtirilmaydi, balki o'zgaravchiga 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 bosil qilamiz keyin esa unga kerakli qiymatlami 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 vaa'zolari boshlang'ich bolda 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:
#include < lostream.h >
class non
(public :
int baho;
int ogirlik;
void yasash ( ); };
int main ()theme
non patir;
patir. baho = 1200; patir.ogirlik = 500;
cout <<"men olgan patir"<
Obyektlar trassirovkasi
Foydalanuvchi ma'lumotlarni kiritmaguncha menyu kutib turadi. Agarda foydalanuvchi to'g'ri qiymatni kiritmasa, menyu yangilanadi, foydalanuvchi ma'lumotlarni boshqatdan kiritishi mumkin.
1 Qadam. O'z obyektlaringizning majburiyatini belgilovchi ro'yxat tuzing.
Faqat sizning topshirig'ingizni yechish uchun zarur bo'lgan funksiyalani amalga oshiring. Real narsalar, masalan kassa aparati yoki bank hisob-raqami funksiyasini amalga oshirish uchun o'n ikkilik funksiyasidan foydalaniladi. Biroq, sizning vazifaningiz real dunyoning modelini yaratishdan iborat emas. Sizning topshirig'ingizni yechish uchun zarur bo'ladigan vazifalarni aniqlashtinb olishingiz lozim.
Display the menu.(Menyu kiritish) Get user input. (Foydalanuvchidan kirish ma'lumotlarini olish)
Tavsif muammosi qismiga kimaydigan yashirin majburiyatlarga qarang, Obyekt qanday yaratiladi? Qanday oddiy faoliyatlar ro'y berishi kerak, har bir savdoni boshlanishida kassa aparatini tozalashga o'xshash? Menyuni tuzishni menyu yaratish misolida ko'rib chiqing. Programmist menyuming bo'sh obyektini yaratadi va undan so'ng "Yangi akkaunt ochish". "Yordam" opsiyasini qo''shadi. Bu yerda yashirin majburiyat bor:
Menu main_menu;
main_menu.add_eption("Open mew account"): Add more options
int input = main_menu.get_input(); Endi biz o'ziga xos metodlar ro'yxatiga egamiz - void add_option(string option) int get input() const;
Menyu chiqarish masalasichi? Menyuni foydalamuvehidan ma'lumot kirtishni so'ramasdan ko'rsatishning ma'nosi yo'q. Agar foydalanuvchi xato ma'lumot kiritsa get_inpur menyuni bir martadan ortiq kiritadi. Shunday qilib display xususiy metod uchun yaxshi kandidatdir. Ijtimoiy interfeysni yakunlash uchun siz konstruktorlarni aniqlashingiz kerak. Ozingizdan so'rang obyekt yaratish uchun sizga nima kerak. Bazan siz 2 ta konstruktorga extiyoj sezasiz: biri hamma elementlar uchun default ikkinchisi esa foydalanuvchi tomonidan kiritilgan qiymatlarni o'matadi. Menyu misolida biz bo'sh menyu yaratuvchi yagonu konstruktor bilan kifoyalanamiz.
Nusxalash konstruktori
Vektorlar obyektida paralel vektorlarni yaranting. Ba'zida, bir xil uzunlikdagi vektorlarni ishlatyotganingizni anglaysiz, har bir saqlaydigan qismi obyekt hisoblanadi. Bu vaziyatda, dasturingizni qayta yaratish va elementlari obyekt sanaladigan yagona vektordan foydalanish yaxshi fikrdir.
Masalan, faraz qilaylik hisob raqami bir qator tavsif va narxlardan iboratdir. Yagona yechim ikkita vektomni saqlab turishdir:
vecter descriptions:
vector prices;
Vektorlarning har biri bir xil uzunlik va bo'lakka ega bo'lib, consisting ofdescrip-tionsfi) tavsifi va and fif narxlaridan iborat, birga ishlanadigan ma'lumotlar ham kiradi. Bu vektorlar paralel vektrlar deb aytiladi.
Parallel vektorlar katta dasturlarda muummoni keltirib chiqaradi. Dasturchi ishonch bosil qilishi kerak, vektorlar doim o'sha uzunlikka ega, qaysiki bir-biriga tegishli kesimlar qiymatlar bilan to'ldirilgan bo'ladi. Bundan tashqari kesimda ishlaydigan ixtiyoriy funksiya barcha vektorlarni argument sifatida qabul qilishi kerak, ya'ni dastur uchun zerikarli bo'lganlarini. Buning yo'li oson. Kesimga qarang va vakil bo'layotgan tushunchani toping, so'ng bu tushunchani class ni ichiga kiriting. Bu kesimda har bir sinfning tavsifi va marx bandidan iborat; buni sinfga kiriting.
class Item public:
private:
string deseription:
double price;
Fayldagi manba"
• •
Komponentlik funksiyalari tavsifi
Komponentsiz funksiyalar tavsifi.
CashRegister sinfi uchun, siz bir jut faylni yaratasiz: cashregister.h va cashregister.cpp
unda interfeys va qo'llanilish mavjud.
|
|
Bosh sahifa
Aloqalar
Bosh sahifa
Sharof rashidov nomidagi samarqand davlat universiteti intellektual tizimlar va kompyuter texnologiyalari fakulteti dasturiy injinering yo
|