اخواني ما الفائدة من كتابة methode في كلاس معين وعدم كتابة اي كود بداخلها ومن ثم نقوم بالوراثة من هذه الــ methode في كلاس ثانية
ما الفائدة من الامر
اخواني ما الفائدة من كتابة methode في كلاس معين وعدم كتابة اي كود بداخلها ومن ثم نقوم بالوراثة من هذه الــ methode في كلاس ثانية
ما الفائدة من الامر
الفائدة هي توحيد واجهة الكود. خذ السيناريو التالي:
لدينا كلاسات تقوم بوصف بقرة و سيارة.
Class Cow
Class Car
لهما صفة موحدة هي اللون
Property Color
و لكن الباقي مختلف جداً لذا لا يمكن أن يكون لهما كلاس أب.
و لدينا كلاس يقوم بعملية تغيير اللون إلى اللون الأسود مثلاً.
Class DoStuff
{
public void ChangeColor(thing)
}ما هو النوع الذي ستأخذه الدالة؟ علماً أنه في المستقبل قد نضيف كلاس طائرة و بناية؟
ما تفعله هو إنشاء interface له abstract property (لنسميه IHasColor) لوصف اللون و جعل الدالة ChangeColor تأخذ objects من نوع IHasColor. و جعل Cow و Car (و أي كلاس مستقبلي) يطبق IHasColor.
الفائدة هي اطفاء نمط عام على مجموعة من الكلاسات ليسهل السيطرة عليها والتعامل معها
مثال :
لدينا كلاسان احدهما للسيارات والاخر للحواسيب
Car.cs
Computer.cs
نعلم ان هنالك اختلاف كبير السيارة والحواسيب من ناحية الخواص والشكل وطريقة العمل ولكن لنفكر ماهي الاشياء المشتركة ؟؟
ولقد خطر في بالي بعد تفكير بسيط :
1- السعر
2- الشركة المصنعة
3- الموديل
حسنا الان لدينا الصفات المشتركة لكن لم نستطيع ان نجعل للسيارة والكومبيوتر كلاس اب لانهما شئ مختلف تماما ولايوجد بينهما ان اصل مشترك
لذلك نقوم بتعريف واجهة مشتركة Interface بينهما ولنسميها IExample
ملاحظة : الــ I في Example مجرد نمط يتبع عند تسمية الواجهات وذلك للدل على انها Interface وهي شي غير الزامي
وسوف يكون الكود كما يلي :
public interface IExample
{
int Price { get; set;}
string Company { get; set;}
string Model { get; set;}
}لاحظ اننا عرفنا فقط اسم الخواص Property ونمطها عملها اي ان قابلة للكتابة والقراءة
وان جميع الخواص هي Public اجباريا
الان لم يبقى سوى عمل Implements اي تطبيق للواجهة في احدى الكلاسات وليكون مثلا Car.cs
public class Car:IExample
{
private string _model;
private string _company;
private int _price;
public int Price
{
get
{ return _price; }
set
{ _price = value; }
}
public string Company
{
get
{ return _company; }
set
{ _company = value; }
}
public string Model
{
get
{ return _model; }
set
{ _model = value; }
}
}الان اصبح الكلاس Car.cs يملك خواص السعر والشركة والموديل ويكون التطبيق
Car mycar=new Car(); mycar.Company="BMW";
ويمكن عمل method تسمح يتمرير الاوبجكتات التي تستعمل الواجهة IExample فقط وتكون كما يلي :
public void useIExample(IExample iex)
{
//some code here :-)
}ارجو ان يكون الشرح مفيدا
طبعا لايمكن فهم هذا الشرح مال يكن لك خلفية عن OOP وال Abstract Members
تحيـــــــــــــــــــــــــــــــــــــــــــاتي
تم تعديل هذه المشاركة بواسطة زيد الرافدين في 13 أكتوبر 2008 في 13:40