6- ma’ruza. O‘rnatilgan tizimlarga uzilish ish tartibini joriy etish


Dasturda uzilishlar, xatoliklar va istisnolarga sharhlar


Download 386.83 Kb.
bet4/5
Sana18.06.2023
Hajmi386.83 Kb.
#1577839
1   2   3   4   5
Bog'liq
6-maruza uzilishlar

6.4. Dasturda uzilishlar, xatoliklar va istisnolarga sharhlar
Biz o‘zimizga qanday baho bermaylik, mukammal dasturlovchilar bo‘lmaydi. Dasturiy ta’minot murakkab ish bo‘lib hisoblanadi. Shuning uchun eng mukammal dasturlovchilarda ham har xil “muammolar” bo‘lib turadi. Ayrim hollarda bu muammolarning sababi, “yomon yozilgan kod” bo‘lsa, (masalan, massiv chegarasidan oshib ketishiga yo‘l qo‘yish bo‘lsa) boshqa holda foydalanuvchi ma’lumotlarni xato kiritishi (aytaylik, telefon raqamlari uchun joy, “Chucky” ma’nosidagi ma’lumotlar). Muammoga nima sabab bo‘lishidan qat’iy nazar oxir-oqibatda ilovalar ko‘p hollarda ishlamaydi. Istisnolarni qayta ko‘rib chiqishdan oldin, 3 ta keng tarqalgan terminlarni ko‘rib chiqamiz:
Dasturiy xatoliklar. Dasturlovchi yo‘l qo‘ygan xatolarni shunday ataydilar. Masalan, ilova boshqarib bo‘lmaydigan S++ tilida yaratilgan bo‘lsa. Agar dinamik xotira tozalanmagan bo‘lib, xotira yo‘qolishiga asos bo‘lsa, dasturiy xato kelib chiqadi.
Foydalanuvchilar xatolari. Boshqa tomondan, foydalanuvchi xatolari ilova kirituvchilar tomonidan ya’ni ilovalarni tuzgan kishilar tomonidan emas. Masalan, oxirgi foydalanuvchi, kiritishlar va kodlarda korrekt kiritishlarni qayta ishlash ko‘zda tutilmagan bo‘lishi mumkin.
Istisnolar. Istisnolar deb, dasturlash davomida nafaqat qiyin ba’zida dasturlash ilovalarida umuman ko‘zda tutib bo‘lmaydi. Istisnoga misol qilib, quyidagilarni aytish mumkin:
Shu vaqtda avtonom rejimda turgan mashina yoki fayl bilan aloqani o‘rnatish. Har qaysi holatda ham dasturlovchi (yoki oxirgi foydalanuvchi) bunday istisno holatlarda nima qila olishi mumkin?
Yuqoridagilarni inobatga olib, barchasi tushunarli bo‘lishi kerakligi, .NETdan istisnolarni strukturali qayta ishlab chiqish-bu qabul istisno holatlar uchun mo‘ljallangan bo‘lib, ular bajarayotgan vaqtda sodir bo‘ladi.
Dasturlovchining ko‘zi ilg‘amay qolgani kabi dasturlovchining yoki foydalanuvchining xatolari CLR orasida tez-tez mos keluvchi istisnolar hosil qiladilar va paydo bo‘lgan muammolar haqida ma’lumot beradilar. NET baza sinflarining kutubxonasida ko‘plab har xil istisnolar topilgan. Ularga FormatException, IndexOutOfRangeException, FileNotFoundException, ArgumentOutOfRangeException va hokazolar kiradi. NET terminologiyasida “istisno” deganda foydalanuvchi kiritadigan va bajarish vaqtidagi xatolar, hatto biz dasturlovchilar har bir xato turini bir alohida muammo sifatida ko‘rishimiz mumkin. Detallarga botib qolmasdan, avval istisnolarni strukturali qayta ishlash va ko‘rib chiqish kerakki, ular an’anaviy xatolarni aniqlashdan nimasi bilandir farq qilishi kerak.

YeSLATMA! Kod misollarining maksimal oddiyligi uchun hamma istisnolarni ko‘rib chiqmaymiz. Boshqa tomondan, ishlab chiqarish darajasidagi proektlarda mavjud talablarga muvofiq ish ko‘rishga to‘g‘ri keladi.

.NET istisnosining qayta ishlash roli
.NET platformasi paydo bo‘lgunga qadar Windows operatsion sistemalarda xatolarni qayta ishlash o‘zi bilan yetarli darajada aralash texnologiyalarni tashkil etgan. Ko‘plab dasturlovchilar o‘zlarining mantiqiy xatolarni qayta ishlashga aloqador ilovalarni taklif qiladilar. Masalan, navbatdagi S tilidagi fragment kodi bilan ko‘rib chiqamiz:

