تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس التاسع عشر : ال Encapsulation
#2
منقول من المنتدى القديم
كاتب المقال احمد جمال المشرف العام
قبل ان نواصل درسنا هذا ، اول نقطة لا بد ان تضعها في ذهنك انك مبرمج وهناك مبرمج آخر هو المستخدم ... بمعنى مثلاً انك تقوم ببرمجة كلاس ويقوم زميلك المبرمج باستخدام هذا الكلاس كجزء من المشروع .

استخدام دوال public للوصول إلى متغيرات private .

لنفترض المثال التالي بخصوص ال Person الذي قمنا بانشاءه عدة مرات على مستوى الدروس السابقة :

C#:
كود :
class Person
{
public int Age;
}
VB.net:
كود :
Class Person


    Public Age As Integer

End Class

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

C#:
كود :
Person Ahmed = new Person();
Ahmed.Age = 999999999999;

VB.net:
كود :
Dim Ahmed As New Person()
Ahmed.Age = 999999999999
ولو ان السهو في رقم بهذا الحجم يعد شبه مستحيل ، لكننا قد نتعرض لهذه المشكلة في اشياء اقرب للواقع ، وابسط من ذلك لو انه يقوم بقراءة القيمة من المستخدم ليرسلها لك مباشرة ، وفي وجود مستخدم - غلس - فإن مثل هذه المدخلات تعد أمراً طبيعياً .

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

C#:
كود :
class person
{
private int Age;
public string SetAge(int x)
{
if(x>100 || x<1)
  return "you can't edit age like that";

Age=x;
return "done";

}
public int GetAge()
{
return Age;
}
}

VB.net:
كود :
Class person
    Private Age As Integer

    Public Function SetAge(ByVal x As Integer) As String
        If x > 100 OrElse x < 1 Then
            Return "you can't edit age like that"
        End If

        Age = x
        Return "done"

    End Function

    Public Function GetAge() As Integer
        Return Age
    End Function
End Class

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

C#:
كود :
public string SetAge(int Age)
{
if(Age>100 || Age<1)
  return "you can't edit age like that";

this.Age=Age;
return "done";

}

VB.net :
كود :
Public Function SetAge(ByVal Age As Integer) As String
    If Age > 100 OrElse Age < 1 Then
        Return "you can't edit age like that"
    End If

    Me.Age = Age
    Return "done"

End Function

وذلك حسبما تعلمنا من خصائص this أو Me في الدرس السابق ...

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

تنبيه أخير ، الدالة GetAge يطلق عليها اسم Accessor أما الدالة SetAge فتسمى باسم Mutator .
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
الدرس التاسع عشر : ال Encapsulation - بواسطة oneyemenweb2_mybb_import4801 - 11-10-12, 11:51 PM


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


يقوم بقرائة الموضوع: