Ma’ruza: Obyektga mo'ljallangan tahlil va loyihalash Reja

Ma’ruza: Obyektga mo'ljallangan tahlil va loyihalash
Reja:
loyihalash
Ob’ektlar.
Klasslar.
Ob’ktli dasturlash.
Inkapsulyattsiyalash.
Klasslar, komponentalar va ob’ktlar.
Vorislik.
Klasslarni ishlab chikish.
Obyektga mo'ljallangan tahlil va loyihalash (object-oriented analysis and design) ning bosh g'oyasi predmetga oid sohani va masalaning mantiqiy yechimini obyektlar (tushunchalar va mohiyatlar) nuqtayi nazaridan ko'rib chiqishdan iborat. Obyektga mo'ljallangan tahlil jarayonida asosiy diqqat-e'tibor obyektlar (yoki tushunchalar)ning predmetga oid soha atamalarida ta'riflash va tavsiflashga qaratiladi. Obyektga mo'ljallangan tahlil jarayonida obyektga mo'ljallangan dasturlash tili vositalari bilan joriy qilinadigan mantiqiy dasturiy obyektlar aniqlanadi. Bu dasturiy obyektlar atributlar va metodlarni o'z ichiga oladi. Va, nihoyat, konstruksiyalash (construction) yoki obyektga mo'ljallangan dasturlash (object-oriented programming) jarayonida ishlab chiqilgan komponentlar va sinflarning joriy qilinishi ta'minlanadi.
Obyektga mo'ljallangan tahlil va loyihalashning ayrim asosiy tamoyillarini qisqacha ko'rib chiqamiz. Keyinchalik biz barcha ko'rib chiqilgan atamalarning yanada aniqroq ta'rifini va yanada to'liqroq shifr yechimini beramiz.
—Avval talablar tahlili (requirements analysis) amalga oshiriladi hamda bu paytda modellashtirilayotgan tizimda sodir bo'layotgan asosiy jarayonlar va ularning pretsedentlar ko'rinishidagi ta'rifi ajratiladi. Pretsedent (precedent) — predmetga oid sohada sodir bo'layotgan jarayonlarning matniy tavsifi.
Ikkinchi qadam. Predmetga oidsohaning obyektga mo'ljallangan tahlili (object-oriented domain analysis). Bu qadamning vazifasi jarayon ishtirokchilarining faoliyat turlarini aniqlash hamda predmetga oid soha elementlarining turli kategoriyalarini aks ettiruvchi konseptual model (conceptual model) ni tuzishdan iborat.
Uchinchi qadam. Bunda kim nima bilan shug'ullanayotganini ko'rib chiqamiz. Aynan shu faoliyat obyektga mo'ljallangan loyihalash (object-oriented design) deb ataladi va bunda asosiy diqqat-e'tibor majburiyatlarni taqsimlashga qaratiladi. Majburiyatlarni taqsimlash (responsibility assignment) da ilovadagi turli dasturiy obyektlarning vazifa va majburiyatlari ajratib ko'rsatiladi.
Obyektga mo'ljallangan tahlil va loyihalashning muhim momenti shundan iboratki, bunda dasturiy tizim komponentlari o'rtasida majburiyatlar taqsimotini malakali o'tkazish ko'zda tutiladi. Gap shundaki, obyektga mo'ljallangan tahlil va loyihalashsiz ish ko'rib bo'lmaydi. Buning ustiga u robastlik, masshtablashish, kengayishlik va takroran qo'llash imkoniyatiga hal qiluvchi ta'sir ko'rsatadi. Obyektlarning majburiyatlari va o'zaro aloqalari sinflar diagrammasi (design class diagram) va o'zaro aloqalar diagrammasi (collaboration diagram) qo'llangan holda ifodalanadi.
Ob’ektlar
Ob’kt - mavxum (abstrakt) moxiyat bo’lib, u bizni o’rab turgan xaqiqiy olamning tavsiflariga ega. Ob’ktlarni yaratish va ular ustida manipulyatsiya lar olib borish - C++tilining qandaydir aloxida imtiyozi emas, balki ob’ktlarning tavsifi va ular ustida o’tkaziladigan operattsiyalarni kodli konstruktsiyalarda o’zida mujassamlantiradigan dasturlash metodologiyasi (uslubiyoti) ning natijasidir. Dasturning xar bir ob’kti, xar qanday xaqiqiy ob’kt kabi, o’z atributlari va o’ziga xos xulq-atvori bilan ajralib turadi. Ob’ktlarni turli kategoriyalarga ko’ra tasniflash mumkin: masalan, mening «Cassio» raqamli qo’l soatim soatlar klassiga mansub. Soatlarning dasturiy realizattsiyasi (ishlatilishi), standart xolat sifatida, sizning komp’yuteringizning operattsiya tizimi tarkibiga kiradi.
2 . Klasslar
Xar bir klass klasslar tabaqalanishida (iyerarxiyasida) ma’lum o’rinni egallaydi. Masalan, barcha soatlar vaqtni o’lchash asboblari klassiga (tabaqalanishda ancha yuqori turgan) mansub, soatlar klassining o’zi esa xuddi shu mavzudagi ko’plab xosila variattsiyalarini o’z ichiga oladi. SHunday qilib, xar qanday klass ob’ktlarning biron-bir kategoriyasini aniqlaydi, xar qanday ob’kt esa biron-bir klass ekzemplyari (nusxasi)dir.
3.Ob’ktli dasturlash
Ob’ktga mo’ljallangan dasturlash (OMD) - bu dasturchining asosiy diqqatini ob’ktlarni ishlatish tafsilotlariga emas, balki ob’ktlar o’rtasidagi aloqalarga qaratadigan metodika. Bu ma’ruzada OMD ning asosiy tamoyillari (inkapsulyatsiyalash, vorislik, polimorfizm, klasslar va ob’ktlarning yaaratilishi) C++Builder tilining vizual ishlov berish integrattsiyalangan muxitida qabul qilingan yangi tushuncha va atamalar bilan izoxlanadi va to’ldiriladi. SHuningdek, yangi imkoniyatlar (komponentalar, xususiyatlar, voqea-xodisaning qayta ishlagichi) evaziga tilni kengaytirish tavsiflari xamda ANSI C++ standartining oxirgi ko’shimchalari (shablonlar, nomlar fazosi, to’g‘ridan-to’g‘ri va noaniq e’lonlar, dasturni bajarishda turlar identiftikattsiyasi, istisnolar) ning tavsiflari keltiriladi.
Inkapsulyattsiyalash
Inkapsulyattsiyalash - ma’lumotlarning va shu ma’lumotlar ustida ish olib boradigan kodlarning bitta ob’ktda birlashtirilishidir. OMD atamachiligida ma’lumotlar ob’kt ma’lumotlari a’zolari deb, kodlar ob’ktli metodlar yoki funktsiya-a’zolar deb ataladi.
Inkapsulyatsiyalash ob’ktni tashqi muxitdan maksimal darajada ajratish imkonini beradi. Bu ishlab chiqilayotgan dasturlarning ishonchliligini sezilarli darajada oshiradi, chunki ob’ktda mujassamlangan (lokallashtirilgan) funktsiyalar dastur bilan nisbatan kam xajmdagi ma’lumotlarni almashinadi, buning ustiga ushbu ma’lumotlarning miqdori va turi odatda sinchkovlik bilan nazorat qilinadi. Natijada ob’ktda inkapsulalangan funktsiyalar va ma’lumotlarning almashtirib qo’yilishi yoki o’zgartirilishi umuman olganda dastur uchun yaxshi kuzatib bo’lmaydigan oqibatlarni olib kelmaydi.
Inkapsulyatsiyalashning yana bir muxim natijalaridan biri shundaki, bunda ob’ktlar almashinuvi, ularning bir dasturdan ikkinchisiga o’tkazilishi osonlashadi. OMD da inkapsulyattsiya tamoyilining soddaligi va qulayligi dasturchilarni C++Builder tarkibiga kiruvchi Vizual Komponentlar kutubxonasini kengaytirishga olib keladi.
Klasslar, komponentalar va ob’ktlar
Klass jismoniy moxiyatga ega emas, tuzilmaning e’lon qilinishi uning eng yaqin analogiyasidir. Klass ob’ktni yaratish uchun qo’llangandagina, xotira ajralib chiqadi. Bu jarayon xam klass nusxasini yaratish deb ataladi.
C++tilining xar qanday ob’kti bir xil atributlarga, shuningdek ushbu klassning boshqa ob’ktlari bilan funkttsionallikka ega. O’z klasslarini yaaratish xamda ushbu klasslar ob’ktlarining xulq-atvori uchun to’liq mas’uliyat dasturchi zimmasiga yuklanadi. Biron-bir muxitda ishlar ekan, dasturchi standart klasslarning kattagina kutubxonasi (masalan, C++Builder Vizual Komponentlar Kutubxonasi) ga kirish xuquqiga ega bo’ladi.
Odatda, ob’kt qandaydir unikal xolatda mavjud bo’lib, bu xolat ob’kt atributlarining joriy qiymatlari bilan belgilanadi. Ob’kt klassining funktsionalligi ushbu klass ekzempliyari (nusxasi) ustida o’tkaziladigan operattsiyalar bilan belgilanadi.
C++tilida klassni aniqlash uchun, ma’lumotlar a’zolari ustida ish olib boradigan xamda ob’ktlarning xulq-atvorini belgilaydigan ma’lumotlar a’zolari va metodlarini inkapsulyattsiya talab qilinadi. YUqoridagi misolimizga qaytib, shuni ta’kidlab o’tamizki, «Casio» soatining suyuuq kristalli displeyi ushbu ob’ktning ma’lumotlar a’zosi bo’ladi, boshqarish tugmachaliri esa ob’ktli metodlar bo’ladi. Soat tugmachalarini bosib, displeyda vaqtni o’rnatish ishlarini olib borish mumkin, ya’ni OMD atamalarini qo’llaydigan bo’lsak, metodlar, ma’lumotlar a’zolarini o’zgartirib, ob’kt xolatini modifikattsiya qiladi.
C++Builder komponentlar tushunchasini xam kiritadi. Komponentlar - maxsus klasslar bo’lib, ularning xususiyatlari ob’ktlar atributlarini tashkil qiladi, ularning metodlari esa komponentli klasslarning tegishli nusxalari ustidagi operattsiyalarni amalga oshiradi. Metod tushunchasi odatda komponentli klasslar tarkibida qo’llanadi va tashqi tomondan oddiy klassning funktsiya-a’zo atamasidan farq qilmaydi. C++Builder tili komponentlarning turi va funktsional xulq-atvorini nafaqat metodlar yordamida, balki komponentlar klasslarigagina xos bo’lgan xususiyatlar vositasida xam manipuliyattsiya qilish imkonini beradi. C++Builder muxitida ishlar ekansiz, siz ilovani loyixalash bosqichida xam, uni bajarish bosqichida xam komponentli ob’kt ustida ishlash (manipuliyattsiya qilish) mumkin ekanini tushunib yetishingiz ayon.
Komponentlar xususiyatlari bu ma’ulmotlar a’zolarining kengayishidir. Garchi ular ma’lumotlarni o’z xollaricha saqlamasalarda, biroq ob’kt ma’lumotlari a’zolariga kirish xuquqini ta’minlaydilar. Xususiyatlarni e’lon qilishda C++Builder kalit-so’zdan foydalanadi. Voqealar yordamida komponenta o’ziga qandaydir avvaldan belgilangan ta’sir ko’rsatilganini foydalanuvchiga ma’lum qiladi. C++Builder muxitida ishlab chiqilayotgan dasturlardagi metodlar asosan ma’lum voqealarning yuzaga kelishida dastur reaktsiyasini ularga nisabatan ishga soladigan voqealarning qayta ishlagichlarida qo’llanadi. Windows operatsion tizimidagi voqealar va ma’lumotlardagi qandaydir o’xshashlikni payqab olish qiyin emas. Bu yerdagi oddiy tipik voqealar klaviaturadagi tugmacha yoki klavishalarni bosishdan iborat. Komponentalar o’z xususiyatlari, metodlari va voqealarini inkapsuyattsiyalaybiladi.
Bir qarashda, komponentalar C++tilining boshqa ob’ktli klasslaridan, bir qator xususiyatlarni xisobga olmaganda, xech bir farq qilmaydi. Bu xususiyatlar orasida xozircha quyidagilarni ko’rsatib o’tamiz:
Komponentalarning ko’pchiligi interfeysning foydalanuvchi bilan boshqarish elementi bo’lib, ularning ayrimlari juda murakkab xulq-atvorga ega.
Barcha komponentalar bitta umumiy ajdod-klass (TComponent) ning bevosita yoki bilvosita avlodlaridirlar.
Komponentalar odatda bevosita qo’llanadi, ya’ni ularning xususiyatlari ustida ish olib boriladi (manipulyattsiyalar o’tkaziladi); ularning o’zlari yangi tarmoq klasslar (klasschalar) qurish uchun bazaviy klasslar sifatida xizmat qila olmaydi.
Komponentalar faqat new operatori yordamida uyumning dinamik xotirasida joylashtiriladi, oddiy klasslar ob’ktlarida bo’lganidek, stekda emas.
Kopmonentalar xususiyatlari dinamik turlar identifikattsiyasini o’z ichiga oladi.
Komponentalarni komponentalar palitrasiga qo’shish va shundan so’ng C++Builder vizual ishlanmasining integrallashgan muxitiga tegishli shakllar muxarriri vositasida ular ustida ishlash mumkin.
OMD ob’ktlarning o’zaro aloqasini talablarni biron-bir ob’ktga yoki ob’ktlararo yuborish sifatida talqin etadi. Talabni olgan ob’kt bunga tegishli usulni chaqirish bilan javob beradi. OMD ning SmallTalk kabi boshqa tillaridan farqli o’laroq, C++tili «talab» tushunchasidan foydalanishni qo’llab-quvvatlamaydi. Talab - ob’kt ustida qilinayotgan ish, metod esa - kelib tushgan talabga ob’ktning javobi.
YAqinroq olib qaralsa, metod - klass ta’rifiga kiritilgan oddiy funktsiya-a’zo. Metodni chaqirib olish uchun, ushbu klass kontekstida yoki biron-bir voqeaning qayta ishlagichida funktsiya nomini ko’rsatish kerak.
Aynan metodning klass bilan yashirin aloqasi uni oddiy funktsiya tushunchasidan ajratib turadi. Metodni bajarish paytida, u o’z klassining barcha ma’lumotlariga kirish xuquqiga ega bo’ladi, garchi ushbu klass nomining ochiq-oydin spetsifikattsiyasini talab qilmasa xam. Bu ish beistisno xar bir metodga yashirin parametrga, ya’ni klass nusxasi (ekzempliyari) ga o’zgaruvchan ko’rsatkichni berish orqali ta’minlanadi. Xar gal metod klass ma’lumotlari a’zolariga murojaat qilganda, kompiliyator ko’rsatkichidan foydalanadigan maxsus kodni generatsiya qiladi.
6.Vorislik
Vorislik g‘oyasi ob’ktlar xulq-atvorini modifikattsiyalash muammosini xal qiladi xamda OMD ga favqulotda kuch va moslashuvchanlik baxsh etadi. Vorislik, deyarli xech qanday cheklanishlarsiz, siz yoki boshqa biron kimsa tomonidan yaratilgan klasslarni izchil qurish va kengaytirish imkonini beradi. Eng oddiy klasslardan boshlab, murakkablik jixatidan asta-sekin ortib boradigan, ammo sozlanishi xam oson, ichki tuzilishi xam oddiy bo’lgan xosila klasslarni yaratish mumkin.
Ayniqsa yirik dasturiy loyixalarni ishlab chiqishda vorislik tamoyilini xayotga izchil tatbiq etish pasayib boruvchi tuzilmaviy dasturlash (umumiydan juz’iyga) texnikasi bilan yaxshi moslashadi xamda ko’p o’rinda bunday yondoshuvni rag‘batlantiradi. Bunda dastur kodining murakkabligi ancha kamayadi. Xosila klass (avlod) o’z bazaviy klassining (otasining) xamda klasslar tabaqalanishidagi o’zining barcha ajdodlarining xamma xususiyatlari, metodlari va voqealarini voris qilib oladi.
Vorislik paytida bazaviy klass yangi atributlar va operattsiyalar xisobiga yanada o’sadi. Xosila klassda odatda yangi ma’lumotlar a’zolari, xususiyatlar va metodlar paydo bo’ladi. Ob’ktlar bilan ishlashda dasturchi odatda konkret masalani xal qilish uchun eng to’g‘ri keladigan klassni tanlaydi xamda undan bitta yoki bir nechta voris avlod yaratadiki ular o’z otaslarida mavjud imkoniyatlardan ko’proq imkoniyatga ega bo’ladilar. Do’stona funktsiyalar xosila klassga barcha tashqi klasslar ma’lumotlari a’zolariga kirish xuquqini olish imkonini beradilar.
Bundan tashqari, voris qilib olinayotgan metodlardan, ularning bazaviy klassdagi ishi avlodga to’g‘ri kelmasa, xosila klass ortiqcha yuklanishi mumkin. OMD da ortiqcha yuklanishdan foydalanish xar qanaqasiga rag‘batlantiriladi, garchi bu so’zning to’g‘ri ma’nosidan kelib chiqqanda, odatda ortiqcha yuklanishlar tavsiya qilinmaydi. Agar metod bittadan ortiq bir nomdagi funktsiya bilan assottsiyatsiyalansa, u ortiqcha yuklangan deb aytiladi. E’tibor bering, klasslar tabaqalanishida ortiqcha yuklatilgan metodlarni chaqirib olib mexanizmi qayta aniqlangan funktsiyalarni chaqirib olishdan mutlaqo farq qiladi. Ortiqcha yuklanish va qayta aniqlanish - bu turli tushunchalar. Virtual metodlar bazaviy klass funktsiyalarini qayta aniqlash uchun qo’llanadi.
Vorislik kontsepttsiyaasini soat xaqidagi misolga tatbiq qilish uchun faraz qilaylikki, vorislik tamoyiliga amal qilgan «Casio» firmasi soatning yangi modelini chiqarishga qaror qildi. Aytaylik, bu model, tugmachalardan biri ikki marta bosilsa, vaqtni ovozda ayta oladi. Gapiradigan soatlar modeli (OMD atamalari bo’yicha, yangi klass) ni yangidan yaratish o’rniga muxandislar ishni uning prototipidan boshlaydilar (OMD atamalari bo’yicha, bazaviy klassningyangi avlodini yaratadilar). Xosila ob’kt otasining barcha atributlari va funkttsionalligini voris qilib oladi. Sintezlangan ovozda aytilgan sonlar avlodning yangi ma’lumotlar a’zolari bo’lib qoladi, tugmachalarning ob’ktli metodlari esa, ularning qo’shimcha funktsionalligini ishga tushirish uchun, ortiqcha yuklatilgan bo’lishi kerak. Tugmachalarning ikki marta bosilish xodisasiga yangi usul javob berib, u joriy vaqtga mos keladigan sonlar ketma-ketligi (yangi ma’lumotlar a’zolari) ning talaffuz qilinishida namoyon bo’ladi. YUqorida aytilganlarning xammasi gapiradigan soatlarning dasturiy amalga oshirilishiga to’liq taalluqli.
7. Klasslarni ishlab chiqish
Klasslar ma’lum maqsadlarga erishish uchun ishlab chiqiladi. Odatda dasturchi mavxum g‘oyadan boshlaydi va u asta-sekin, loyixani ishlab chiqish jarayonida turli detallar bilan to’ldirib boriladi. Ba’zida bir-biriga goyat o’xshash bo’lgan bir necha klassni ishlab chiqish bilan ish tugallanadi. Klasslarda kodlarni bu kabi takrorlash (dubllashtirish) dan qochish uchun, bu klasslarni ikki qismga bo’lish kerak, ya’ni umumiy qismni ota klassida aniqlab, farqlanadiganlarini xosila klassda qoldirish kerak.
Klassdan foydalanishdan oldin u e’lon qilinishi kerak. Odatda, amaliyotchi dasturchi tayyor bazaviy klasslardan foydalanadi, bundan tashqari u barcha spetsifikattsiyalarni va ichki ishlash yo’llarini bilishi mutlaqo shart emas. Biroq, C++bazaviy klassidan foydalanishingiz uchun, qanday ma’lumotlar a’zolari va metodlarga kira olishingiz mumkinligini (S++Builder komponentasi qo’llansa, taqdim etilayotgan xususiyatlar va voqealarni xam) albatta bilishingiz lozim.
Nazorat uchun savollar
Ob’ektlar kanday aniklanadi?
Klasslar kanday vazifani bajaradi?
Ob’ktli dasturlash deganda nimani tushinasiz?
Inkapsulyattsiyalashda kanaka ish bajariladi?
Klasslar, komponentlar va ob’ktlar orasida kanday boglanishlar bor?
Vorislik vazifasini tushintiring?
Klasslarni ishlab chikish kanday amalga oshiriladi?
|