تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الفصل(10):مدخل الى الفئات..الجزء الثاني
#1
السلام عليكم ورحمة الله وبركاته
بسم الله الرحمن الرحيم
في هذا الفصل نكمل ما قد من حيث انتهينا في الفصل السابق:
[h=3]الفصل(9):مدخل الى الفئاتClasses - الجزء الأول[/h]
وقد ذكرنا أن الفئات تحتوي أربعة أجزاء وهي:

  1. [*=center]الحقول(Fields)
    [*=center]الطرق(Methods)
    [*=center]الخصائص(properties)
    [*=center]الأحداث(Events)
وتحدثنا عن الحقول والطرق واليوم ان شاء الله سنبدأ بالخصائص...

الخصائص Properties
بطبيعة الحال فإن أي كائن يمتلك سمات وخصائص وهذا هو المبدأ الذي تطبقه البرمجة الكائنية OOP .
الأمر بسيط لكن يحتاج قليل من التركيز.
الآن يمكنك البدء بصنع خاصية باستخدام الكلمة المحجوزة Property وننهيها ب End Property
مثال:
كود :
[align=left]Class Person

Property ****() As String
...
...
...
End Property

End Class
[/align]
الآن داخل الفئة أضفنا الخاصية **** لكن قد تلاحظ أنها تأخذ شكل الطريقة Method كما أنها تأخذ شكل الحقل Field
اذن يمكن القول بان الخاصية عبارة عن مدمج ما بين الحقل و الطريقة.
لكن الخاصية تحتاج الى ضبط قيمة كما نحتاج ايضا الى قراءة الخاصية.
يمكن ذلك باستخدام الكلمتين المحجوزتين Get و Set

أولا: الدالةGet:
تستخدم هذه الدالة لتزويدنا بقيمة الخاصية الحالية. لكن علينا مسبقا تعريف متغير جديد من نوع الخاصية ليحمل القيمة وقت استرجاعها او ضبطها
مثال:
كود :
[align=left]Class Person
Dim m_**** As String
Property ****() As String
Get
Return m_****
End Get

....
....
....
End Property
End Class
[/align]

الآن كما نرى قمنا بصنع خاصية جديدة باسم **** وقبلها عرفنا متغير من نوع الخاصية سنستخدمه في عملية الضبط والاسترجاع لهذه الخاصية ويفضل تسمية هذا المتغير تسمية قريبة من اسم الخاصية ويمكنك ملاحظة ان معظم البرامج تستخدم تسمية المتغير بهذه الطريقة m_**** أي باضافة m_ في بداية المتغير وبعدها كتابة اسم الخاصية ويمكنكم ملاحظة أن الدالةGet تحتاج ناتج والذي ارجعناه بواسطة الكلمة المحجوزة Return والتي شرحناها في فصل الاجراءات والدوال

لكن كيف يمكننا الحصول على قيمة الخاصية ..
سهل جدا:
انظر المثال التالي:
كود :
[align=left]Class Person
Dim m_**** As String = "Islam Son"
Property ****() As String
Get
Return m_****
End Get
..
..
..
End Property
End Class
[/align]
الآن قمنا بصنع نفس الخاصية السابقة واسندنا للمتغير m_**** قيمة افتراضية "Islam Son" والآن داخل اي اجراء استخدم التالي للاستعلام عن القيمة:
كود :
[align=left]Dim Lo2i As New Person
MsgBox(Lo2i.****)
[/align]
انظر الناتج..


ثانيا:الاجراء Set
الآن بعد أن عرفنا كيف نقوم بالاستعلام فايضا قد يلزمنا اجراء لاسناد قيمة للخاصية
يتم ذلك عن طريق الاجراء Set
مثال:
كود :
[align=left]Class Person

Dim m_**** As String = "Islam Son"

Property ****() As String
...
...
...

Set(ByVal value As String)
m_**** = value
End Set

End Property

End Class
[/align]
كما نرى فان الطريقة الخاصة بضبط القيمة هي Set ..كيف تعمل؟؟
تقوم هذه الطريقة بستقبال الوسيط الذي نرسله بنفس نوع الخاصية وسميت افتراضيا بValue ويمكنك تغيير المسمى فلا فرق وداخل هذا الاجراء قمنا باسناد قيمة الوسيط المرسل الى المتغير m_**** حتى عند الاستعلام يرجع لنا بنفس القيمة التي مررناها له
هذا المثال يوضح كلا من Get وSet
المثال:
كود :
[align=left]Class Person
        Dim m_**** As String
        Property ****() As String
            Get
                Return m_****
            End Get

            Set(ByVal value As String)
                m_**** = value
            End Set

        End Property
    End Class
[/align]


كود :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles My****.Load
        Dim Lo2i As New Person
        Lo2i.**** = "Lo2i"
        MsgBox(Lo2i.****)
    End Sub

ويمكنك ملاحظة التالي:
عند استخدام هذه التعليمة
كود :
[align=left]Lo2i.**** = "Lo2i"
[/align]
فان الاجراء المستخدم هو Set لانه يتم اسناد قيمة للخاصية
كود :
[align=left] MsgBox(Lo2i.****)
[/align]
فان الاجراء المستخدم حينها هو Get لانه يتم الاستعلام عن قيمة الخاصية


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

كود :
[align=left] Class Person
Dim m_**** As String
WriteOnly Property ****() As String

Set(ByVal value As String)
m_**** = value
End Set

End Property
End Class

[/align]

وهذا يفيد في منع الحصول على معلومات سرية مثلا ككلمة المرور..


الآن هل يمكن ارسال اكثر من وسيط للخاصية...لا مشكلة
مثال:
كود :
[align=left]Class Person
        Dim m_****(1) As String

        Property ****(ByVal Index As Integer) As String

            Get

                Return m_****(Index)

            End Get

            Set(ByVal value As String)
                m_****(Index) = value
            End Set
        End Property
End Class

[/align]
الآن قمنا بصنع خاصية الاسم وجعلنا المتغير المقترن بها على شكل مصفوفة تحتوي على عنصرين(1+1) على اعتبار الاسم الاول والاخير
وأضفنا وسيط للخاصية باسم Index ليعمل عمل فهرس للاسمين الاول والثاني وعند عملية الاسناد في Set ترى ان القيم المسندة تكون على شكل مصفوفة
الآن:
كود :
[align=left] Dim Lo2i As New Person
Dim Full**** As String

Lo2i.****(0) = "Lo2i "
Lo2i.****(1) = "VB4ARAB"



For i = 0 To 1 Step 1
Full**** &= Lo2i.****(i)
Next

MsgBox(Full****)
[/align]
أعلنا عن Lo2i كPerson وقمنا باسناد القيمة الاولى والثانية للخاصية **** التي تحمل معنى مصفوفة مكونة من عنصرين
وقمنا بصنع عداد لربط قيمتين الخاصية وقمنا بعرض ناتج الربط والذي يحمله المتغير Full**** في رسالة

___________________________
مداخلة: "&" عملية تقوم بربط النصوص. أما "&=" تقوم بربط ما قبل = بما بعدها
أي أن:
كود :
Full**** &= "Mr_MOHAMMED"

تعادل
كود :
Full**** = Full**** & "Mr_MOHAMMED"
ويمكن استخدام هذه الصورة مع باقي العمليات الجبرية ..أي أن:
كود :
x += y



تعادل
كود :
[align=left] x = x + y
[/align]

___________________________

ملاحظتان:
  • [*=center]يمكن استخدام مبدأ إعادة التعريف OverLoading مع الخصائص
    [*=center]يمكن استخدام الخصائص في الوحدات البرمجية Modules والتركيبات Structures
الخصائص الافتراضية:
هي الخصائص التي تمثل الفئة بشكل افتراضي ويمكنك جعل خاصية افتراضية باستخدام الكلمة المحجوزة Defualt
مثال:
كود :
[align=left]Class Person
        Dim m_****(1) As String

        Default Property ****(ByVal Index As Integer) As String

            Get

                Return m_****(Index)

            End Get

            Set(ByVal value As String)
                m_****(Index) = value
            End Set
        End Property
    End Class
[/align]
كود :
[align=left]
Dim Lo2i As New Person
        Dim Full**** As String

        Lo2i(0) = "Lo2i "
        Lo2i(1) = "VB4ARAB"



        For i = 0 To 1 Step 1
            Full**** &= Lo2i(i)
        Next

        MsgBox(Full****)

    End Sub

[/align]
قد تلاحظ أنه لا يتوجب ذكر الخاصية في عملية الاسناد أو الاستعلام لانها كما قلنا تمثل الفئة
يمكنك ملاحظة هذا الشيء في فيجوال بيسك 6
فالتعليمتان التاليتان لهما نفس الوظيفة
كود :
[align=left]****1.****="Mr_MOHAMMED"
[/align]
كود :
[align=left] ****1 = "Mr_MOHAMMED"
[/align]
ومن هذا نستنتج ان الخاصية الافتراضية هي ****


الأحداث Events
بالنسبة لموضوع الاحداث فضلت عدم الحديث عنها في هذا الموضوع -ليس لضعف او عجز في موضوعها لكن لعدم مناسبة الموضوع للمبتدئين- لكن بالتأكيد سنتطرق لهذا الموضوع في دورتنا في الجانب العملي حيث تلزمنا وسنفصل فيها وقتها قدر الامكان ان شاء الله وسنربطها ربطا مباشرا مع فصلنا هذا وسترونها موضوعا سهلا وبسيطا ان شاء الله

مع تحيات
Lo2i و Mohammed Asaad
انتظروا الدرس القادم
الرد }}}
تم الشكر بواسطة:
#2
بارك الله فيكم
على المجهودات الطيبة
الرد }}}
تم الشكر بواسطة:
#3
بارك الله فيك على هذا المجهود الكبير
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الفصل(8): الدوال والاجراءات B3dak Hbebe 3 19,655 15-08-18, 09:20 AM
آخر رد: nagoma
  الفصل(9):مدخل الى الفئاتClasses - الجزء الأول B3dak Hbebe 5 4,326 30-05-17, 01:09 PM
آخر رد: ali hussein
  الفصل(5):صنع القرار...الجزء الأول-الجمل الشرطية Omar Mekkawy 4 4,166 10-08-13, 05:39 PM
آخر رد: Omar Mekkawy
  الفصل(3): التركيبات أنواعها واستخداماتها Omar Mekkawy 4 4,154 10-08-13, 05:32 PM
آخر رد: Omar Mekkawy
  الفصل (1) : الفيجوال بيسك دوت نت (لمحة تعريفية) Omar Mekkawy 2 3,491 27-07-13, 02:39 PM
آخر رد: green.grass52
  الفصل (0) : دورة تعلم معنا فيجوال بيسك دوت نيت Omar Mekkawy 7 4,821 18-07-13, 06:29 PM
آخر رد: el@nsary
  الفصل(16): مدخل لمسارات التنفيذ Threading B3dak Hbebe 3 3,777 27-04-13, 10:58 AM
آخر رد: خليل اسماعيل
  الفصل(15): الفئتان Stack و Queue B3dak Hbebe 2 3,222 27-04-13, 09:20 AM
آخر رد: خليل اسماعيل
  الفصل(12): Oop بالتفصيل...الجزء الثاني B3dak Hbebe 3 3,900 27-04-13, 09:16 AM
آخر رد: خليل اسماعيل
  الفصل (11) :oop بالتفصيل ..الجزء الاول Easy4ever 3 3,568 27-04-13, 09:08 AM
آخر رد: خليل اسماعيل

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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم