الفصل(9):مدخل الى الفئاتClasses - الجزء الأول - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : قسم دورات المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=113) +---- قسم : دورة تعليم البرمجة باستخدام VB.net, (http://vb4arb.com/vb/forumdisplay.php?fid=129) +---- الموضوع : الفصل(9):مدخل الى الفئاتClasses - الجزء الأول (/showthread.php?tid=4380) |
الفصل(9):مدخل الى الفئاتClasses - الجزء الأول - B3dak Hbebe - 23-09-12 السلام عليكم ورحمة الله وبركاته
عندما نتحدث عن الفيجوال بيسك دوت نت فاننا نتحدث عن لغة كائنية(غرضية) التوجه...بسم الله الرحمن الرحيم كتوضيح: العالم من حولنا مليء بالكائنات وكل كائن له خصائصه وسماته وهذا ما يتم تطبيقه في لغة البرمجة كائنية التوجه حيث يتم اعتبار مساحة العمل كالعالم فتكون الكائنات وتحدد خصائصها وسماتها وتستخدم ظواهرها في عملك.. الآن سنتطرق الى أهم مواضيع البرمجة كائنية التوجه OOP وهو موضوع الفئات Classes.. الفئة(Class): عبارة عن قالب يمكنك بواستطه تشكيل الكائنات التي حددت صفاتها ومن ثم استخدمها..كتشبيه يمكن اعتبارها كقالب الأحذية -أعزكم الله- التي يمكنك بواستطها انشاء حذاء بمواصفات هذا القالب. يتم انشاء Class باستخدام الكلمة المحجوزة Class وتنهيه بالعبارة المشهورة End Class مثال: كود : [align=left][color=#000000][COLOR=#007700]Class [/color][COLOR=#0000BB]Class**** كما أسلفنا فان الفئة عبارة عن كائن له خصائصه وظواهره لذلك فان الكلاس يحتوي على أعضاء وظواهر تصفه حركاته لنأخذ مثال: كود : [align=left][color=#000000][COLOR=#007700]Class [/color][COLOR=#0000BB]Person الآن كما ترى فاننا قمنا ببناء فئة جديدة أسميناها Person وأضفنا لها خصائص الاسم والعمر والوزن ولكي تستطيع الوصول الى عناصر الفئة فانظر المثال التالي: كود : [align=left][COLOR=#000000][COLOR=#007700] كما ترى فاننا قمنا بالاعلان عن متغير جديد من نوع الفئة التي صغنا معالمها وأسندنا لعناصرها قيم جديدة وبعدها استعلمنا عن القيم التي تحملها عناصرها والنتيجة: [h=3][/h] لعلك انتبهت إلى أن الفئة بتركيبتها البرمجية تشبه كثيرا تركيبة Structure فيمكن صنع فئة من تركيبة Structure باستبدال كلمة Structure بكلمة Class راجع: الفصل(3): التركيبات أنواعها واستخداماتها لكن هناك شيء من الاختلاف بين الفئة والتركيبة Structue 1) الفئة من النوع المرجعي بينما التركيبة Structure من النوع ذات القيمة راجع: الفصل(8): الدوال والاجراءات 2) الفئة يمكن أن لا تحتوي على أعضاء بينما التركيبة تصدر رسالة خطأ عند خلوها من العناصر كود : [COLOR=#000000][COLOR=#007700]Class empty كود : [align=left][color=#000000][COLOR=#0000BB]Structure [/color][COLOR=#007700]empty أي ان التركيبة empty يجب أن تحتوي على عضو ابتدائي متغير أو اجراء
3)المحدد الافتراضي للفئة هو Private بينما المحدد الافتراضي لتركيبة الStructure هو Public 4) يمكننا تطبيق مبدأ الورائة والاشتقاق على الفئات بينما التركيبات فلا ___________________________ ملاحظة: يمكن للفئة أن تكون متداخلة Nested مثال: كود : [align=left] ___________________________ ملاحظة أخرى:بامكاننا استخدام الفئة كوسيط نرسله للاجراءات والدوال بالطريقتين التي ذكرناها (الارسال بالمرجع أو بالقيمة) وبالرغم من انك ارسلته بالقيمة فان الجراء الحاضن سيغير قيمة المرسل بالرغم من ان ارسال الوسيط تم بالقيمة وهذا يتطابق مع الفرق الذي ذكرناه بالاعلى أن الفئة من النوع المرجعي... كل ما سبق نظرة مبسطة جدا عن الفئات... الآن تحدثنا أن الفئة تمثل كائن والكائن له أعضاء إذن الفئة لها أعضاء ويمكن تقسيمها لاربعة مكونات:
الحقول Fields تعتبر الحقول أصغر وأبسط مكونات الفئة وما هي الا متغيرات عادية. مثال: كود : [align=left][color=#000000][COLOR=#007700]Class [/color][COLOR=#0000BB]Person كما نرى فان هذه الفئة تحتوى على فئتين أو أكثر وهما **** و Age أيضا من مجمل الفروق بين الفئة والتركيبة Structure فان حقول الفئة يكمن اسناد قيم لها وقت كتابة الفئة بخلاف التركيبة Structure توضيح: كود : [align=left][color=#000000][COLOR=#007700]Class [/color][COLOR=#0000BB]Person كود : [align=left] وبالتطرق لقضية أخرى : بامكانك تعريف حقل داخل الفئة من نوع هذه الفئة وهذا يفيد في خوارزميات المكدسة(LIFO) والطوابير(FIFO) مثال: كود : [align=left][color=#000000][COLOR=#007700]Class [/color][COLOR=#0000BB]Person _____________ مداخلة بسيطة: المكدسة (LIFO) اختصار ل Last In First Out أي آخر ما يدخل أول ما يخرج الطابور(FIFO) اختصار ل First In First Out أي أول ما يدخل أول ما يخرج _____________ يمكن للحقول أن تكون على شكل مصفوفات مثال: كود : [align=left][color=#000000][COLOR=#007700]Class [/color][COLOR=#0000BB]Person لكن ماذا ان أردت حماية الحقل من تغيير قيمته ..يمكن ذلك باستخدام الكلمة المحجوزة ReadOnly وتعني للقراءة فقط كود : [align=left][color=#000000][COLOR=#007700]Class [/color][COLOR=#0000BB]Person وبذلك لن يستطيع المستخدم تغيير قيمة المتغير بعد جعله مقروء فقط
لحظة...بماذ تختلف ReadOnly عن Const أي ماذا يختلف هذا المتغير المحمي عن الثابت ان لن نقدر على تغيير قيمته الاختلاف بينهما أن الثابت يجب عليك اسناد قيمته وقت كتابته أم المتغير المحمي فلك الخيار اما أن تسند قيمته وفت كتابته أو تعطيه قيمته عند أول عملية اسناد ولن يتغير بعدها في ي عملية اسناد أخرى الطرق Methods الطرق ما هي الا اجراءات ودوال ويمكنك مراجعتها من هذا الفصل: [h=3]الفصل(8): الدوال والاجراءات[/h] كيف يمكنني الاستفادة من الطرق: 1) بوساطة الطرق يمكنك صنع أحداث هذا الكائن توضيح: الآن نحن البشر نستطيع المشي يمكننا تطبيق ذلك بكل سهولة في عالم البرمجة الكائنية لنقم بصنع فئة نسميها انسان ونطبق عليها المبدأ السابق: في داخل جسم الفئة Person نضيف اجراء جديد نسميه Walk وداخل هذا الاجراء نحدد كيفية المشي كود : [align=left][color=#000000][COLOR=#007700]Class [/color][COLOR=#0000BB]Person وطريقة استدعاء هذا الاجراء هي كالتالي: كود : [align=left] وبهذا نكون قد صنعنا متغير من النوع Person أسميناه Lo2i (سامحني يا لؤي بدي اغلبك معي ) وقمنا باستدعاء اجراء المشي الخاص بLo2i ... 2) مثال رائع وجدته في كتاب الاستاذ تركي العسيري... باستخدام الطرق يمكنك اختصار الاسطر والوقت في اسناد القيم لعناصر الفئة توضيح: كود : [align=left][color=#000000][COLOR=#007700]Class [/color][COLOR=#0000BB]PersonRecord في المثال السابق تم صنع فئة جديدة سميت PersonRecord وتم اضافة بضعة حقول لها **** و Age وAdress ويمكننا اسناد القيم لتلك الحقول بالشكل التالي: كود : [align=left] لكن كيف تفيدنا الطرق باختصار الأسطر والوقت دعنا نرجع لذات الفئة, باضافة اجراء داخل الفئة لعملية اسناد القيم الثلاثة: كود : [align=left][color=#000000][COLOR=#0000BB] [/color][color=#007700]Class [/color][COLOR=#0000BB]PersonRecord الشرح: اضفنا اجراء جديد باسم SetValues ومهمته اسناد القيم للحقول الثلاثة وفي هذا الاجراء نقوم بتمرير ثلاثة وسيطات حسب الحقول المراد استغراقها وبالتالي فان عملية الاسناد اصبحت بالشكل التالي: كود : [align=left] [SIZE=5]مبدأ إعادة التعريف OverLoading[/SIZE] مثال: لدينا الطريقة OverTest سنقيم عليها مبدا إعادة التعريف: كود : [align=left][color=#000000][COLOR=#0000BB]Sub OverTest[/color][COLOR=#007700]() كود : [align=left][color=#000000][COLOR=#0000BB]Sub OverTest[/color][color=#007700]([/color][color=#0000BB]ByVal Var1 [/color][color=#007700]As [/color][color=#0000BB]Integer[/color][COLOR=#007700]) كود : [align=left][color=#000000][COLOR=#0000BB]Sub OverTest[/color][color=#007700]([/color][color=#0000BB]ByVal Var2 [/color][color=#007700]As [/color][color=#0000BB]String[/color][COLOR=#007700]) قد تلاحظ أننا قمنا بتغيير نوع المتغير Var1 في الاجراء الثالث بالرغم من تغيير المتغير وهذا من أسس مبدأ إعادة الوراثة... اذ ان الأمر اعادة التعريف التالية تصدر خطأ لاننا بالرغم من تغيير اسم الوسيط لم نغير نوعه ولك التجربة كود : [align=left][color=#000000][COLOR=#0000BB]Sub OverTest [/color][color=#007700]( [/color][color=#0000BB]ByVal Var1 [/color][color=#007700]As [/color][color=#0000BB]Integer[/color][COLOR=#007700]) كود : [align=left][color=#000000][COLOR=#0000BB]Sub OverTest [/color][color=#007700]( [/color][color=#0000BB]ByVal Var2 [/color][color=#007700]As [/color][color=#0000BB]Integer[/color][COLOR=#007700]) معوقات عملية إعادة التعريف
كود : [align=left][color=#000000][COLOR=#0000BB]Sub OverTest [/color][color=#007700]( [/color][color=#0000BB]ByVal Var1 [/color][color=#007700]As [/color][color=#0000BB]Integer[/color][COLOR=#007700]) كود : [align=left][color=#000000][COLOR=#0000BB]OverTest [/color][color=#007700]( [/color][color=#0000BB]ByRef Var2 [/color][color=#007700]As [/color][color=#0000BB]Integer[/color][COLOR=#007700])
كود : [align=left][color=#000000][COLOR=#007700]Public [/color][color=#0000BB]Sub OverTest [/color][color=#007700]( [/color][color=#0000BB]ByVal Var1 [/color][color=#007700]As [/color][color=#0000BB]Integer[/color][COLOR=#007700]) كود : [align=left][COLOR=#000000][COLOR=#0000BB] في النهاية عند تطبيق مبدأ اعادة التعريف يستحسن استخدام الكلمة المحجوزة OverLoads لتسريع عمل المترجم مثال: كود : [align=left][color=#000000][COLOR=#0000BB]OverLoads Sub OverTest[/color][color=#007700]([/color][color=#0000BB]ByVal Var1 [/color][color=#007700]As [/color][color=#0000BB]Integer[/color][COLOR=#007700]) كود : [align=left][color=#000000][COLOR=#0000BB]OverLoads Sub OverTest[/color][color=#007700]([/color][color=#0000BB]ByVal Var2 [/color][color=#007700]As [/color][color=#0000BB]String[/color][COLOR=#007700]) تكمن أهمية مبدأ إعادة التعريف في تسهيل عمل المبرمج : المثال التالي سيوضح كيف: الآن عندما نطلب من المستخدم ادخال عمره هل نضمن أنه سيدخله حرفيا ام رقميا...بهذا ستضطر لخوارزمية اكثر تعقيدا بدءا بقنص الأخطاء الواردة مرورا بتحويل المدخلات في حال خالفت المطلوب انتهاء بخطأ وارد في حال فشل العمليتين السابقتين.. لذلك يفيدنا مبدأ إعادة التعريف في تخطي هذا الخطأ كالتالي: كود : [align=left][color=#000000][COLOR=#007700]Class [/color][COLOR=#0000BB]Person ----------------------------------- In Form.Load كود : [color=#000000][COLOR=#0000BB]Dim Lo2i [/color][color=#007700]As New [/color][COLOR=#0000BB]Person الآن في حال ادخال المستخدم قيمة حرفية سيتم التعامل معها وفق الاجراء الاول الذي يستقبل نصا بينما إن أدخل قيمة رقمية سيتم التعامل معها وفق الاجراء الثاني الذي يستقبل رقما بهذا نتخطى احتمالات الوقوع في خطأ من جراء ادخال قيمة غير النوع المحدد نكتفي بمبدأ إعادة التعريف حول موضوع الطرق وهناك بعض القضايا الأخرى التي سيتم شرحها باذن الله وقت حاجتنا لها ان شاء الله بهذا نكون قد أنهينا فصلنا لهذا اليوم وسنتحدث في الفصل القادم عن الجزء المتبقي من الفئات ان شاء الله مع تحيات:
Lo2i و Mohammed Asaad انتظروا الدرس القادم الفصل(9):مدخل الى الفئاتClasses - الجزء الأول - abdoojh - 21-02-13 بارك الله فيكم على المجهودات الطيبة واشاء الله في ميزان حسناتكم الفصل(9):مدخل الى الفئاتClasses - الجزء الأول - خليل اسماعيل - 27-04-13 بارك الله فيك الفصل(9):مدخل الى الفئاتClasses - الجزء الأول - green.grass52 - 29-07-13 صعب :confused: الفصل(9):مدخل الى الفئاتClasses - الجزء الأول - Abu Ehab - 30-07-13 green.grass52 كتب :صعب :confused:أخي الكريم ,, لا مش صعب .... بالعكس الراجل بيتكلم في أبسط أمور الفئات أنت ركز شويه بس والله بيفرجها . RE: الفصل(9):مدخل الى الفئاتClasses - الجزء الأول - ali hussein - 30-05-17 لماذا تظهر الاكواد بهذه الشكل http://store6.up-00.com/2017-05/149613508873731.png |