العودة   منتدى رياض الجنة - Riad Al-Ganah > الرياض التقنية > روضة الكورسات والدورات التقنية والعلمية > روضة دورات تقنية الـ .NET بلغاتها المختلفة > دورة .NET 2008 من منتدى فيجوال بيسك للعرب

دورة .NET 2008 من منتدى فيجوال بيسك للعرب مقدم الدورة : أحمد جمال ، نوع الدورة : كتابية مصحوبة بصور ، حالة الدورة : انتهت ، عدد الدروس : 80 درس . مستوى الدورة : من البداية للاحتراف .

إضافة رد

 
أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 02-22-2010, 02:28 PM
الصورة الرمزية khaledbelal
khaledbelal khaledbelal غير متواجد حالياً
مبرمج المنتدى
الادارة تكليف لا تشريف
 
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
افتراضي الدرس الخامس والعشرون : الأخطاء واقتناصها .net 2008

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

سنتعرف في درس اليوم على الأخطاء وكيفية اقتناصها وتفاديها ، معاني رسائل الخطأ واشهر الاخطاء وخلافه ، ولكن قبل البداية نحتاج لإن نوضح أقسام الأخطاء التي تحصل في اي برنامج :

Syntex Errors - الأخطاء النحوية :

هذا النوع من الاخطاء هو الاسهل ، وفي Advanced Programming Environments مثل ال Visual Studio , netbeens ... etc ، يتم اكتشاف هذه الأخطاء فورياً ، مثال هذا الخطأ كتابة الجملة التالية :

if x.Nome = somevalue

بالطبع ستجد رسالة خطأ قبل التنفيذ تخبرك بأن الخاصية Nome غير موجودة ، مثل هذه الأخطاء هي الاسهل ويتم اكتشافها من خلال بيئة لغة البرمجة التي تعمل عليها ، وفي Visual Studio .net 2008 اصبحت رسائل الخطا واضحة للغاية ويمكن تفسيرها بسهولة وحلها بهذه الطريقة ، لكننا للاسف نجد الكثير من الاسئلة حول برامج لا تعمل بها خطأ واضح ، لماذا ؟ لا أدري

Logical Errors - الأخطاء المنطقية :

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

Byte x = 100000

طبعاً تعرف ان حدود النوع Byte اصغر من هذا الحد ، ولكن في الاصدارات القديمة لم يكن هذا ليظهر خطأ حيث ان الجملة مكتوبة نحوياً كما ترى . امثلة على هذا الخطأ اسناد قيمة ل object قبل عمل new له .. الخ .

لكن مع اصدارات فيجوال ستوديو الجديدة ، اصبحت مثل هذه الأخطاء تظهر مباشرة ، بل ان هناك انواعاً اصعب من ال Logic Errors اصبح الفيجوال ستوديو قادر على اكتشافها على شكل warnnings .

لن نذهب بعيداً ، سنبدأ بتقسيم ال Logical Errors وهي الأخطاء الأهم إلى ثلاثة أنواع اساسية :

User Error :
أخطاء تنتج من استخدام البرنامج ، لو افترضنا المثال السابق ل Byte نقوم فيه بتخزين عمر المستخدم ، لكن المستخدم قام بادخال رقم 10 الاف ، هذا الخطأ من المستخدم سيتسبب في المشاكل لك فيما لو لم تكن قد اضفت شرط التأكد من عدم تجاوز العمر لحد معين ، ايضاً ادخال بيانات نصية في خانة العمر وخلافه تندرج تحت اسم أخطاء المستخدم .

Exceptions :

النوع الأشهر من الأخطاء ، محاولة فتح ملف او قاعدة بيانات غير موجودة مثلاً حيث لم يتم تحميلها بصورة صحيحة ، محاولة قراءة بيانات من قاعدة البيانات في حين انها تساوي null بدون استخدام nullable type ، محاولة الكتابة إلى ملف نصي ReadOnly ، وخلافه من الأخطاء المشهورة .

Bugs :
اكثر الأخطاء شهرة ، لا يمكن حصرها ولا عدها ، وتوجد في جميع البرامج بما فيهم نسخة الويندوز التي تستخدمها ، في العادة لن يخلو برنامج منها ولكننا نحاول تفاديها قدر المستطاع ، قد تحدث بسبب نسيان حذف متغير او قراءة متغير من قيمة موجودة اصلاً في الذاكرة ونحن نظن انها قيمة فارغة ... الخ ، هذه الأخطاء قد لا تظهر ل 99% من المستخدمين ولكنا تظهر لمستخدم واحد فقط ، لذا في العادة تكون هناك عدة نسخ تجريبية من اي برنامج لمحاولة معرفة اماكن امثال هذه الأخطاء وتعديلها قبل طرح النسخة الرسمية .

في درسنا هذا سنركز على النوع الثاني من الأخطاء وهو الأهم ، النوع الأول ايضاً سنحاول وضع استنثناءات من اجل التأكد من اختيارات المستخدم ولكن جمل التحقق هي الأهم في الحالة الأولى ، اما الحالة الثالثة فالتجربة المستمرة والمتابعة هي الوسيلة الأمثل لتقليلها .

قبل ان ندخل في الدرس ، ربما ترغب في الاطلاع على الدرس التالي للاستاذ تركي العسيري - بعيداً عن انه للفيجوال بيسك 6 ولكنه يوضح معاني الأخطاء .
http://vb4arab.com/vb/showthread.php?t=7

الدرس التالي للاخ محمد سامر سلو ، حول الاستثناءات والأخطاء :
http://vb4arab.com/vb/showthread.php?t=6318

الكلاس System.Exception :

الكلاس المختص في .net بالتعامل مع الأخطاء التي تحدث في النظام ، في الواقع فإن أي خطأ يرسل للنظام ثم يقوم النظام بارساله إلى ال CLR ، والذي بدوره يخول System.Exception للتعامل مع هذا الخطا ، محتويات هذا الكلاس بالشكل التالي :

كود PHP:
public class Exception ISerializable_Exception
{
// Public constructors
public Exception(string messageException innerException);
public 
Exception(string message);
public 
Exception();
// Methods
public virtual Exception Get****Exception();
public 
virtual void GetObjectData(SerializationInfo info,
StreamingContext context);
// Properties
public virtual IDictionary Data get; }
public 
virtual string HelpLink getset; }
public 
System.Exception InnerException get; }
public 
virtual string Message get; }
public 
virtual string Source getset; }
public 
virtual string StackTrace get; }
public 
Method**** TargetSite get; }

سنحاول التعرف على الخصائص والطرق الاساسية لهذا الكلاس :

Message : رسالة الخطأ الحاصلة .
Source : ملف الاسمبلي الذي قام بعمل throw لهذا الخطأ .
HelpLink : تحتوي هذه الخاصية على رابط يشرح المشكلة ببعض التفصيل ، تستطيع الاستفادة منه كمبرمج وربما يستفيد منه المستخدم المتخصص في ال IT لنظامك .

throw exceptions :

خلال تنفيذك للبرنامج يمكن ان يقوم البرنامج بعمل throw لخطأ ما مثل عدم وجود ملف معين . سنتعلم كيفية قراءة هذا الخطأ والتعامل معه ، لكن تظل هناك حالة أخرى ترغب انت فيها بعمل throw للخطأ ، لنفترض انك تقوم بعمل check تتأكد من عدم وجود الملف ومن ثم تقوم بعرض رسالة خطأ في حالة عدم وجود الملف بالشكل التالي مثلاً :

C#:
كود PHP:
            if (!System.IO.File.Exists("c:\\ahmed.txt"))
            {
                
Console.WriteLine("there is no file");
            } 
vb.net:

