دروس كمبيوتر وصيانة دروس حاسب دروس مجلة  درس نيوك phpnuke الدروس دروس مسنجر MSN - yahoo - Gmail دروس منتديات vBulletin دروس الجوالات والهواتف دروس السي بنل cpanel دروس اكسس access دروس بيونت شوب برو - point shop pro دروس برمجة php - mysql دروس برامج منوعة software دروس ثري دي ماكس 3D max دروس جافا سكريبت JavaScript دروس دريم ويفر DreamWeaver دروس شبكات Networks دروس سويش - swish دروس فلاش - flash دروس فيجوال بيسك Visual Basic دروس فرونت بيج - frontpage دروس فوتوشوب photoshop دروس هكر hacker crack virus
توبيكات رمضان | رسايل رمضان | ثيمات رمضان | طبخات رمضانية | توبيكات رمضانية | صور عن رمضان | دعاء رمضان
احصائيات سريعة
اقسام على الموقع
دروس في أنظمة التشغيل | ماي سكيول - MySQL | لفيجوال بيسك - Visual Basic | المات لاب Matlab | اللينكس و اليونكس | الاسمبلي - ASSEMBLY | الاوتلوك - Outlook | البرمجة تحت اللنكس -Linux Programming | البرمجة تحت وندوز بواسطة دوال ال win API | البرمجة في بيئة الدوت نت .Net | التصمبم والرسوم | الدلفي - Delphi | الجافا - Java | السي - C | الصوت و الصورة | الوورد - Word | القسم العام للأوفيس | الكوبول - COBOL | control panel-ftp | اوراكل - Oracle | اكسل - Excel | تحميل الملفات | برامج متنوعة | برامج التصفح | برامج الحماية | برامج إنترنت | تعرّف على الويب | بوربوينت - Power Point | images | دروس : كمبيوتر وصيانة | دروس مجلة نيوك phpnuke | دروس مسنجر MSN - yahoo - Gmail | دروس منتديات vBulletin | دروس الجوالات والهواتف | دروس السي بنل cpanel | دروس اكسس access | دروس بيونت شوب برو - point shop pro | دروس برمجة php - mysql | دروس برامج منوعة software | دروس ثري دي ماكس 3D max | دروس تطوير المواقع والمنتديات | دروس جافا سكريبت JavaScript | دروس دريم ويفر DreamWeaver | دروس شبكات Networks | دروس سويش - swish | دروس فلاش - flash | دروس فلاش mx | دروس فى نظام الوندوز WINDOWS | دروس فىالباسكال - Pascal | دروس فيجوال بيسك Visual Basic | دروس فرونت بيج - frontpage | دروس فوتوشوب photoshop | دروس هكر hacker crack virus | سي ++ | سي شارب - #C | فيجوال سي ++ - ++ Visual C | قسم البرمجة العام | دروس فى لغة HTML
البحث في المواد

اكثر المحتويات زيارة
الدوال في الاكسل (6,375 مشاهده)
ربط قاعدة بيانات أكسس (MS Access) مع برنامج الفيجوال بيسك بطريقة(ODBC) (4,138 مشاهده)
الدرس الثالث : بعض تطبيقات الدوال في اكسل (3,091 مشاهده)
تعريف الاستعلام وطريقة عرضه في آكسس، أنواع الاستعلامات، نافذة تحديد الاستعلام! (2,402 مشاهده)
الدرس الثاني: بعض الحيل لتسهيل برنامج اكسل (2,298 مشاهده)
شرح طريقة استعمال الأوتلوك مع بريد الهوتميل (2,192 مشاهده)
تغيير لغة واجهة التطبيق من عربي الى انجليزي وبالعكس لـ Windows-based applications (2,156 مشاهده)
أنواع العلاقات وطريقة الربط بين الجداول. (1,928 مشاهده)
مقدمة عامة حول الاكسل وحيل خاصة بالاكسل (1,755 مشاهده)
أنشئ قاعدة بياناتك التي ستستند إليها في تعلم طريقة ربط الجداول والاستعلامات. (1,725 مشاهده)
الدرس الأول : عمل شريحة في البوربوينت (1,576 مشاهده)
دروس في الأوفيس الأكسس - Access0- (1,527 مشاهده)
كيفية حل مشاكل الانترنت اكسبلور Internet Explorer (1,489 مشاهده)
دورة الأكسس: الدرس السادس : منوعات في أكسيس . (1,468 مشاهده)
اضافه صوت ونص لخلفيه في باور بوينت (1,357 مشاهده)
شرح طريقة التجميع Grouping في برنامج الاكسل (1,322 مشاهده)
التعرف على مكونات الكمبيوتر (1,286 مشاهده)
دورة الأكسس: الدرس السادس : منوعات في أكسيس .0--- (1,275 مشاهده)
برنامج Windows Movie Maker لتكوين أفلام (1,265 مشاهده)
درس تعريب المجلة (1,247 مشاهده)
مقدمة في ربط قواعد البيانات داخل بيئة الـ .NET باستخدام الـ VB.NET (1,218 مشاهده)
كيف تجعل برنامجك أكثر تألقا وجمالا باستخدام أداة Active Skin (1,215 مشاهده)
ما هو المات لاب MATLAB؟ (1,171 مشاهده)
مقدمة عن لغة البيسك (1,129 مشاهده)
الفيجوال بيسك - مقدمة (1,089 مشاهده)
جديد مواد مع عشوائي
التحويل التلقائي للحروف ل- ل- ه إلى اسم الجلالة0---- (791 مشاهده)
النسبة المئوية لا تظهر بالخط العربي & الشدة وألف المد في لفظ الجلالة0---النسبة المئوية لا تظهر بالخط العربي & الشدة وألف المد في لفظ الجلالة0--- (491 مشاهده)
ضبط خيارات اللغة فى الـ Microsoft Word0--- (551 مشاهده)
استخدام لوحة المفاتيح في الـ Word0---- (719 مشاهده)
إضافة كلمة سر إلي ملفات الورد دون استخدام برامج0--- (790 مشاهده)
دمج المراسلات0-- (438 مشاهده)
وضع صورة كخلفية للنص0-- (567 مشاهده)
السماح للمستخدمين بتعديل أجزاء من ملف وورد محمي (Word2003)0--- (385 مشاهده)
كتابة الأرقام الكسرية ورموز المعادلات0-- (636 مشاهده)
درس كامل عن الدمج السهل من لوحة المفاتيح ف0-ي برنامج الـ Word (401 مشاهده)
دورة الأكسس: الدرس السادس : منوعات في أكسيس .0--- (1,275 مشاهده)
دورة الأكسيس : الدرس الرابع : العلاقات0---- (667 مشاهده)
أساسيات في Access0--0 (457 مشاهده)
تصميم تقرير لطباعة البيانات0---- (496 مشاهده)
تصميم نموذج استعراض البيانات‏0--تصميم نموذج استعراض البيانات‏0-- (481 مشاهده)
تصميم نموذج إدخال‎ ‎البيانات0--- (573 مشاهده)
إنشاء قوائم خاصة باستخدام الماكرو(1)0-- (443 مشاهده)
خطوات إنشاء الماكرو في تذييل النموذج (2)0-- (376 مشاهده)
خطوات إنشاء الماكرو في تذييل النموذج (1)0- (330 مشاهده)
استعلامات SQL في Access - تعديل الجداول وإضافة الحقول0- (466 مشاهده)
استعلامات SQL في Access - تحديث البيانات الجدولية0-- (421 مشاهده)
الاستعلامات الإجرائية -4 (استعلام الحذف)0--- (217 مشاهده)
الاستعلامات الإجرائية -2 (استعلام الإلحاق)0--- (301 مشاهده)
تصميم تقرير لطباعة الإجمالي0--- (329 مشاهده)
استعلامات التحديد Select Query مع أمثله (1)0--- (434 مشاهده)
اعلانات في الموقع على جميع الصفحات

السيطرة على الأخطاء -

السيطرة على الأخطاء Exception Handling









موضوع درسنا اليوم هو Exception Handling ولكن قبل أن نشرح ما هو الـException Handling دعونا نتحدث عن أنواع الأخطاء التي قد تواجه المبرمج أثناء البرمجة.. ما رأيكم بالقيام بمثال عملي؟!



قوموا بفتح برنامج وكتابة الأسطر التالية فيه:


int result = 90/ 0;


MessageBox.Show(result.ToString());


 


برنامج بسيط يمثل قسمة عددين.. يبدو أن الأسطر خالية من أي خطأ، دعونا الآن نقوم بترجمة compile البرنامج لنتأكد من ذلك... بعد ترجمته نجد أنه أظهر لنا خطأ هو: "Division by constant zero"


كيف تعرّف الكومبايلر على هذا الخطأ واكتشفه بالرغم من أن البرنامج تراءى لنا في البداية بدون أخطاء؟!


