اريد معرفة بعض المصطلحات الآتيه ؟
Shadowing
Interfaces and Polymorphism
Delegates
اريد معرفة بعض المصطلحات الآتيه ؟
Shadowing
Interfaces and Polymorphism
Delegates
تم تعديل هذه المشاركة بواسطة eng2002 في 25 أكتوبر 2005 في 12:06
استغفر الله العظيم من كل ذنب وأتوب إليه
السلام عليكم
أولا أريد توضيح أن الـ Polymorphism هو عباره عن مبدأ يحوي عدة مفاهيم ,
مثل الـ Overloading,Overriding و ... , يعني هو ليس شئ محدد , والله أعلم ,
أما الـ Shadowing فيمكن القول انه عملية استبدال ! استبدال لماذا ؟ استبدال لـ Sub موجوده في كلاس ترث من كلاس أخري ,
أنظر المثال :
Public Class Class1
Public Sub eat()
MsgBox("eat")
End Sub
End Classفلو قمنا بعمل كلاس اسمها Class2 ترث من Class1 و أنشأنا Object من Class2 واستخدمنا الـ hello Sub فسيتم تنفيذ الـ hello Sub الخاص بـ Class1 , أنظر الكود :
Public Class Class2 Inherits Class1 End Class
في كود الفورم مثلا :
Dim x As New Class2 x.hello()
أما لو قمنا بعمل Shadowing للـ Sub hello في Class2 واستخدمنا الـ hello Sub في كود الفورم كالآتي :
Public Class Class2
Inherits Class1
Public Shadows Sub hello()
MsgBox("Look the shadowing effect")
End Sub
End ClassDim x As New Class2 x.hello()
فسوف يتم تنفيذ الـ hello Sub الجديد الموجود في Class2 ,
أما بالنسبه للـ Interface فهي حتي الآن تسبب الحيره لي , وقد اقتبست تعريفها من كتاب ميكروسوفت في الـ OOP :
An interface is like an abstract class with all abstract members
وما أعرفه هو أنها تضم تعرف لمحتويات الكلاس التي يتم عمل Implementaion للـ Interface فيها !!! ((غلسه شويه)) , أنظر المثال :
Public Interface Iface Sub eye() Sub nose() End Interface Public Class face Implements Iface Public Sub eye() Implements Iface.eye End Sub Public Sub nose() Implements Iface.nose End Sub End Class
أما بالنسبه للـ Delegates فهي Referece Type مثل المؤشرات في لغة السي , ويتضح استخدامها عند التعامل مع الـ Events ,
حيث أنها تستخدم في عباره AddHandler التي تستخدم لاسناد Event Handler لـ Event , كما يمكنك استخدامها عن طريق الـ AddressOf Operator ,
أنا كان نفسي أوضح أكثر لكن ان اردت بمعلومات أكثر فعليك بالـ MSDN , وان وجدت معلومه جديده فأبقني علي اطلاع ,
أرجو أن تكون قد فهمت كلامي , وأنا تحت أمرك في أي سؤال أستطيع اجابته ,
وأرجو من الأخوه من لديه معلومات أكثر أو توضيح فليتفضل , وجزاكم الله خيرا ,
تم تعديل هذه المشاركة بواسطة hazzoom في 25 أكتوبر 2005 في 21:43
الواجهات مرتبطة بمصطلح تعدد الواجهات حيث يمكن تعريف الواجهه بانها مجموعة من الطرق والاحداث والخاصائص التى تصف فئة معينه وهى تحوى على اسماء الطرق والاحداث فقط ولا تحوى على كود داخل هذه الطرق وهى شبيه بالفئات المجردة والتى من الضرورى وراثتها واعادة قيادة جميع طرقها
ويمكن للفئة الواحدة ان تحتوى على اكثر من واجهه وهو ما يطلق عليه تعدد الواجهات(اسماء متشابها ولكن افعال مختلفة)فستكون جميع اسماء الطرق والاحداث والخهائص واحدة ولكن لكل فئة الافعال الاخاصة التى تقوم بها
VB.NET and C# Comparison
http://www.harding.edu/fmccown/vbnet_csharp_comparison.html
=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