كود PHP:
If Not System.IO.File.Exists("c:\ahmed.txt"Then 
    Console
.WriteLine("there is no file"
End If 
لكنك ربما لم تقم باقتناص خطأ كون الملف للقراءة فقط ، وترغب في صورة قنص اخطاء موحدة ، أو لأي اعتبارات أخرى ترغب في عمل throw للمبرمج مثلاً لو كنت تبرمج كلاس ليتم استخدامه . لأي من هذه الاعتبارات يمكن عمل throw لخطأ بالشكل التالي :

c#:
كود PHP:
            if (!System.IO.File.Exists("c:\\ahmed.txt"))
            {
                throw new 
Exception("there is no file");
            } 
vb.net:

كود PHP:
If Not System.IO.File.Exists("c:\ahmed.txt"Then 
    
Throw New Exception("there is no file"
End If 
هكذا تجد ان الفيجوال ستوديو قام باظهار خطأ بالرسالة التي اوضحتها ، تستطيع لاحقاً قراءة كائن الخطأ والتعامل معه كما تتعامل مع الخطأ الذي ينتج تلقائياً من الفيجوال بيسك .

نواصل مع الدرس التالي :

catching exceptions :

الآن جاء دور اقتناص الأخطاء ، ابسط طريقة هي باستخدام Try بحيث يخرج البرنامج من البلوك في حالة وجود الخطأ دون ان يتسبب في توقف البرنامج ، بالشكل التالي مثلاً :

C#:

كود PHP:
try
{
x+=100;
console.writeLine("no errror");
}
catch
{
console.writeLine("some error!");

VB.net:
كود PHP:
Try 
    
+= 100 
    console
.writeLine("no errror"
Catch 
    
console.writeLine("some error!"
End Try 
في حالة وجود خطأ في عملية الجمع السابقة فسيتم مباشرة الانتقال إلى catch ، فيما عدا ذلك سيواصل البرنامج دون المرور عليها ، وفي كل الاحيان لن يتم ايقاف البرنامج .

يمكننا ايضاً عرض تفاصيل عن الخطأ الذي حدث باستخدام الخصائص السابقة :

c#:
كود PHP:
            try
            {
                
+= 100;
                
console.writeLine("no errror");
            }
            catch (
Exception e)
            {
                
Console.WriteLine("Method: {0}"e.TargetSite);
                
Console.WriteLine("Message: {0}"e.Message);
                
Console.WriteLine("Source: {0}"e.Source);
            } 
vb.net:
كود PHP:
Try 
    
+= 100 
    console
.writeLine("no errror"
Catch 
As Exception 
    Console
.WriteLine("Method: {0}"e.TargetSite
    
Console.WriteLine("Message: {0}"e.Message
    
Console.WriteLine("Source: {0}"e.Source
End Try 
لو كنا نعرف بعض الأخطاء التي يمكن ان تحدث ، فيمكننا اختبارها وعرض الرسالة فيما عدا ذلك ، لنفترض المثال التالي في حالة كوننا نعرف أن الخطأ يمكن ان يكون بسبب overflow ، وفيما عدا ذلك سنظهر رسالة بخطأ عام :

C#:
كود PHP:
try
            {
                
+= 100;
                
console.writeLine("no errror");
            }
            catch (
OverflowException e0)
            {
                
Console.WriteLine("value of x more than up bound");
            }
            catch (
Exception e)
            {
                
Console.WriteLine("Method: {0}"e.TargetSite);
                
Console.WriteLine("Message: {0}"e.Message);
                
Console.WriteLine("Source: {0}"e.Source);
            } 
vb.net:
كود PHP:
Try 
    
+= 100 
    console
.writeLine("no errror"
Catch 
e0 As OverflowException 
    Console
.WriteLine("value of x more than up bound"
Catch 
As Exception 
    Console
.WriteLine("Method: {0}"e.TargetSite
    
Console.WriteLine("Message: {0}"e.Message
    
Console.WriteLine("Source: {0}"e.Source
End Try 
Finally :

تستخدم للتنفيذ بعد نهاية البلوك try - catch ويتم تنفيذها في حالة وجود خطأ او عدمه ، فمثلاً لو كنا نرغب في طباعة نص ما بغض النظر عن حدوث خطأ في المتغير x من عدمه نكتب الكود التالي :

C#:
كود PHP:
try
            {
                
+= 100;
                
console.writeLine("no errror");
            }
            catch (
Exception e)
            {
                
Console.WriteLine("Method: {0}"e.TargetSite);
                
Console.WriteLine("Message: {0}"e.Message);
                
Console.WriteLine("Source: {0}"e.Source);
            }
            finally
            {
                
Console.WriteLine("somehing");
            } 
vb.net:
كود PHP:
Try 
    
+= 100 
    console
.writeLine("no errror"
Catch 
As Exception 
    Console
.WriteLine("Method: {0}"e.TargetSite
    
Console.WriteLine("Message: {0}"e.Message
    
Console.WriteLine("Source: {0}"e.Source
Finally 
    
Console.WriteLine("somehing"
End Try 
break :

للخروج من الاستنثناء في مرحلة ما ، يمكن استخدام break أو Exit Try بالنسبة للفيجوال بيسك .

Target Site :

توفر هذه الخاصية معلومات عديدة حول الكلاس والدالة التي قامت بعمل throw للخطأ ، يمكن الاستفادة منها في عمل Debug لمعرفة مكان حدوث الخطأ .

HelpLink :
تستطيع افادة مستخدم الكلاس أو المستخدم بها ، عن طريق وضع لينك معين يمكنه الاستفادة منه بالشكل التالي مثلاً :

C#:
كود PHP:
try
{
+= 100;
Console.WriteLine("no errror");
}
catch (
Exception e)
{
e.HelpLink "www.ahmedgamal-space.blogspot.com";

vb.net:
كود PHP:
Try     
  
+= 100 
 
  Console
.WriteLine("no errror"
Catch 
As Exception 
 
  e
.HelpLink "www.ahmedgamal-space.blogspot.com" 
End Try 
نكتفي بهذا القدر لهذا الدرس ، رغم ان الموضوع يحتوي على الكثير من النقاط ، كيفية بناء خطأ خاص ومستويات الأخطاء وخلافه ، للتوسع في هذا المجال يمكن الرجوع إلى msdn .

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .


توقيع : khaledbelal



(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}).
سورة الأعراف.

رد مع اقتباس
  #2  
قديم 12-16-2010, 11:47 PM
الصورة الرمزية ماريا إسلام
ماريا إسلام ماريا إسلام غير متواجد حالياً

عضو متألق

 
تاريخ التسجيل: Oct 2010
العمر: 35
المشاركات: 268
افتراضي

وعليكم السلام ورحمة الله وبركااته
جـــــــــــزااااكم الله خيراا وباارك في مسعااكم
//


توقيع : ماريا إسلام

ربي هذا العهد لك ... عزم القلب الوفا

تستطيع أن ترى الصورة بحجمها الطبيعي بعد الضغط عليها

تستطيع أن ترى الصورة بحجمها الطبيعي بعد الضغط عليها

صفحتي على الفيسبوك!

رد مع اقتباس
إضافة رد


تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس الأول : تحميل .net 2008 ومميزات استخدامه khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 5 03-11-2012 03:42 PM
الدرس الخامس ( في أدب المرء مع ربه – سبحانه ) ابو تسنيم روضة العقيدة 2 09-08-2010 06:13 PM
الدرس الخامس عشر : التعرف على Static دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-19-2010 08:05 PM
الدرس الخامس : الأنواع والدوال الرئيسية .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-16-2010 03:24 AM
الدرس الثاني : تقنيات جديدة مع .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-15-2010 03:37 AM

استضافة الحياة

الساعة الآن 10:56 PM.


Powered by vBulletin® v3.8.4, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. , TranZ By Almuhajir
النسخة الفضية
Ads Management Version 3.0.1 by Saeed Al-Atwi

SlamDesignzslamDesignzEdited by Riad Al-Ganah Team - جميع الحقوق محفوظة لشبكة رياض الجنة

Privacy Policy Valid XHTML 1.0 Transitional By SlamDesignz Valid CSS Transitional By SlamDesignz