عرف الكمبايلر هذا الخطأ لأنه خطأ ظهر له أثناء عملية الـcompilation وهذه الأنواع من الأخطاء تسمى Compile Time error... لكن ماذا لو جعلنا "المقسوم عليه" عبارة عن متغير يتم إدخاله مثلاً من قبل المستخدم أثناء وقت تنفيذ البرنامج Run Time، هل سيكتشف البرنامج إذا أدخل المستخدم قيمة "صفر" لكي يعطي نفس الخطأ الذي أظهره لنا وقت الـcompilation، أم لا؟ وهل سيعتبره خطأ أم لا؟!


في الواقع هذا النوع من الأخطاء يسمى Run Time error ويمكننا التعامل معه باستخدام Exception Handler وهذا ما سنتعرف عليه خلال الأسطر القليلة القادمة


·   ماهو  الـ Exception  في لغات البرمجة:



كما هو واضح من معنى هذا المصطلح فهو استثناء عن قاعدة معينة .


و هي دلالة على وقوع مشكلة ما أثناء تنفيذ البرنامج مما يتسبب في توقف البرنامج وعدم قدرته على متابعة التنفيذ.



  • ما هو الـ Exception Handling :

هو قدرة المبرمج على حل مثل هذه المشاكل التي تحدث أثناء تنفيذ البرنامج, وحصر هذه الـ Exceptions التي يمكن وقوعها في البرنامج, بحيث يتم تفاديها لكي لا تعيق عمل البرنامج ولا تسبب توقفه عن التنفيذ,  وذلك بواسطة ميكانيزم معين سنتعرف عليه بعد قليل.


أمثلة على بعض الـ Exceptions  الشائعة:



  • القسمة على صفر  "division by zero".

  • نتيجة عملية حسابية ضخمة  "arithmetic overflow".

  • إرسال قيم خاطئة للدوال أو غير مناسبة  "invalid method parameters".

وغيرها الكثير والكثير .


 ولكي يتسع لديك مفهوم الـ Exception  دعنا نأخذ مثالا على ذلك:


     فمثلا:   لو قمنا بكتابة برنامج بسيط لقسمة عددين كالتالي, و كتب المستخدم في خانة المقسوم عليه القيمة صفر: 


 



 


عندما نطلب النتيجة, ستظهر رسالة خطأ كما في الشكل التالي:


 



 


 فالذي حدث الآن هو Exception , لأن عملية القسمة على صفر عملية غير مقبولة!,  وكما هو واضح من رسالة الخطأ  أعلاه فإن نوع الـ Exception  هنا هو   ,DivideByZeroException  وبعد ظهور الرسالة سيتوقف البرنامج عن التنفيذ وطبعا توقف البرنامج بهذا الشكل أمر غير مستحسن.!


 ولن تستطيع إجبار المستخدم على عدم كتابة الصفر في خانة المقسوم عليه!!!! ..


 مثال آخر  على الـException   على نفس البرنامج السابق,  ولنفرض أن المستخدم أدخل في أحد الخانتين نص وليس رقم فلن تتم العملية وستظهر رسالة الخطأ التالية ولن يتابع البرنامج تنفيذ عمله .


 



 


ونوع الــException   الذي حدث الآن هنا هو FormatException   والذي ينتج عادة نتيجة إدخال قيمة غير صالحة.


 و لذلك أولا كل ما على المبرمج التفكير به هو توقع مثل هذه الأخطاء " Exceptions " التي قد تحدث أثناء تنفيذ برنامجه لكي يقوم بعمل handling   لها,  ولكن كيف؟


وهو بواسطة الـ try,  catch, and  finally blocks " " والتي محور درسنا اليوم.


 


try {      }


catch {       }


finally {         }


 و التي يشترط لها الترتيب السابق ....


 














نكتب بداخل هذا الــblock  كل ما نتوقع حدوث الـ Exception   فيه ..أي أمر تتوقع حدوث Exception   فيه فقم بوضعه هنا ...


 


Try block {  }


الأوامر الموجودة في هذا الــ block  يتم تنفيذها فقط في حالة حدوث ال Exception   وهي تقوم بمعالجة الـ Exception  التي تنتج أثناء تنفيذ البرنامج أو بمعنى  إمساكها و السيطرة عليها حتى لا تعيق عمل البرنامج ..


Catch block{  }


الأوامر التي نضعها بداخل هذا block  يتم تنفيذها في جميع الحالات سواء حدث Exception  في البرنامج أو لو لم يحدث ..


Finally block {     }


 


*       بالنسبة للـ catch block فإني أود توضيح نقطة وهي أنه يمكننا كتابتها بأحد طريقتين :


ü       الأولى كالتالي:



catch


{


}


وهنا لا تختص بنوع معين من الــ Exception أي أنها تقوم باقتناص أي Exception  قد يحدث في البرنامج وسنستخدم هذه الطريقة إذا لم نكن نعرف الـ Exception  بالتحديد .


 


ü       الثانية كالتالي:



catch ( )


{


}


حيث أننا نكتب بين القوسين نوع الـ  Exception  الذي قد يحدث بالتحديد .


 


*       يمكنك في البرنامج استخدامها catch block أكثر من مرة واحدة كما سنرى في المثال لاحقا ...



 


*       finally block هي اختيارية و لا يشترط كتابتها دائما ..


 


 و لكي تتضح الأمور لديك أكثر فإننا سوف نطبق ذلك على مثال عملي " برنامج قسمة عددين ", و سنقوم بعمل handling   لنوعين من أنواع الـ Exception   التي قد تحدث في البرنامج والتي تعرضنا لها في بداية الدرس, وهي:


1.  FormatException     و   2. DivideByZeroException  و قد تعرفنا على سبب حدوث كل منهما ...


 باعتبار أنك قمت بتصميم Form مشابه للتالي:


 



 


 عند حدث النقر على الـButton   "Divide  "  الموجود أعلاه, سنكتب الأوامر التالية في حدث  button1_Click:


         private void button1_Click(object sender, System.EventArgs e)


            {


                  try


                  {  


                        int firstNum=Convert.ToInt16(this.textBox1.Text);


                        int secondNum=Convert.ToInt16(this.textBox2.Text);


                        int result=firstNum/secondNum;


                        this.label2.Text=result.ToString();


                  }


 


                  // process invalid number format


                  catch(FormatException)


                  { MessageBox.Show("Invalid input value, input values must be integer","error.."); }


 


                  // division generates DivideByZeroException if the secondNum is zero


                  catch(DivideByZeroException ex2)


                  { MessageBox.Show(ex2.Message.ToString(),"error..");        }


            }


 ومخرجات البرنامج المتوقعة ستكون مشابهة لما يلي:


 



 


و قبل أن أتحدث عن تفاصيل البرنامج, دعونا نلقي نظرة على المخرجات لهذا البرنامج:


1- فأول نافذة تمت فيها عملية القسمة بنجاح.


2- و النافذة التالية توضح نتيجة إدخال المستخدم للقيمة "hello  " في ثاني textBox   فهنا عندما ينقر المستخدم على Divide ,  فلن يستطيع البرنامج من تحويل هذه القيمة المدخلة  إلى النوع integer  بواسطة الدالة Convert.ToInt16, و معروف أن وظيفة هذه الدالة Convert.ToInt16() هو تحويل القيمة الموجودة بين القوسين إلى النوع integer  , فإذا لم تستطع الدالة من التحويل كما في هذه الحالة فستنتج لنا (FormatException) و ستظهر رسالة الخطأ للمستخدم ولن تتم طبعا عملية القسمة.


3-والنافذة التالية توضح نتيجة إدخال المستخدم للقيمة "0" في ثاني textBox  , وبما أن عملية القسمة على صفر عملية غير مقبولة إذن سينتج لنا (DivideByZeroException) وستظهر رسالة الخطأ الموضحة في الشكل.


 


و الآن لنناقش الأوامر المكتوبة في حدث النقر للزر " Divide", خطوة خطوة:


 


في البداية المستخدم يقوم بإدخال القيم في مربعي النص, ثم ينقر على  " Divide ", ليتم تنفيذ أوامر حدث النقر كالتالي:


أولا قمنا بتعريف  try block   وكما قلنا بأنه سيحتوي على الجزء من البرنامج الذي يمكن أن ينتج منه "Exception" وهذا الجزء في برنامجنا هو عملية القسمة لذلك وضعناها داخل الـ try block   .


بداخل هذا الـblock   عرفنا متغيرين firstNum   و   secondNum من النوع  integer والتي تستقبل القيم المدخلة من المستخدم,  و نلاحظ استخدامنا للدالة Convert.ToInt16 لتحويل القيم إلى النوع  ,integer  بعدها سنقوم بعملية القسمة ..


int result=firstNum/secondNum;      


وتخزين الناتج في المتغير result   من النوع integer   أيضا , ثم بعد ذلك إخراج النتيجة على label2 ...


بعد ذلك عرّفنا two catch blocks  واستخدمنا أحدها مع الـ FormatException, والأخرى مع الــ DivideByZeroException ..


فإذا أدخل المستخدم قيمة غير صالحة مثل النص ولم تستطع الدالة Convert.ToInt16 من تحويله إلى integer , عندها ستقوم هذه الدالة بتوليد FormatException, بعدها سيقوم البرنامج بعمل مقارنة بين هذا الـException الناتج,  وبين نوع الـException الموجود بين قوسي الـ catch,  فعندما يرى أنها متساوية سيقوم بتنفيذ الأسطر التي بداخل هذا الـ catch block, كالتالي:


                  catch(FormatException)


                  { MessageBox.Show("Invalid input value, input values must be integer","error.."); }


 


