سلسلة C# و البرمجة الغرضية التوجه - 1
سلسلة C# و البرمجة الغرضية التوجه
هذه السلسلة لا تبدأ من الصفر إلى النهاية لتعلمك البرمجة غرضية التوجه مع C# بل هي تسليط للضوء على بعض النقاط للتعامل مع OOP في C# , اذا كنت مبتدأاً او لا تعلم شيئا عن مبادئ البرمجة غرضية التوجه او C# فلا انصحك بمتابعة هذه السلسلة , يمكنك ان تبحث عن مقالات على الانترنت او في الكتب تشرح لك مفاهيم OOP .
ملاحظة : اية سلسلة اطرحها او طرحتها لا اعني بها اني ملتزم بأن أكمل حتى النهاية او اتابع بها بشكل دوري فللحياة مشاغلها لذا اعذروني.
بسم الله الرحمن الرحيم
ماذا ستتعلم من هذا الدرس :
سيكون هذا الدرس شرحا لبعض ميزات لغة C Sharp و التي ستستخدمها عندما تريد الاستفادة من خصائص البرمجة غرضية التوجه (Object Oriented Programming (OOP)) و تحديدا انا اقصد الوراثة Inheritance.
هذا الدرس مطبق على :
- Microsoft Visual Studio .NET 2005
- Windows XP Professional SP2
مقدمة :
لغة البرمجة C# من اللغات الحديثة و قد بنيت هذه اللغة منذ الصفر لتستفيد من خصائص البرمجة غرضية التوجه , حاولت C# ان تضيف و تجمع في تعريفها للـOOP معظم الميزات المتاحة في اللغات غرضية التوجه ( و حتى بعض الميزات الموجودة في لغات ليست غرضية التوجه مثل Visual Basic ) و بالمقابل تخلت عن بعض امور الـ OOP التي تسبب تعقيدا للمبرمج او انها تستخدم نادرا( مثل الوراثة المتعددة حيث تسمح C++ للصنف Class بأن يرث من أكثر من صنف Class بينما في C# لا يمكن للصنف Class ان يرث سوى من صنف Class واحد )
في هذا الدرس سنتحدث عن الطرائق الافتراضية (Virtual Methods) و إخفاء الطرائق (Hiding Methods) في C# . (اقصد بالطريقة Method هي إما إجرائية Procedure او دالة Function )
الشرح:
الطرائق الافتراضية Virtual Methods :
عندما تستخدم الوراثة (Inheritance) فإنه على الأغلب سيكون لديك صنف أب (Base Class)
و صنف ابنDerived Class) ) و سيكون لديك على الأغلب دالة او إجرائية في الصنف الاب
و ترغب بأن تعطي هذه الدالة وظيفة أخرى في الصنف الابن مع الحفاظ مع اسمها , هنا يأتي دور الكلمة المحجوزة virtual استخدام هذه الكلمة المحجوزة مع اية طريقة Method في الصنف الاب يتيح لنا ان نتخطى Override هذه الدالة و نستخدمها بوظائفية ثانية في الصنف الابن لكنك مضطر هنا ان تستخدم الكلمة المحجوزة override قبل اسم الدالة في الصنف الابن
مثال على ذلك :
class MyBaseClass
{
public virtual string VirtualMethod()
{
return “This method is virtual and defiend in MyBaseClass”;
}
}
class MyDrivedClass : MyBaseClass
{
public override string VirtualMethod()
{
return “This method is an override and defiend in MyDrivedClass”;
}
}
في المثال السابق أنشأنا صنفا أب هو MyBaseClass و عرفنا فيه الدالة VirtualMethod و وضعنا الكلمة المحجوزة virtual في تعريف الدالة لنتمكن من تخطيها في الصنف الابن
ثم أنشأنا الصنف الابن MyDrivedClass الذي يرث من الصنف MyBaseClass
و عرفنا فيه الدالة VirtualMethod و وضعنا في تعريفها الكلمة المحجوزة override لنقوم بتخطيها و تعديل عملها في الصنف الابن
و بالتالي اصبح لدينا صنفين احدهما أب و الاخر ابن و فيهما دالتان متطابقتان من ناحية التعريف لكنهما مختلفتان وظيفيا
إخفاء الطرائق Hiding Methods :
إخفاء الطرائق يحدث عندما تعرف دالة في الصنف الاب لكنك لا تضع في تعريفها الكلمة المحجوزة virtual
ثم تقوم بوضع دالة متطابقة من ناحية التعريف مع الدالة السابقة في الصنف الابن لكنها مختلفة معها وظائفيا كما في المثال التالي:
class MyBaseClass
{
public string HidenMethod()
{
return “This method is an Hiden and defiend in MyBaseClass”;
}
}
class MyDrivedClass : MyBaseClass
{
public string HidenMethod()
{
return “This method is an Hiden and defiend in MyDrivedClass”;
}
}
حسنا ستعمل معك الشيفرة السابقة لكن من الافضل ان تستخدم الطرائق الافتراضية و تقوم بـ override
كما أن القيام بإخفاء الطرائق قد يؤدي إلى حصول أخطاء في استدعاء الدالة المناسبة لذا يظهر لك مترجم الـ C# رسالة تنبيه عند تنفيذ برنامجك تنبهك إلى ان قيامك بذلك ستسبب بعملية إخفاء للدالة
Tags: C#, Hiding Methods, Inheritance, OOP, Virtual Methods
October 20th, 2007 at 11:20 am
مقالة سهلة الهضم أخي تمام
.. في إنتظار باقي السلسلة

تقبل خالص شكري وتقديري ..
ومبروك على المدونة الجديدة ولو إنها متأخرة شوية
October 20th, 2007 at 11:43 am
[…] (الشافية) .. من طبيب .. لمن يفكر في نظام تشغيل أفضل .. سلسلة دروس في لغة الـ #C والبرمجة غرضية التوجه .. Ubuntu 7.10 مميزات الإصدارة الجديدة .. بالعربية […]