أعزائي
أريد أن اتكلم عن الواجهات Interfaces
فعلى حسب علمي الواجهات تضم إعلانات عن طرق (إجراءات ) ولا تضم أي تطبيق لها، أما تطبيق هذه الطرق فيتم عبر صف class يطبق هذه الواجهه
أما لماذا وجد هذه الواجهات وما الداعي لها من الأساس فهو على حسب معرفتي تنفيذ الوراثة المتعددة أي أن يرث صف إبن عدة صفوف آباء ، وهذه التقنية كما هو معروف غير موجودة في بيئة دوت نت (vb.net و c#) فاصف الإبن يرث من صف واحد فقط أما الصف الأب فيمكن أن يورث إلى عدة صفوف أبناء ، ولحل هذه المشكلة وجدت الواجهات حيث يمكن أن يطبق الصف الإبن عدة واجهات آباء.
أي عندما تريد لصف أن يرث من عدة آباء ما عليك إلا أن تنشيء عدة واجهات آباء ويقوم الصف الإبن بتطبيق جميع الطرق في الواجهات الآباء.
هذا والله أعلم
اقتباسأعزائيأريد أن اتكلم عن الواجهات Interfaces
فعلى حسب علمي الواجهات تضم إعلانات عن طرق (إجراءات ) ولا تضم أي تطبيق لها، أما تطبيق هذه الطرق فيتم عبر صف class يطبق هذه الواجهه
أما لماذا وجد هذه الواجهات وما الداعي لها من الأساس فهو على حسب معرفتي تنفيذ الوراثة المتعددة أي أن يرث صف إبن عدة صفوف آباء ، وهذه التقنية كما هو معروف غير موجودة في بيئة دوت نت (vb.net و c#) فاصف الإبن يرث من صف واحد فقط أما الصف الأب فيمكن أن يورث إلى عدة صفوف أبناء ، ولحل هذه المشكلة وجدت الواجهات حيث يمكن أن يطبق الصف الإبن عدة واجهات آباء.
أي عندما تريد لصف أن يرث من عدة آباء ما عليك إلا أن تنشيء عدة واجهات آباء ويقوم الصف الإبن بتطبيق جميع الطرق في الواجهات الآباء.
هذا والله أعلم
لا علاقة للواجهات بالوراثة المتعددة
اقتباسويمكن للفئة الواحدة ان تحتوى على اكثر من واجهه وهو ما يطلق عليه تعدد الواجهات(اسماء متشابها ولكن افعال مختلفة)
VB.NET and C# Comparison
http://www.harding.edu/fmccown/vbnet_csharp_comparison.html
=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

أما الـ Polymorphism
فمعناه تعدد الأشكال حيث يمكن أن يأخذ نفس السطر من الكود عدة معاني (وينفذ بطرق مختلفة ) إعتماداً على الغرض الذي ينفذ الكود ويتم تطبيقها عن طريق الـ Overloading,Overriding و ... كما قال الأخ hazzoom أما الـ shadowing فهي تسبب لي أنا أيضاً يعض الإرباك وهنا أريد من الاخ hazzoom أن يوض ما الفرق بين الـ shadowing والـ overriding أقصد أليس هذا المثال الذي طرحته يا أخ hazzoom هو ما يقوم به الـ overriding تماماً أرجو التوضيح
أخ solo لم أقل أن الواجهات تنفذ الوراثة المتعددة فالوراثة تكون بين الصفوف ولكن قلت أن الواجهات تحل مشكلة الوراثة المتعددة من حيث أن صف واحد يمكن أن يطبق أكثر من واجهة
أرجو أن أكون قد وضحت وجهة نظري
اقتباسخ solo لم أقل أن الواجهات تنفذ الوراثة المتعددة فالوراثة تكون بين الصفوف ولكن قلت أن الواجهات تحل مشكلة الوراثة المتعددة من حيث أن صف واحد يمكن أن يطبق أكثر من واجهةأرجو أن أكون قد وضحت وجهة نظري
ايضا من جديد لا علاقه لهذا بذلك
وكمان كلمة صف مغلوطة(فئة,قالب,صنف,تصنيف) هو ما يمكن ترجمة كلمة class اليه
وبالنسبة للتظليل فيتم اللجوء اليه فى حاله عدم القدرة على اعادة قيادة الطرق الموجوده فى الفئة القاعدية التى ترث منها ويحدث هذا عندما تكون هذه الفئة ليست من تاليفك موجودة فى ملف dll مثلا يعى معندكش السورس
تم تعديل هذه المشاركة بواسطة SOLO.NET في 25 أكتوبر 2005 في 22:50
VB.NET and C# Comparison
http://www.harding.edu/fmccown/vbnet_csharp_comparison.html
=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

بل له كل العلاقة أخ solo.net مش مقتنع راجع مراجع بيئة الـ .net
وإلا أعطني سبب مقنع لوجود مثل هذه الواجهات ، مجرد إعلانات عن طرق وأحداث وخصائص بدون أي تطبيق للكود
ما الفائدة ...........
ممكن تعطينى رابط يؤيد كلامك من ميكروسوفت؟؟
الواجهات معموله لتطبيق مبداْ تعدد الواجهات(اسماء متشابها ولكن افعال مختلفة)
تم تعديل هذه المشاركة بواسطة SOLO.NET في 25 أكتوبر 2005 في 22:55
VB.NET and C# Comparison
http://www.harding.edu/fmccown/vbnet_csharp_comparison.html
=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

ok
ممكن تمهلني لجلسة قادمة لأنو الروابط مش موجودة عندي حالياً
وعلى كل راح أدخل على MSDN وأحاول أجيبلك الرابط الآن
وشكراً على ملحوظة التظليل كانت مفيدة جداً
كلام الأخ هارون صحيح وللتأكد أنظر الكتاب ده :
Ms Press - OOP with Microsoft Visual Basic .NET and Microsoft Visual C# Step
الفصل التاسع - صفحة 225 :
Two Other Uses of Interfaces In programming with the .NET Framework, you’ll implement interfaces primarily to provide services from your class. You might, in addition, use an interface for a project in the following two situations. Multiple inheritance Classes created in Visual Basic and Visual C# can have only one base class, but they can implement multiple interfaces. Because interfaces behave polymorphically, like base classes, you can use interfaces to simulate multiple inheritance
تم تعديل هذه المشاركة بواسطة hazzoom في 25 أكتوبر 2005 في 23:00
شكراً أخ hazzoom
أرحتني من عناء البحث في msdn فقد دخلت فعلاً إليها وبدأت أبحث
على كل حال سأتابع البحث للتوضيح أكثر والآن أرجو أن تكون وجهة نظري واضحة وأن تكون الفائدة قد عمت
أخي الكريم Solo.Net ...
إن الواجهات وجدت حصرياً لحل مشكلة الوراثة المتعددة .... و هي طورت لتأخذ مكاناً أكبر من الوراثة المتعددة لكن هذا لا يتعارض مع سبب وجودها ...
فصحيح أن الواجهة هي تصميم بسيط لـ Abstract Class و لكن لو كان الأمر يقف عند هذا لكانت C# أو VB.Net أو Java سمحت بالوراثة من أكثر من صنف Abstract و إنتهى الأمر ... و لكن الأمر بدأ من Java ... حيث كانت المشكلة المعهودة المتمثلة في أنه عند الوراثة من صنفين يحتويان على طريقة بنفس الإسم ... فعند إستدعائها من ستستدعى ؟؟؟
لذلك وجدت الواجهات التي أجبرت المبرمج على إعادة كتابة الكود البرمجي ضمن الـ Class و بالتالي فالطريقة الموجودة في الـ Class الإبن هي التي ستستدعى مهما كان عدد الواجهات المستخدمة ... وهذا هو الحل الذي وضعته Java و تبعتها في ذلك Microsoft ...
هذه أحد صفحات msdn المتعلقة بهذا الموضوع
والتي تشرح متى يكون استخدام الـ interfaces أفضل من استخدام الوراثة
وهذا النص كاملاً
اقتباسInterfaces are a powerful programming tool because they allow you to separate the definition of objects from their implementation, allowing your objects to evolve without risk of breaking existing applications. Both interfaces and class inheritance each have advantages and disadvantages, and you may end up using a combination of both in your projects. This topic and When to Use Inheritance will help you determine which approach is best for your situation.Safe Changes to Code
Interfaces eliminate a significant problem of class inheritance: the likelihood of breaking code when you make post-implementation changes to your design. Even though class inheritance allows your classes to inherit implementation from a base class, it also forces you to make most of your design decisions when the class is first published. If your original assumptions turn out to be incorrect, you cannot always change your code safely in later versions.
For instance, suppose you define a method of a base class that expects an Integer argument, and then later determine that the argument should be of the Long data type. You cannot safely change the original class, because applications designed for classes derived from the original may not compile correctly. This problem can be magnified because a single base class can affect hundreds of subclasses.
One solution is to define a new method that overloads the original and that takes an argument of type Long. However, this might not be satisfactory because a derived class may need to override the method that takes the integer, and may not function properly if the method that takes a Long is not overridden also. Interfaces solve this problem by allowing you to publish an updated interface that accepts the new data type.
Flexibility in Implementation
There are several other reasons why you might want to use interfaces instead of class inheritance:
Interfaces are better suited to situations in which your applications require many possibly unrelated object types to provide certain functionality.
Interfaces are more flexible than base classes because you can define a single implementation that can implement multiple interfaces.
Interfaces are better in situations in which you do not need to inherit implementation from a base class.
Interfaces are useful in cases where you cannot use class inheritance. For example, structures cannot inherit from classes, but they can implement interfaces.
لاحظ
Interfaces are more flexible than base classes because you can define a single implementation that can implement multiple interfaces
وشكراً
حقيقة حوار جميل و رائع بين الأعضاء يظهر مدى حماس الاخوة و لا أجد ما أضيف حقيقة سوى ان اقول لكم ما شاء الله و أتمنى ان تكون حواراتنا دائما هكذا مبنية على أدلة و تكون عقولنا منفتحة للرأي و الرأي الآخر و هذه هي الطريقة الوحيدة التي ستمكننا من الوصول الى كل ما هو جديد في هذا المجال
و السلام عليكم
والله الموضوع اتشرف بوجودك فيه يا أخ أيوب ,,,
السلام عليكم
لا اريد ان ابدو متعصبا هنا وقد اتيتم ببعض الادله
ولكن الواجهات موجودة حتى فى vb6 فى حين انه لا توجد وراثه من اصله فى vb6
فهل هى هناك لمحاكاة الوراثة المتعددة اكيد لا لانه لاتوجد وراثة اساسا طيب هل هى لمحاكاة الوراثة المفردة برضك لا اللى عنده تفسير يقوله؟
وما قمت بجلبه من msdn لا يؤيد بصريح العبارة كلامك
وما عرضه الاخ حزووم اعتبره وجه نظر للكاتب ولكل وجه نظره
:rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:
حقيقة كان موضوع شيق جدا للحوار وقد استفدت منه كثير
تم تعديل هذه المشاركة بواسطة SOLO.NET في 26 أكتوبر 2005 في 02:45
VB.NET and C# Comparison
http://www.harding.edu/fmccown/vbnet_csharp_comparison.html
=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

أخي الكريم SOLO ..
شكراً لتفهمك الرائع لآراء الآخرين و أتمنى أن نتحلى جميعاً بنفس الشيء ...
أنت تحدثت عن الواجهات الموجودة في vb6 ... سأقول لك أن الواجهات موجودة أيضاً في دلفي ... و لكنها لا تدخل ضمن الـ Class HIERARCHY لأنه ليس هناك Class Hierarchy في vb6 أو Delphi ... فالأصناف ليست كلها مشتقة من بعضها ... بينما المفهوم يختلف في جميع لغات OOP الصرفة كجافا و C# و VB.Net حيث أن جميع الأصناف الموجودة في تلك اللغة موروثة من بعضها وفق تسلسل هرمي رائع و قوي ..
لذلك فإنه ليس من المعقول أن يرث الصنف من صنف واحد آخر فقط ... لأن ذلك سيؤثر على ترابط هذه البنية الهرمية بحيث لن تكون كما هي الآن ... و بنفس الوقت لا نريد أن نلجأ إلى الوراثة المتعددة ... فما الحل ؟؟؟!!
كان الحل في تطوير المفهوم السابق للواجهات و إعطائه دوراً أكبر في عملية في بناء أصناف اللغة ... و هذا ما بدأت به Java ... حيث ترى أن البنية الهرمية للغة تعتمد على الواجهات بشكل مساوٍ تقريباً لإعتمادها على الأصناف العادية .... و هذا ما فعلته أيضاً Microsoft .. التي طورت مفهوم الواجهات أكثر فضمنته إمكانية إحتواء الـ Property و الـ Indexers و هذه بحد ذاتها ميزة عظيمة.
الملاحظة الأخيرة بالنسبة لقولك أن الوراثة كانت غير موجودة في vb6 فأريد القول هنا أن الواجهات بحد ذاتها قابلة للوراثة ... و يمكننا وراثة الواجهات من بعضها ... و بالتالي فإن هذا دليل قاطع على الإختلاف الكلي بين مفهوم الواجهات في اللغات القديمة و لغات البرمجة غرضية التوجه.
اقتباسوما قمت بجلبه من msdn لا يؤيد بصريح العبارة كلامكوما عرضه الاخ حزووم اعتبره وجه نظر للكاتب ولكل وجه نظره
لا يا أخ عبد الخالق , أنا لست معك , فالشرح في الكتاب لا يعد وجهة نظر ,
كما اني لا أقول أن الـ Interfaces تقوم بعمل Multiple Inheritance , ولكن علي الأقل حلت هذه المشكله ,
وليه العذاب , كانوا جعلوا الـ Multiple Inheritance متاح وريحونا وريحوا دماغهم :lol:
تم تعديل هذه المشاركة بواسطة hazzoom في 26 أكتوبر 2005 في 05:13
اقتباسكما اني لا أقول أن الـ Interfaces تقوم بعمل Multiple Inheritance , ولكن علي الأقل حلت هذه المشكله
فى هذه انا معك
اقتباسأنت تحدثت عن الواجهات الموجودة في vb6 ... سأقول لك أن الواجهات موجودة أيضاً في دلفي ... و لكنها لا تدخل ضمن الـ Class HIERARCHY لأنه ليس هناك Class Hierarchy في vb6 أو Delphi
Class HIERARCHY موجودة فى دلفى
لغة دلفى تعتبر لغة oop صرفة فقط لا يوجد فيها الوراثة المتعدده وهى حكرا على c++
ومشكور على المعلومات
VB.NET and C# Comparison
http://www.harding.edu/fmccown/vbnet_csharp_comparison.html
=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

اقتباسQUOTE
كما اني لا أقول أن الـ Interfaces تقوم بعمل Multiple Inheritance , ولكن علي الأقل حلت هذه المشكله
فى هذه انا معك
هذا الموضوع مغلق.