والتي ستقوم بإظهار رسالة الخطأ "Invalid input value, input values must be integer" للمستخدم.


 


وإذا أدخل القيمة صفر في الخانة الثانية, فلن تتم عملية القسمة, و ستنتج الـ DivideByZeroException والتي سنعمل لها handling  بواسطة الـcatch block التالية :


                  catch(DivideByZeroException ex2)


                  { MessageBox.Show(ex2.Message.ToString(),"error..");        }


 


وهنا نلاحظ فرق بسيط عن الـ catch  السابقة لهذه, وهي أننا هنا قمنا بتعريف الكائنex2  من الـclass   DivideByZeroException , بحيث أن رسالة الخطأ هنا لم نكتبها نحن بل استخدمنا الخاصية Message  مع الكائن  ex2  لإظهار الرسالة التي سوف يصدرها النظام عن هذا الخطأ.


 


 طبعا إذا تم تنفيذ الأسطر الموجودة داخل try  دون حدوث أي Exception   فسيتم إخراج النتيجة فورا, وسيتجاهل البرنامج الـ two catch blocks   .


و بذلك يستطيع المبرمج تفادي الأخطاء التي قد تحدث أثناء تنفيذ البرنامج...


 


وبذلك أيضاً يكون المبرمج مسيطر على أي نوع من الأخطاء من الممكن أن تظهر له أثناء برمجته سواء كانت Compile Time error حيث سيكتشفه الكومبايلر، أو كانت Run Time error حيث سيسيطر عليه بالـException handler.... يبقى له فقط تفادي الخطأ المنطقي في البرنامج -أي استخدام منطق غير صحيح في البرمجة- لكي يكتب برامج بلا أخطاء...وحتى الخطأ المنطقي Logical error يمكنك السيطرة عليه في بيئة الدوت نت وذلك باستخدام الـbreak point، تذكر أن أنواع الأخطاء في البرمجة ثلاثة Compile Time error, Run Time error, and Logical error وأنك بقراءة هذا السطر تكون سيطرت عليها جميعها في برنامجك


 


  أخيراً, أتمنى أن أكون وُفّقت في عرض الفكرة

درس السيطرة على الأخطاء -

أضف هذه المادة في موقعك:
مواد مشابهة:
الدرس الثاني عشر : عبارة break وعبارة continue الدرس الثاني عشر : عبارة break وعبارة continue
الدرس الثاني عشر : عبارة break وعبارة continue
(مرات المشاهدة: 96 مرات)
الدوال --2--#Methods in c- الدوال --2--#Methods in c-
الدوال --2--#Methods in c-
(مرات المشاهدة: 44 مرات)
الدرس الخامس عشر : بعض المميزات لل method 2 الدرس الخامس عشر : بعض المميزات لل method 2
الدرس الخامس عشر : بعض المميزات لل method 2
(مرات المشاهدة: 98 مرات)
التعامل مع قواعد البيانات من السي الشارب التعامل مع قواعد البيانات من السي الشارب
التعامل مع قواعد البيانات من السي الشارب
(مرات المشاهدة: 296 مرات)
 Variables- Variables-
Variables-
(مرات المشاهدة: 56 مرات)
Explicit Conversion-- Explicit Conversion--
Explicit Conversion--
(مرات المشاهدة: 26 مرات)
التعامل مع الملفات File Stream التعامل مع الملفات File Stream
التعامل مع الملفات File Stream
(مرات المشاهدة: 207 مرات)
الدرس الثاني : شرح برنامج Print welcome مع بعض المختصرات للطباعة الدرس الثاني : شرح برنامج Print welcome مع بعض المختصرات للطباعة
الدرس الثاني : شرح برنامج Print welcome مع بعض المختصرات للطباعة
(مرات المشاهدة: 119 مرات)
 الدرس الحادي عشر : تركيبة For للتكرار الدرس الحادي عشر : تركيبة For للتكرار
الدرس الحادي عشر : تركيبة For للتكرار
(مرات المشاهدة: 160 مرات)
مفاهيم البرمجة غرضيّة التوجه --OOP Concepts: مفاهيم البرمجة غرضيّة التوجه --OOP Concepts:
مفاهيم البرمجة غرضيّة التوجه OOP Concepts:--
(مرات المشاهدة: 158 مرات)
fot
جميع الحقوق محفوظة :Copyright © All rights reserved