تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الفصل(12): Oop بالتفصيل...الجزء الثاني
#1
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

نبدا من حيث انتهينا من الفصل السابق
يجب قراءة الفصل السابق لتتمكن من الاستمرار في هذا الفصل
الفصل 11

وهذا الفصل ايضا كتب بقلم الاستاذ احمد نجم


وراثة الواجهاتInterface Inheritance

تحدثنا سالفاً عن اشتقاق او وراثة فئة من أخرى وفيها تورث الفئة المشتقة كافة خصائص ووسائل وأحداث الفئة الأب وكذلك أيضاً وراثة الكود المكتوب بالداخل كاملاً. يُمكنك Visual Basic .NET من تعريف أو التصريح عن الواجهات ، والواجهة ما هي إلا واجهة لفئة ما واسمها خير دليل على هذا وهي لا تحتوي على أية أكواد للتنفيذ. بعد تصريحك عن واجهة جديدة يمكنك استخدام الكلمة [FONT=&amp]Implements[/FONT][FONT=&amp]<InterfaceName>[/FONT] وذلك كي تشتق أو تستدعي كافة الوسائل والخصائص والأحداث التي تم التصريح عنها داخل الواجهة.

كي تتضح لديك الرؤية أكثر من ذلك ، اتبع ما يلي ... قم بالتصريح عن هذين المتغيرين كما هو موضح أدناه :
كود :
[align=left]Dim CN1 As New System.Data.OleDb.OleDbConnection
[/align]


العجيب في هذين التصريحين أنك إذا نظرت في الوسائل والخصائص المصاحبة للكائن [FONT=&amp]CN1[/FONT] ستجدها بنفس الترتيب ونفس الهجاء بالنسبة للكائن [FONT=&amp]CN2[/FONT] ، ولكن مع اختلاف الوظيفة ... يعني مثلا الوظيفة [FONT=&amp]Open[/FONT] فهي مصاحبة لكلا الكائنين ولكنها مع [FONT=&amp]CN1[/FONT] تتصل بأي قاعدة بيانات حسب جملة الاتصال الممررة إليها [FONT=&amp]Connection[/FONT][FONT=&amp]String[/FONT] ، أما مع الكائن [FONT=&amp]CN2[/FONT] فهي لا تتعامل إلا مع محركات قواعد بيانات [FONT=&amp]MS[/FONT][FONT=&amp]SQL[/FONT][FONT=&amp]Server[/FONT] فقط بالرغم من أن اسم الوظيفة واحد في كلا الكائنين ... هنا يتضح معنى الواجهات.
سأوضح لك مرة أخرى وبمثال آخر .. بفرض أنك مدير مشروع برمجي معين وليكن هذا المشروع خاص بصناعة مكتبة DLL للتعامل مع ملفات MS OFFICE ، وقد قررت كمدير مشروع أن تقوم بعمل أربعة فئات [FONT=&amp]4[/FONT][FONT=&amp]Classes[/FONT] ، الأولى منهم لـ MS Word والثانية لـ MS Access والثالثة لـ MS PowerPoint والرابعة لـ MS Excel ، وتم الاتفاق على عدة وظائف مثلا كالآتي :
  • [FONT=&amp]Method [/FONT][FONT=&amp]>> [/FONT][FONT=&amp]OpenFile[/FONT]
  • [FONT=&amp]Method [/FONT][FONT=&amp]>> [/FONT][FONT=&amp]DeleteFile[/FONT]
  • [FONT=&amp]Property >> FileName[/FONT]
  • [FONT=&amp]Method [/FONT][FONT=&amp]>> FileSize[/FONT]

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





من القائمة Project اختر العنصر Add Component ثم اختر العنصر Interface كما هو موضح بالصورة أدناه :

قد قمت بالتصريح عن الوسائل والخصائص السالف ذكرها في الواجهة كما يلي ... ولا زلت أكرر أننا لا نكتب أية أكواد داخل الواجهة ، فقط نقوم بالتعريف والتصريح عن مكونات الفئة كما يلي :


كود :
[align=left]Public Interface MyInterface
'This subroutine to open the file by using [FileName] property value  
    Sub OpenFile()
    'Use this property to specify file path or read the file path to open it or delete it
    Property FileName() As String
    'This subroutine to delete the file by using [FileName] property value
    Sub DeleteFile()
    'This function used to return the file size by using [FileName] property value

    Function FileSize() As Double
End Interface[b][FONT=Tahoma]
[/FONT][/b][/align]




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

كود :
[align=left]Implements MyInterface[b][FONT=Tahoma]
[/FONT][/b][/align]



ستجد نفسك في الفئة مثلا الخاصة بالـ MS Excel قد حصلت على النتيجة التالية كوراثة حقيقية لما تم التصريح عنه في الواجهة [FONT=&amp]MyInterface[/FONT]:

كود :
[align=left]Public Class Excel  
Implements MyInterface    
     Public Sub DeleteFile() Implements MyInterface.DeleteFile    
End Sub
     Public Property FileName() As String Implements MyInterface.FileName
         Get
        End Get

        Set(ByVal value As String)
        End Set
End Property
    Public Function FileSize() As Double Implements MyInterface.FileSize
    End Function
    Public Sub OpenFile() Implements MyInterface.OpenFile
    End Sub
  End Class
[/align]



هذه هي بالفعل شكل الفئة بعد وراثة الواجهة وما عليك إلا توزيع الهيكل العام لهذه المكتبة DLL على المطورين في المشروع وهم يقوموا بكتابة الكود فقط داخل الوسائل والخصائص والأحداث المصرح عنها ... يمكنك تحميل المشروع من الرابط التالي :
http://www.4shared.com/rar/8gCjzUtj/21250864124.html

أو من المرفقات بإسم : مرفق 1

** ملحوظة **
كما ذكرنا سابقاً أن Visual Basic .NET لا يسمح لك بالوراثة من أكثر من فئة ، ولكن داخل الفئة الواحدة يمكنك وراثة أكثر من واجهة.

كلمة أخيرة في مبدأ الوراثة .. الكلمات المفتاحية
[FONT=&amp]Access Modifiers[/FONT]
  • [FONT=&amp]Public[/FONT]: يجعل المتغير أو الوسيلة معرفة على مستوى الفئة ككل وكذلك على مستوى المشروع بالكامل ، كما يمكنك الحصول على هذا المتغير أو هذه الوسيلة إذا قمت بأخذ نسخة Instance من الفئة في أي مكان آخر على اختلاف نوع المشاريع سواء ******sApplications أو ClassLibrary ... الخ. كما أن هذا المتغير أو الوسية من النوع [FONT=&amp]Public[/FONT] تظهر في حالات الوارثة في الفئات المشتقة.
  • [FONT=&amp]Friend[/FONT]: يجعل الإجراء معرف على مستوى الفئة ككل وداخل المشروع الحالي بصفة عامة ، لكن اذا تم دمج الفئة في ملف DLL وأخذ نسخة لكائن من الفئة فإن الاجراءات من هذا النوع لا تظهر.
  • [FONT=&amp]Default[/FONT]: وهنا نحن بصدد الحديث عن عدم استخدام الكلمات المفتاحية والتي يعتبرها المترجم من أنها من النوع [FONT=&amp]Public[/FONT] وينطبق عليها ما ورد سابقاً.
  • [FONT=&amp]Private[/FONT]: يجعل الإجراء معرف على مستوى على الفئة فقط ، ولا يظهر في أي مكان خارجها.
  • [FONT=&amp]Protected[/FONT]: يشبه الـ [FONT=&amp]Private[/FONT] تماماً ولكن يختلف عنه في نقطة ، ألا وهي أنه في حالة التوريث فإن الفئة المشتقة [FONT=&amp]Derived[/FONT][FONT=&amp]Class[/FONT] يظهر بداخله الإجراءات والمتغيرات من النوع [FONT=&amp]Protected[/FONT] ، ولكن إذا أخذت نسخة من الفئة الأب [FONT=&amp]****[/FONT][FONT=&amp]Class[/FONT] أو ما يسمى بالـ [FONT=&amp]Parent[/FONT][FONT=&amp]Class[/FONT] فلن تظهر المتغيرات ولا الإجراءات من النوع [FONT=&amp]Protected[/FONT].



يمكنك مراجعة المثال التالي ، فهو عبارة عن فئة بالاسم ( MyClass ) وبها بعض الإجراءات باختلاف الكلمات المفتاحية لكل منها:
http://www.4shared.com/rar/pmYpsxLx/31250864124.html

أو من المرفقات بإسم : مرفق 2




الملفات المرفقة
.rar   مرفق 1.rar (الحجم : 55.41 ك ب / التحميلات : 48)
.rar   مرفق 2.rar (الحجم : 10.8 ك ب / التحميلات : 48)
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
الفصل(12): Oop بالتفصيل...الجزء الثاني - بواسطة B3dak Hbebe_mybb_import4575 - 23-09-12, 05:09 PM

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

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


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