![]() |
|
الدرس التاسع عشر : ال Encapsulation - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : قسم دورات المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=113) +---- قسم : دورة .net 2008 . لنبدأ سوياً (http://vb4arb.com/vb/forumdisplay.php?fid=138) +---- الموضوع : الدرس التاسع عشر : ال Encapsulation (/showthread.php?tid=5533) |
الدرس التاسع عشر : ال Encapsulation - oneyemenweb2 - 11-10-12 منقول من المنتدى القديم كاتب المقال احمد جمال المشرف العام بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .يهدف مبدأ ال Encapsulation والذي سبق شرحه باختصار في الدرس السابع عشر إلى اخفاء التفاصيل الداخلية لأي كلاس عن اعين باقي المبرمجين ، باختصار شديد لنفترض نظام محاسبي يتضمن نظام لادارة المخازن ، وآخر للصيانة ، وثالث من اجل المبيعات . في هذه الحالة يدعوك مبدأ ال Encapsulation ليكون لكل واحد من هذه النظم عدد محدد من الدوال للدخول والخروج من هذا النظام والتي يمكن للنظم الثلاثة التواصل من خلالها ، فمثلاً في نظكام المبيعات تجد (اضافة عملية مبيعات) ( اضافة مشتريات ) ( خصم ) ... الخ في مجموعة محدودة جداً من الدوال . طبعاً لو لاحظت ان عملية مثل اضافة عملية مبيعات تتطلب طابوراً من الأوامر ، يتضمن فتح قاعدة البيانات والتأكد من ان البيانات المدخلة صحيحة والتأكد من وجود الكمية ومن ثم تخزين الناتج في قاعدة البيانات ، تم تجميعها في النهاية على شكل أمر واحد يقوم زميلك الآخر الذي يقوم ببرمجة واجهات المستخدم إلى استخدامه بدلاً من الغوص في كل هذه التفاصيل الفنية . كما لاحظت ، يفيد هذا الموضوع الأشخاص التي تعمل في مجموعات اولاً ، حيث لن اكون مضطراً لفهم كودك بالكامل ويكفيني ان اعرف كيف اتعامل معك ، كما ان الكود سيكون مصمماً على شكل هرم حيث كل أمر يستتبعه مجموعة من الأوامر ، لكن سيكون زميلك المبرمج قادراً فقط للوصول إلى رأس الهرم وهو ما يقلل كثيراً من الأخطاء ، كما يحمي متغيراتك الخاصة من العبث بها عن طريق الخطأ من المبرمجين الآخرين . هذا المفهوم الذي تحاول ان توصله لك كل لغات برمجة OOP ، ولتطبيق هذا المفهوم هناك العديد من النقاط التي سنتطرق لها في هذا الدرس . الدرس التاسع عشر : ال Encapsulation - oneyemenweb2 - 11-10-12 منقول من المنتدى القديم كاتب المقال احمد جمال المشرف العام قبل ان نواصل درسنا هذا ، اول نقطة لا بد ان تضعها في ذهنك انك مبرمج وهناك مبرمج آخر هو المستخدم ... بمعنى مثلاً انك تقوم ببرمجة كلاس ويقوم زميلك المبرمج باستخدام هذا الكلاس كجزء من المشروع . استخدام دوال public للوصول إلى متغيرات private . لنفترض المثال التالي بخصوص ال Person الذي قمنا بانشاءه عدة مرات على مستوى الدروس السابقة : C#: كود : class Personكود : Class Person ولإن زميلك العزيز في الفريق الخاص بادخال بعض البيانات بشر - وجل من لا يسهو - قام بكتابة الجملة التالية : C#: كود : Person Ahmed = new Person();VB.net: كود : Dim Ahmed As New Person() طبعاً هذا المدخل سيسبب الدمار العاجل للكلاس الذي قمت بعمله ، كما ان زميلك مبرمج شاشات الادخال ربما لن يكلف نفسه عناء برمجة امر التحقق من الادخال ، لذا تأتي النصيحة الدائمة ، امنع متغيراتك من الظهور لمستخدمها - المبرمج الآخر - وضع بدلاً منها دوال لقراءتها او الكتابة إليها بالشكل التالي : C#: كود : class personVB.net: كود : Class person طبعاً تسمية المتغيرات باسم x هو خطا كما اتفقنا سابقاً ، دالة Set ينبغي ان تأخذ الشكل التالي مثلاً : C#: كود : public string SetAge(int Age)VB.net : كود : Public Function SetAge(ByVal Age As Integer) As String وذلك حسبما تعلمنا من خصائص this أو Me في الدرس السابق ... ربما يبدو لك الأمر مملاً او طويلاً ، لكنه مثل هذه الأمور في المشاريع الجدية تعد نقاطاً حيوية لا يمكن الاستغناء عنها لإنها قد تتسبب في سقوط للمشروع يكلف عدة ملايين بسبب خطأ بسيط . تنبيه أخير ، الدالة GetAge يطلق عليها اسم Accessor أما الدالة SetAge فتسمى باسم Mutator . الدرس التاسع عشر : ال Encapsulation - oneyemenweb2 - 11-10-12 كاتب المقال احمد جمال المشرف العام ارسال القيم كجزء من ال Constructor : طريقة أخرى يمكنك استخدامها كبديل او مع الطريقة السابقة ، وهي اتاحة الفرصة للمستخدم لتمرير بارميترات قيم المتغيرات ضمن المشيد Constructor ، في الكلاسات الكبيرة سيكون لزاماً عليك استخدام الطريقة الأولى إلى جانب هذه الطريقة حيث انك لن تتصور المستخدم يقوم بتمرير قيم كل المتغيرات لحظة انشاء Object من ال Class . مثال هذه الطريقة : C#: كود : class PersonVB.net: كود : Class Person الدرس التاسع عشر : ال Encapsulation - oneyemenweb2 - 11-10-12 كاتب المقال احمد جمال المشرف العام استخدام ال Type Property : بنفس الطريقة السابقة ، ولكن بطريقة اخرى واعتماداً على تحويل المتغير إلى خاصية لكل منها دالتان : Set و Get ، يتم كتابة ذلك بالشكل التالي : C#: كود : class PersonVB.net: كود : public Property Age() As Integer والآن يمكنك الوصول المباشر إلى Age ، ولكن قبل تطبيق اي شيء سيتم استدعاء Set ، وفي حالة طلب شيء سيتم الحصول عليه من Get ، وهو ما يتيح لك التأكد من بيانات الادخال او عمل بعض العمليات على عمليات الاخراج . لعلك لاحظت ايضاً أن Set و Get هما public لان الخاصية (وليس المتغير في هذه الحالة) المسماه Age هي public ، ولكن منذ .net 2.0 اصبح بامكانك التعديل في معرف الوصول الخاص ب Set او Get على حدة ، بالشكل التالي مثلاً : C#: كود : public int Ageكود : {VB.net: كود : Public Property Age() As Integerكود : Get إذا كنت ترغب في عمل Read Only Property فيمكنك ازالة الخاصية Set ، أما لو اردت العكس لعمل Write Only Property فأزل الخاصية Get ، هذا المثال ل Read Only Property : C#: كود : public int AgeVB.net: كود : Public ReadOnly Property Age() As Integer الدرس التاسع عشر : ال Encapsulation - oneyemenweb2 - 11-10-12 ردود مهمة النبهاني مبرمج محترف من الدرجة الأولى جهد جميل بارك الله فيك لكن اتمنى منك مراجعة الكود التالي : كود : Class Person كتابة شيء بعد Return يعني انها Function وليست Sub وهذا شيء ------------ احمد جمال رد صحيح ، اصلاً وجود return غير مناسب . شكراً على التنبيه . |