/* A very C-style error trapping mechanism. */
#define E_FILENOTFOUND 1000
int UseFileSystem()
{
// Assume something happens in this function
// that causes the following return value.
return E_FILENOTFOUND;
}
void main()
{
int retVal = UseFileSystem();
if(retVal == E_FILENOTFOUND)
printf("Cannot find file...");
}

O‘zgarmas E_FILENOTFOUND- bu o‘ziga xos sanoq ma’nosidagi, muammoni qanday yechishni anglatib, bu yondashuv faktlardan yiroqroq yondashuv. Xabarlarda yozilgan, xatolar nomi o‘ziga xos haqqoniyligi va boshqa xatolar paydo bo‘lishi haqidagi axborotlar yagona bo‘lgan yaxshi aniq paketga joylashtirilgan (aynan shu narsa istisnolarni qayta ishlash strukturasida sodir bo‘ladi). Ishlab chiqaruvchilar tomonidan ishlangan WindowsAPI interfeysida yuzlab xatoliklar kodlari aniqlangan. Ular ko‘plab oddiy bool ma’nosida (bool, BOOL, VARIANT_BOOL va boshqalar) va #define va HRESULT ko‘rinishiga mos tushadi. Bundan tashqari SOM klientlariga xatoliklar qaytarish haqidagi ma’lumotlarni ko‘pgina SOM ilova S++ da ishlovchi ishlab chiqaruvchilar quyidagi standart SOM interfeyslarini ishlatadilar (masalan, IsupportErrorInfo. IerrorInfo,ICreateErrorInfo).


Balkim bu barcha eski metodlarning muammosi simmetriya yo‘qligidadir. Ularning har biri ko‘p yoki kam miqdorda qandaydir bir yagona texnologiya qolipiga kirib qolganligidir. Balkim bir til yoki bitta proektdadir. Bu savollarga nuqta qo‘yish uchun .NET sistemasiga xatolarni generatsiyalash va aniqlash uchun standart metodika ta’sis etildi, ya’ni istisnolarni strukturalangan qayta ishlanishi.
Bu metodning afzalligi shundan iboratki, endi ishlab chiqaruvchilar unifitsirlangan xatolarni qayta ishlash metodiga egadirlar, bu metod .NET platformasidagi barcha tillar uchun umumiydir. Bundan ko‘rinib turibdiki, S# da ishlayotgan dasturchi xatoliklarni qayta ishlashi, xuddi VB, C++, CLI da xatolarni qayta ishlayotgan dasturlovchilarning metodiga o‘xshab ketadi.
Qo‘shimcha afzalliklar shu bilan bog‘liqki, istisnolarni ushlash va generatsiyalash sintaksisi mashinalarda eng identik deb hisoblanadi.
Masalan, Windows Communication Foundation (WCF) C# da SOAP chaqiruv kodi va kalit so‘zlar ko‘rinishi metod ichida bir xil ko‘rinishga ega. Yana bir .NET istisnolari afzalliklari shundaki, aralashib ketgan sonli ma’nolardan, oddiy joriy muammolardan farqliroq, ular o‘ziga xos muammolar tasvirini ko‘rsatadi va shuningdek, istisnolarning birinchi detal chaqiruvini namoyish etadi. Bundan tashqari, oxirgi foydalanuvchiga URL adresi va ma’lumotlarni ko‘rsata oladi, xatoliklar haqida batafsil ayta oladi. Bundan tashqari aynan dasturlovchi aniqlagan ma’lumotlarni ham ko‘rsata oladi.
NET sistemasidagi kirish bloki istisnolarni qayta ishlashi
Strukturalangan istisnolar qayta ishlanishining dasturlanishi quyidagi 4 ta o‘zaro bog‘langan qoidalardan tashkil topgan.
Istisno detallar ko‘rinishidagi sinf turi
Har xil hollarda istisnolar sinfini chaqiruv kodida generatsiyalash qurbiga ega a’zo
A’zoga qaratilgan, istisno paydo bo‘lishi mumkin bo‘lgan chaqiruvchi tomonidagi kod bloki
Mabodo paydo bo‘lgan istisnoni qayta ishlovchi (yoki ushlab turuvchi) kod bloki S# dasturlash tilida 4 ta asosiy kalit so‘zini namoyish qiladi (try, catch, throw, finally), ular istisnoni qayta ishlash va generatsiya qilishga yordam beradi. Bularni inobatga olgan holda, siz bilan birga eng avvalo istisnolar bilan bog‘liq bo‘lgan bazaviy sinf rolini ko‘rib chiqamiz.
System.Exception baza sinfi
Barcha istisnolar oxir-oqibatda ArithmeticException_Demo
Download 386.83 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5




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