محمد قطان

مشاكل البرمجة بلغة الفيجوال بيسك وحلولها.. الدرس الأول

   17 اصوات

  1. 1. ????? ??????? ???? ???????? ???? ???????.. ????? ?????

    • ?????
      14
    • ???
      2
    • ???
      0
    • ????
      1

من فضلك سجل دخول او سجل حساب جديد قبل التمكن من اضافه صوتك .

11 ردود في هذا الموضوع

سوف أحاول وضع دروس حول مشاكل البرمجة بلغة فيجوال بيسك ( DeBugging Visual Basic )..

وهذا أول درس وهو عبارة عن مقدمة عامة لابد منها للبداية الصحيحة بمثل هذه الدروس..... وقد نصحني أحد الأساتذة الفاضلين بأن أبد من الصفر .... تلبية لرغبة معظم رواد المنتديات ... وان شاء الله تكون دروسا نافعة تنال الرضا ..... والآن لنبدأ بسم الله ......

مما لا شك فيه أن لغة VB أصبحت من أكثر بيئات البرمجة شيوعا واستخداما وذلك يرجع لعدة أسباب منها:

1-سهولة إنشاء التطبيقات بهذه اللغة.

2-القدرة على إنشاء تطبيقات تفي بالغرض وتختصر الكثير من الوقت والجهد الذي ستصرفه في غيرها من لغات البرمجة المتقدمة.

3-الدعم المستمر لها من قبل الشركة المصممة ( Microsoft ) .

وربما كان لاستخدام VB في مجالات متعددة وطرق كثيرة ( مثل إنشاء برامج مستقلة أو تكامل بعض البرامج مع VBA أو بعض التطبيقات المعتمدة على الويب باستخدام IIS و DHTML ) ربما كلن لهذا اثر في ظهور الكثير من الأخطاء في كتابة الكود .......... وهذا في الواقع ما يعاني منه الكثير من مبرمجي هذه اللغة .........

سوف نحاول في هذه الدروس إن شاء الله التعرف على معظم الأخطاء الشائعة في كتابة الكود وتصميم البرامج.......

مقدمة لبناء البرامج:

أول شيء يجب أن يفعله المبرمج هو ( التخطيط للمشروع أو البرنامج ) وربما كانت هذا أصعب شيء في بناء أي برنامج لذلك نجد الكثير من المبرمجين يغفلون عن هذه المرحلة ويبدءون مباشرة بالتصميم ولاشك أن بناء أي برنامج بهذه الطريقة يكون سببا لظهور الكثير من الأخطاء في البرنامج .....

ما هي الأمور التي يجب أن تراعى في مرحلة التخطيط للمشروع ؟؟؟؟

بشكل عام يجب على المبرمج أن تكون عنده إجابة أو خلفية عن مثل هذه التساؤلات :

1- ما هو الهدف من المشروع ......

2- ما هي الحدود التي يجب أن توضع له ...

3- ما هي المؤسسة ( أو المستخدمين ) الذين سيقومون بالاستفادة من هذا المشروع ....

4- ما هو الوقت المخصص لعمليات تصميم وإنشاء البرنامج ....

هل تستطيع الإجابة عن هذه التساؤلات ؟؟؟

إذا كانت إجابتك( نعم ) فهذا يعني انك جاهز للبدء في التصميم . وأما إذا كانت ( لا ) فأنصحك بأن تتروى قليلا إلى أن تعرفها .......

تصميم واجهة الاستخدام UI USER INTERFASE :

لعل هذا هو أول شيء يبدأ به المبرمج . وهو الجزء الذي يتمكن المستخدم من مشاهدته في التطبيق لذا كان من الضروري أن يصمم بشكل مناسب ... واليك بعض القواعد التي يمكنك إتباعها لبناء واجهة استخدام مناسبة:

1-بساطة التصميم :

هنا يجب أن يبقى ببالك دائما كمبرمج انك لست الوحيد الذي سوف يستخدم البرنامج لذا فإن واجهة الاستخدام لابد أن تكون واضحة في تصميمها من حيث تنسيق الأزرار وحقول البيانات مثلا ....

2- الالتزام بالأوضاع العامة والأساسية:

وحتى تتوضح هذه أكثر سأضرب بعض الأمثلة:

أ- لا تضع زري OK و Cancel بهذا الترتيب داخل إحدى المربعات ثم تجعلها Cancel و Ok في مربع آخر ... بل حاول أن تلتزم بالوضع العام دائما ؟؟؟؟؟

ب- العمل على تحديد مفاتيح الاختصار التي سيتم استخدامها في البرنامج ضمن أسس عامة ومعروفة مثلا .... Open = CTR +O .....

ج- من الأفضل أن لا تتيح للمستخدم نقل عناصر التحكم أو تغيير حجمها أو ما شابه ذلك بل اجعل لمثل هذه العناصر أماكن ثابتة ......

3- عدم استخدام ألوان كثيرة وغير مقبولة:

فإذا كنت تنوي استخدام الألوان في تصميم واجهة الاستخدام فحاول التركيز على أن تكون واضحة ومؤثرة ولا بأس أن تعتمد على آراء بعض المبرمجين والمستخدمين ....

وهذا كله يعتمد بشكل عام على نوعية البرنامج وفي هذه سيسعفك المخطط الذي وضعته لمشروعك عندما حددت فيه نوعي البرنامج ومستخدميه ....

والخاصة انه يجب بناء واجهة استخدام مبسطة وواضحة تعطي انطباع الرضا من المستخدم .. لا التعقيد ...

فن كتابة الكود:

المبرمج الواعي يعمل كما يعمل الفنان في تنسيق الصورة التي يرسمها لذلك فهو يقوم بتنسيق الكود والاعتناء به قدر الامكان وهذا يرجع بالكثير من الفوائد عليه ... واليك بعض القواعد الأساسية في تنسيق كتابة الاكواد:

1- وضع المسافات بين اسطر الكود:

وذلك لتقسيمها إلى مجموعات منطقية وهذه تعد أوضح طرق تنسيق الكود وإليك المقارنة التالية:

مثال كود لم يتم تنسيقه:


If question = "Yes" Then
For x = 0 To 100
DoSomething = x * 186232
If DoSomething > 3205420 Then
MsgBox "You are here"
Else
MsgBox "You are there"
End If
Next x
Else
MsgBox "later"
End If

وهذا مثال لكود وإنما بطريقة منسقة ومرتبة:



If answer = "Yes" Then
For x = 0 To 100
DoSomething = x * 186232
If DoSomething > 3205420 Then
MsgBox "You are here"
Else
MsgBox "You are there"
End If
Next x
Else
MsgBox "later"
End If

فمن خلال وضع مسافات بين اسطر الكود تتمكن على الفور من مشاهدة كيفية تجميع البنية المنطقية. كما ستجد انه قد تم وضع نظام التكرار For – Next في النصف الأول من جملة If – Then..... وداخل نظام التكرار For – Next ستجد جملة If Then أخرى .....

وأما بالنسبة للكود الذي لم يتم تنسيقه بهذا الشكل ستجد انه من الصعب أن تتمكن من تتبع سير البنية المنطقية. وبالتالي إذا تمت كتابة التطبيق بأكمله على هذا النحو فيمكنك أن تتصور الفترة التي سوف تستغرقها في اكتشاف أية أخطاء فيه والتمكن من معالجتها .....

2- إضافة التعليقات إلى الكود:

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

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

3- استخدام طرق صحيحة لتسمية أنواع البيانات:

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

Array = a ....... Data = dt .......Single =sgl

Text = txt ...... Form =frm .... Check Box = chk

كما إن عدم الترتيب الصحيح هنا في أسماء المتغيرات قد ينشئ الكثير من الخطاء واليكم هذا المثال البسيط ...

هذا الخطأ شائع وهو يحدث مثلا عند وضعك عددا من المتغيرات في سطر واحد مثال ذلك:

Dim nVar1, nVer2, nVer3, As Integer 

قد تعتقد هنا انه قد تم تخصيص نوع البيانات الخاص بالأعداد الصحيحة ( Integer ) لكافة المتغيرات الثلاثة .... ولكن الحقيقة انه قد تم تحديد المتغير الأخير فقط (nVer3 ) كعدد صحيح وأما بالنسبة للمتغيرين الآخرين فقد تم تخصيص نوع البيانات ( Variant ) لكل منهما .....

والطريقة الصحيحة في تعريف هذه المتغيرات الثلاثة في سطر واحد تكون كالتالي:

Dim nVar1 As Integer,  nVer2 As Integer, nVer3 As Integer 

وأختم هذا الدرس بخطأ خفي نوعا ما ( على المبتدئين ) يكون عادة في تسمية المصفوفات التي تبدأ برقم صفر ( 0 ) :

المصفوفة بشكل عام عبارة عن مجموعة من المكونات المعروفة التي يتم الوصول إليها من خلال اسم متغير معروف ....... كما يتم التعبير عن كل مكون عن طريق رقم يطلق عليه اسم فهرس ( Index ) , كما تبدأ مكونات المصفوفة بالرقم صفر ( 0 ) , وعند قيامك بتحديد المصفوفة الخاصة بك فستجد أنها قد تظهر على النحو التالي :

Dim sStudentName(10) As String 

تقوم هذه المصفوفة بتحديد أن المتغير sStudentName سوف يشتمل على أحد عشر مكونا ... ولكن لماذا أحد عشر وليس عشر مكونات ؟؟؟؟

حيث أن المصفوفة المصفوفة تبدأ بالرقم صفر, فاعلم انه سيتم تضمين هذا المكون في العدد الإجمالي للمكونات.... أي ستبدأ المصفوفة بالرقم صفر وتنتهي بالرقم ( 10 ) .......

قد تسأل عن أهمية معرفة هذا ...؟؟ حسنا ......

عندما تعمل مع عناصر تحكم مثل مربعات القوائم ومربعات السرد ستكتشف أن كل مكون موجود داخلها يعتبر جزءا من احد الأخطاء , ولتتمكن من معرفة عدد المكونات الموجودة في عنصر واحد من عناصر التحكم تلك يمكنك استخدام ListCount الخاصة بعنصر التحكم المطلوب , والتي تعمل على إرجاع عدد المكونات الموجودة داخل المصفوفة .... والآن عند قيامك باستخدام هذه القيمة داخل نظام التكرار For – Next وذلك للتمكن من معالجة معلومات المصفوفة مثلما يحدث في الكود التالي سيتم إخبارك بوجود الخطأ ( Subscript ) ...


For x = 0 To lststudents . ListCount
If sStudentName (x) = txtStudentName Then
MsgBox "The Student is Enrolled"
End If
Next

ولمزيد من التوضيح ... يرجع هذا الأمر إلى أنه قد تم تحديد المصفوفة sStudentName بالعدد ( 10 ) وليس بالعدد ( 11 ) , ولتتمكن من تجنب ظهور مثل هذا الخطأ .. قم بطرح واحد من المجموع الكلي الذي يتم إرجاعه من خاصية ListCount .... على النحو الموضح في الكود التالي:



For x = 0 To lststudents . ListCount -1
If sStudentName (x) = txtStudentName Then
MsgBox "The Student is Enrolled"
End If
Next

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

إلى هنا يكون الدرس الأول انتهى أظن انه واضح وليس فيه غموض............

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

أرجو لكم الفائدة وكلنا...... متعلم.... في النهاية................

لكم تحياتي (f) محمـ قط MK ـان ــد (f)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

درس ممتاز ومهم وتشكر عليه

ننتظر الدرس الثاني

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ممتاز

الله يعطيك العافية

ننتظر المزيد

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

سلام الله عليكم

ها انت تفرغ شى جديد من جعبتك اخى العزيز

وفقك الله وننتظر المزيد ان شاء الله قريبا جدا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مجهود رائع وفقك الله اخي محمد قطان

مع تحياتي لك

استمر علي بركة الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عودا حميدا أستاذ محمد قطان ، وشكرا لك على تنبيهك لهذه المشاكل ، وتنمنى من الجميع التنبه لها وتجنبها.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أرجو أن تراجعوا تاريخ المشاركة

4 ديسمبر 2001

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اشكرك على هذا الدرس المفيد

وجزاك الله خيراً فى الدنيا والآخرة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
درس ممتاز ومهم وتشكر عليه

ننتظر الدرس الثاني

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكراً لك وارجو ان تتكرم بأعطائنا المزيد من الدروس مع الاهتمام بدروس قواعد البيانات وجزاك الله خير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .