Guruh talabasi Yo’ldosheva Gulhayo


Download 1.53 Mb.
bet2/2
Sana22.04.2023
Hajmi1.53 Mb.
#1378454
1   2
Bog'liq
gulhayo dasturlash2

O'sma sinfi: Sinfga o'zgartirishlar kiritishingiz kerak bo'lgan masalani ko'rib chiqaylik, ammo o'sha katta sinfning ob'ektlarini oqilona vaqt ichida sinov arqonida yaratishning iloji yo'q. Bu usulni o'stirish va u uchun testlarni o'sha sinfda yozishning iloji yo'qligini anglatadi. Ehtimol, sizda katta yaratilish bog'liqliklari to'plami, sinfingizni namuna qilishni qiyinlashtiradigan narsalar yoki ko'plab yashirin bog'liqliklar mavjud.
Ulardan qutulish uchun sinfni test jabduqida tuzish uchun etarlicha yaxshi ajratish uchun ko'plab invaziv refactoringlarni amalga oshirish kerak. Bunday hollarda siz o'zgarishlaringizni ushlab turish va manba sinfidan foydalanish uchun boshqa sinf yaratishingiz mumkin. Bundan tashqari, agar qo'shilgan kod to'plangan mas'uliyat bo'lsa, uni har doim yangi sinfga topshirish yaxshiroqdir. Yaxshi tomoni shundaki, biz yangi qo'shilgan kodni sinab ko'rishimiz mumkin, chunki u alohida sinfda istiqomat qiladi.
Bu ikki usul etarlimi?
Mahsulot MVP bosqichida yoki juda erta bosqichda bo'lganda, mahsulot g'oyasi ustida juda kam dasturchilar ishlaydi. Muddatlar ham juda qattiqligicha qolmoqda. Bu bosqichda maqsadlar boshqacha. Maqsad bozorga tezda kirish, erta fikr-mulohazalarni olish, ehtiyojni tushunish va uni bozorga moslashtirish uchun tezda yaxshilashdir.
Bundan tashqari, yangi yoki birdan ortiq ishlab chiquvchilar ishlayotganda Katta sinflar deb ataladi. Bu odatda o'sish bosqichida sodir bo'ladi, chunki kompaniyalar o'sha paytda ko'proq odamni yollashni boshlaydilar. Ushbu rivojlanish bosqichida asosiy e'tibor mavjud funktsiyalarni buzmasdan tezkor rivojlanishni saqlab qolishga o'tadi. Biz mijozning salbiy tajribaga ega bo'lmasligini ta'minlash uchun ushbu bosqichda sifat standartini juda yuqori belgilashimiz kerak.
Odamlar TDD va TDDsiz MVPlarni bajarish haqida bahslashishni yaxshi ko'radilar, ammo biz hozirgacha hukmni to'xtatamiz. Katta sinflar bilan ishlashimiz kerak boʻlsa, uni bartaraf etishning tizimli usullarini oʻrganamiz. Ishoning, ko'pincha biz kodimizda katta sinflar bilan yakunlaymiz.
Qanday qilib katta sinfni buzish kerak?
Keling, katta sinfni buzish uchun qanday vositalar mavjudligini muhokama qilaylik. Eng muhimi, men juda foydali deb topadigan "Xususiyatli eskizlar" usuli (Yana Maykl C. Feathersning kitobidan kelib chiqqan). Bu sinfda turli vazifalarni topish uchun ajoyib vosita. Misol keltiraylik.

Birinchi qadam har bir usul va a'zo o'zgaruvchisi uchun aylanalar chizish va keyin har bir usuldan u murojaat qiladigan yoki o'zgartirgan namuna o'zgaruvchilari va usullariga chiziqlar chizishdir. Olingan misol uchun bizda quyidagi xususiyatli eskiz bo'ladi.

Ko'rib turganingizdek, bir nechta to'plamlar shakllanmoqda. Hech bo'lmaganda ikkita to'plamni oling. Bu ikki toʻplam turli vazifalarni topishimizga yordam beradi. Ammo xususiyatlar eskizlari bizga vazifalarni topishda yordam berishdan tashqari, sinflar ichidagi bog'liqlik strukturasini ko'rish imkonini beradi va bu ko'pincha nima va qanday qilib chiqarish/refactor qilish to'g'risida qaror qabul qilayotganimizda mas'uliyat kabi muhim bo'lishi mumkin.
The Dilemma
Bularning barchasi yaxshi, lekin kattaroq savol shundaki, sinfni kichkina bitlarga ajratishimiz kerakmi? Agar vaqtingiz bo'lsa (ayniqsa sprintning boshida), u holda buni qiling. Ko'pincha bunday emas. Bundan tashqari, har qanday katta refactoring mashg'ulotidan so'ng, dasturchilar refactoringni juda ehtiyotkorlik bilan bajarsa ham mahsulotning holati bir necha kun davomida buziladi.
Mas'uliyatni aniqlab, refactor qilish uchun vaqtingiz kam bo'lganidan yoki katta refactoring xavfini qo'lga kiritishni istamaganingizdan so'ng, hech bo'lmaganda hozirgacha oldinga yo'l nima?
Agar biz ushbu aniqlangan vazifalarni refactoringsiz sinab ko'rishimiz mumkin bo'lsa va shu bilan birga siz kerakli o'zgarishlarni amalga oshirsangiz yaxshi bo'lardi. Shunday qilib, siz kodingizni sinab ko'rishingiz va keyinchalik refactor qilishga qaror qilganingizda vaziyatni osonlashtirdingiz, bu muqarrar.
Do'stona ishlab chiqaruvchi naqshdan foydalangan holda vazifalarni sinovdan o'tkazish
Maqsad katta sinfda juda kam oʻzgarishlar qilish, ammo hali ham aniqlangan vazifalarni sinab koʻra olishdir. Katta sinflarni sinab ko'rishda keng tarqalgan masala shundaki, ular bir nechta yaratilishga bog'liqligi sababli sinov jabduqlarini yaratish / urug'lantirish qiyin. Katta bo'lgani uchun, u ko'plab bog'liqliklarga ega bo'lishi kerak. Quyidagi kodni ko'rib chiqaylik.
Bu erda ProgressReport sinfi.

Quyida sinf sinfi keltirilgan.

Agar siz "GetAverageMarksInEnglish" usulini sinab ko'rmoqchi bo'lsangiz, to'liq "ProgressReport" ob'ekti kerak emas. Unda faqat inglizcha belgilar kerak. SHuningdek, "GetStudentNameWithHighestMarkInEnglish" metodi uchun bizga ingliz tili raqami va abituriyent nomi kerak. Siz Grade hisoblamoqchi bo'lsangiz, to'liq "ProgressReport" ob'ektini talab qilasiz. Shunday qilib, bu ma'lum bir funktsiyani sinab ko'rish uchun butun ob'ektni to'ldirishga hojat bo'lmasligi mumkinligini anglatadi.
Shuningdek, "Sinf" sinfida ham kundalik dars mashg'ulotlari, ham barcha o'quvchilarning "Taraqqiyot to'g'risida"gi hisoboti o'tkaziladi. "GetAverageMarksInEnglish" ni sinab ko'rish uchun bizga kundalik sinfning odatiy ob'ekti kerak emas. Bu null yoki bo'sh ob'ekt bo'lishi mumkin. Shunday qilib, biz qandaydir tarzda sinfning shaxsiy usuli va o'zgaruvchilariga kirish imkoniyatiga ega bo'lamiz deb o'ylayman. Bunday holda, biz aniqlangan vakolatlarning sinov talabiga binoan ob'ektni qisman to'ldirishimiz / to'ldirishimiz mumkin.
"Muhtoj do'st haqiqatan ham do'stdir"
C++ da, do'st kontseptsiyasi haqiqatan ham bu erda sizning haqiqiy do'stingiz. Sinf ichkilariga to'liq kirishni ta'minlaydi. Siz ham quruvchi naqsh haqida eshitgan bo'lishingiz kerak; murakkab ob'ektlarni (katta sinf) bosqichma-bosqich qurish uchun yaratilish dizayni namunasidir. Naqsh sizga bir xil qurilish kodidan foydalanishingiz mumkin bo'lgan ob'ektning turli xil turlari va namoyishlarini ishlab chiqarishga yordam beradi. Bu erda turli vakilliklar katta sinfning qisman aholi yashaydigan obʼektining turli yoki maqsadli masʼuliyatni sinab koʻrish zarurligini anglatadi.
Bir soʻz bilan aytganda, mana sizga kerak boʻlgan narsa.

  • Har bir sinfda bo'sh konstruktor bo'lishi kerak (agar yo'q bo'lsa, unda jamlash / bog'liqlik in'ektsiyasi namunasi uchun minimal parametrlarga ega konstruktor)

  • Sinf ichkilariga kirish uchun quruvchi sinfni uning do'sti sifatida belgilang.


Siz turli xil vazifalarni sinab ko'rish uchun turli xil vakillik (ya'ni Create_R1,Create_R2 va boshqalar) yaratishingiz mumkin, ya'ni GetAverageMarksInEnglish va GetStudentNameWithHighestMarkInEnglish. Siz allaqachon kirish sifatida ba'zi belgilar berilgan o'rtacha belgilarni hisoblaydigan sinfga ega bo'lishingiz mumkinligini bilib olgan bo'lishingiz kerak. Bu shuni anglatadiki, oʻrtacha hisoblash boshqa sinfga oʻtishi mumkin. Kodni qayta tuzmaguningizcha, siz quruvchi sinfdagi har bir mas'uliyat uchun bir nechta yaratish usullariga ega bo'lishingiz va ularni sinab ko'rishingiz mumkin.
Siz bahslashishingiz mumkin, ProgressReport sinfi juda oddiy. Agar katta sinf boshqa ba'zi sinflar bilan jamlash aloqasiga ega bo'lsa-chi? Agregat a'zo ob'ekti referent sinfiga tegishli bo'lmaganligi sababli referatlardan (C++da) foydalanadi, shuningdek, ularning umrlari kompozitsiyadan farqli o'laroq bog'liq emas. Bo'sh konstruktor yarata olmaysiz. Shuningdek, ProgressReport mustaqil ravishda mavjud boʻlishi mumkinligi sababli "Klaster" ham boʻsh parametr konstruktorini yarata olmaydi. Bunday holda, biz minimal sonli parametrlarga ega bo'lgan konstruktorni yaratishimiz kerak, ya'ni hech bo'lmaganda "ProgressReport" bilan. Agar siz ushbu ko'rsatilgan a'zo ob'ekt sinflari uchun ham shunga o'xshash namunani amalga oshirsangiz (ya'ni biz qilgan ProgressReport uchun), ularni sinov arqoniga olib kirish unchalik qiyin emas.

Sinov kodi:

Yuqoridagi yondashuv kompozitsiya va jamlash uchun ishlashi kerak. Shunga qaramay, agar katta sinf merosdan foydalansa va sizga ba'zi bazaviy sinfning shaxsiy o'zgaruvchisiga kirish kerak bo'lsa, ularni shaxsiydan himoyalangangacha aniqlashingiz kerak bo'lishi mumkin. Do'stlar sinfi bazaviy sinfning xususiy a'zosiga kira olmaydi.
Haqiqiy cheklov - bu sizning sinfingiz uchinchi tomon kutubxonasi ob'ektiga bog'liq bo'lganda, siz borib o'sha sinfni o'zgartira olmaysiz. Bu erda siz o'zingizning builder sinfingizda soxta sinov ob'ektini kiritish / sozlash uchun bog'liqlikni chiqarib olishingiz va interfeysga o'tishingiz kerak.
Download 1.53 Mb.

Do'stlaringiz bilan baham:
1   2




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