- tarik
- عدد المساهمات : 134
تاريخ التسجيل : 08/10/2012
مدخل الى الفئات..الجزء الثاني
الخميس أكتوبر 18, 2012 1:35 pm
وقد ذكرنا أن الفئات تحتوي أربعة أجزاء وهي:
الحقول(Fields)
الطرق(Methods)
الخصائص(properties)
الأحداث(Events)
وتحدثنا عن الحقول والطرق واليوم ان شاء الله سنبدأ بالخصائص...
الخصائص Properties
بطبيعة الحال فإن أي كائن يمتلك سمات وخصائص وهذا هو المبدأ الذي تطبقه البرمجة الكائنية OOP .
الأمر بسيط لكن يحتاج قليل من التركيز.
الآن يمكنك البدء بصنع خاصية باستخدام الكلمة المحجوزة Property وننهيها ب End Property
مثال:
اذن يمكن القول بان الخاصية عبارة عن مدمج ما بين الحقل و الطريقة.
لكن الخاصية تحتاج الى ضبط قيمة كما نحتاج ايضا الى قراءة الخاصية.
يمكن ذلك باستخدام الكلمتين المحجوزتين Get و Set
أولا: الدالةGet:
تستخدم هذه الدالة لتزويدنا بقيمة الخاصية الحالية. لكن علينا مسبقا تعريف متغير جديد من نوع الخاصية ليحمل القيمة وقت استرجاعها او ضبطها
مثال:
لكن كيف يمكننا الحصول على قيمة الخاصية ..
سهل جدا:
انظر المثال التالي:
ثانيا:الاجراء Set
الآن بعد أن عرفنا كيف نقوم بالاستعلام فايضا قد يلزمنا اجراء لاسناد قيمة للخاصية
يتم ذلك عن طريق الاجراء Set
مثال:
تقوم هذه الطريقة بستقبال الوسيط الذي نرسله بنفس نوع الخاصية وسميت افتراضيا بValue ويمكنك تغيير المسمى فلا فرق وداخل هذا الاجراء قمنا باسناد قيمة الوسيط المرسل الى المتغير m_Name حتى عند الاستعلام يرجع لنا بنفس القيمة التي مررناها له
هذا المثال يوضح كلا من Get وSet
المثال:
عند استخدام هذه التعليمة
بينما استخدام هذه التعليمة
ايضا ماذا ان اردنا جعل الخاصية محمية من القراءة فقط نريدها للكتابة .....يمكنك باستخدام الكلمة المحجوزة WriteOnly وبالتالي فان وجود الدالة Get يسبب خطأ كما ان عملية الاستعلام عن قيمة الخاصية ايضا يسبب خطأ
مثال:
وهذا يفيد في منع الحصول على معلومات سرية مثلا ككلمة المرور..
الآن هل يمكن ارسال اكثر من وسيط للخاصية...لا مشكلة
مثال:
وأضفنا وسيط للخاصية باسم Index ليعمل عمل فهرس للاسمين الاول والثاني وعند عملية الاسناد في Set ترى ان القيم المسندة تكون على شكل مصفوفة
الآن:
وقمنا بصنع عداد لربط قيمتين الخاصية وقمنا بعرض ناتج الربط والذي يحمله المتغير FullName في رسالة
___________________________
مداخلة: "&" عملية تقوم بربط النصوص. أما "&=" تقوم بربط ما قبل = بما بعدها
أي أن:
كود:
x += y
تعادل
كود:
x = x + y
___________________________
ملاحظتان:
يمكن استخدام مبدأ إعادة التعريف OverLoading مع الخصائص
يمكن استخدام الخصائص في الوحدات البرمجية Modules والتركيبات Structures
الخصائص الافتراضية:
هي الخصائص التي تمثل الفئة بشكل افتراضي ويمكنك جعل خاصية افتراضية باستخدام الكلمة المحجوزة Defualt
مثال:
يمكنك ملاحظة هذا الشيء في فيجوال بيسك 6
فالتعليمتان التاليتان لهما نفس الوظيفة
الأحداث Events
بالنسبة لموضوع الاحداث فضلت عدم الحديث عنها في هذا الموضوع -ليس لضعف او عجز في موضوعها لكن لعدم مناسبة الموضوع للمبتدئين- لكن بالتأكيد سنتطرق لهذا الموضوع في دورتنا في الجانب العملي حيث تلزمنا وسنفصل فيها وقتها قدر الامكان ان شاء الله وسنربطها ربطا مباشرا مع فصلنا هذا وسترونها موضوعا سهلا وبسيطا ان شاء الله
الحقول(Fields)
الطرق(Methods)
الخصائص(properties)
الأحداث(Events)
وتحدثنا عن الحقول والطرق واليوم ان شاء الله سنبدأ بالخصائص...
الخصائص Properties
بطبيعة الحال فإن أي كائن يمتلك سمات وخصائص وهذا هو المبدأ الذي تطبقه البرمجة الكائنية OOP .
الأمر بسيط لكن يحتاج قليل من التركيز.
الآن يمكنك البدء بصنع خاصية باستخدام الكلمة المحجوزة Property وننهيها ب End Property
مثال:
- الكود:
Class Person
Property Name() As String
...
...
...
End Property
End Class
اذن يمكن القول بان الخاصية عبارة عن مدمج ما بين الحقل و الطريقة.
لكن الخاصية تحتاج الى ضبط قيمة كما نحتاج ايضا الى قراءة الخاصية.
يمكن ذلك باستخدام الكلمتين المحجوزتين Get و Set
أولا: الدالةGet:
تستخدم هذه الدالة لتزويدنا بقيمة الخاصية الحالية. لكن علينا مسبقا تعريف متغير جديد من نوع الخاصية ليحمل القيمة وقت استرجاعها او ضبطها
مثال:
- الكود:
Class Person
Dim m_Name As String
Property Name() As String
Get
Return m_Name
End Get
....
....
....
End Property
End Class
لكن كيف يمكننا الحصول على قيمة الخاصية ..
سهل جدا:
انظر المثال التالي:
- الكود:
Class Person
Dim m_Name As String = "Islam Son"
Property Name() As String
Get
Return m_Name
End Get
..
..
..
End Property
End Clas
s
- الكود:
Dim Lo2i As New Person
MsgBox(Lo2i.Name)
ثانيا:الاجراء Set
الآن بعد أن عرفنا كيف نقوم بالاستعلام فايضا قد يلزمنا اجراء لاسناد قيمة للخاصية
يتم ذلك عن طريق الاجراء Set
مثال:
- الكود:
Class Person
Dim m_Name As String = "Islam Son"
Property Name() As String
...
...
...
Set(ByVal value As String)
m_Name = value
End Set
End Property
End Class
تقوم هذه الطريقة بستقبال الوسيط الذي نرسله بنفس نوع الخاصية وسميت افتراضيا بValue ويمكنك تغيير المسمى فلا فرق وداخل هذا الاجراء قمنا باسناد قيمة الوسيط المرسل الى المتغير m_Name حتى عند الاستعلام يرجع لنا بنفس القيمة التي مررناها له
هذا المثال يوضح كلا من Get وSet
المثال:
- الكود:
Class Person
Dim m_Name As String
Property Name() As String
Get
Return m_Name
End Get
Set(ByVal value As String)
m_Name = value
End Set
End Property
End Class
- الكود:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Lo2i As New Person
Lo2i.Name = "Lo2i"
MsgBox(Lo2i.Name)
End Sub
عند استخدام هذه التعليمة
- الكود:
Lo2i.Name = "Lo2i"
بينما استخدام هذه التعليمة
- الكود:
MsgBox(Lo2i.Name)
ايضا ماذا ان اردنا جعل الخاصية محمية من القراءة فقط نريدها للكتابة .....يمكنك باستخدام الكلمة المحجوزة WriteOnly وبالتالي فان وجود الدالة Get يسبب خطأ كما ان عملية الاستعلام عن قيمة الخاصية ايضا يسبب خطأ
مثال:
- الكود:
Class Person
Dim m_Name As String
WriteOnly Property Name() As String
Set(ByVal value As String)
m_Name = value
End Set
End Property
End Class
وهذا يفيد في منع الحصول على معلومات سرية مثلا ككلمة المرور..
الآن هل يمكن ارسال اكثر من وسيط للخاصية...لا مشكلة
مثال:
- الكود:
Class Person
Dim m_Name(1) As String
Property Name(ByVal Index As Integer) As String
Get
Return m_Name(Index)
End Get
Set(ByVal value As String)
m_Name(Index) = value
End Set
End Property
End Class
وأضفنا وسيط للخاصية باسم Index ليعمل عمل فهرس للاسمين الاول والثاني وعند عملية الاسناد في Set ترى ان القيم المسندة تكون على شكل مصفوفة
الآن:
- الكود:
Dim Lo2i As New Person
Dim FullName As String
Lo2i.Name(0) = "Lo2i "
Lo2i.Name(1) = "VB4ARAB"
For i = 0 To 1 Step 1
FullName &= Lo2i.Name(i)
Next
MsgBox(FullName)
وقمنا بصنع عداد لربط قيمتين الخاصية وقمنا بعرض ناتج الربط والذي يحمله المتغير FullName في رسالة
___________________________
مداخلة: "&" عملية تقوم بربط النصوص. أما "&=" تقوم بربط ما قبل = بما بعدها
أي أن:
- الكود:
FullName &= "Mr_MOHAMMED"
- الكود:
FullName = FullName & "Mr_MOHAMMED"
كود:
x += y
تعادل
كود:
x = x + y
___________________________
ملاحظتان:
يمكن استخدام مبدأ إعادة التعريف OverLoading مع الخصائص
يمكن استخدام الخصائص في الوحدات البرمجية Modules والتركيبات Structures
الخصائص الافتراضية:
هي الخصائص التي تمثل الفئة بشكل افتراضي ويمكنك جعل خاصية افتراضية باستخدام الكلمة المحجوزة Defualt
مثال:
- الكود:
Class Person
Dim m_Name(1) As String
Default Property Name(ByVal Index As Integer) As String
Get
Return m_Name(Index)
End Get
Set(ByVal value As String)
m_Name(Index) = value
End Set
End Property
End Class
- الكود:
Dim Lo2i As New Person
Dim FullName As String
Lo2i(0) = "Lo2i "
Lo2i(1) = "VB4ARAB"
For i = 0 To 1 Step 1
FullName &= Lo2i(i)
Next
MsgBox(FullName)
End Sub
يمكنك ملاحظة هذا الشيء في فيجوال بيسك 6
فالتعليمتان التاليتان لهما نفس الوظيفة
- الكود:
Text1.Text="Mr_MOHAMMED"
- الكود:
Text1 = "Mr_MOHAMMED"
الأحداث Events
بالنسبة لموضوع الاحداث فضلت عدم الحديث عنها في هذا الموضوع -ليس لضعف او عجز في موضوعها لكن لعدم مناسبة الموضوع للمبتدئين- لكن بالتأكيد سنتطرق لهذا الموضوع في دورتنا في الجانب العملي حيث تلزمنا وسنفصل فيها وقتها قدر الامكان ان شاء الله وسنربطها ربطا مباشرا مع فصلنا هذا وسترونها موضوعا سهلا وبسيطا ان شاء الله
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى