وراثت در شی گرایی

یکشنبه 3 آبان 1394

در مقاله قبل از Encapsulation و Abstraction صحبت کردیم و تفاوت های آنها را بررسی کردیم . در این مقاله دیگر خاصیت های OOP (شی گرایی) در #C که Inheritance و Polymorphism می باشند را بررسی میکنیم.

وراثت در شی گرایی

در مقاله قبل از Encapsulation و Abstraction صحبت کردیم و تفاوت های آنها را بررسی کردیم . در این مقاله دیگر خاصیت های OOP در #C که Inheritance و Polymorphism می باشند را بررسی میکنیم.

همانطور که می دانید OOP  چها ر خاصیت دارد :

1. Abstraction  یا انتزاع

2. Encapsulation یا کپسوله سازی

3.  Inheritance  یا وراثت

4. Polymorphism یا چندریختی

Inheritance  به معنای چیزی یا خاصیتی را از طریق وراثت گرفتن است. برای گرفتن آن به یک ساختار سلسله مراتبی احتیاج داریم که به وسیله OOP  با استفاده از  Inheritance فراهم می شود. در Inheritance  یک کلاس پایه و یک زیر کلاس داریم . کلاس پایه به عنوان کلاس والد، کلاس فوق العاده و ... هم شناخته می شود. و زیر کلاس با عنوان کلاس فرزند هم شناخته می شود. که خاصیت ها و متدهایی که عمومی هستند توسط زیر کلاس قابل دسترسی هستند.

متدها و هر چیزی قابل دسترسی زیر کلاس باشند ، می توانند بدون ساختن شی از کلاس والد توسط زیر کلاس صدا زده شوند.

برای ارث بری یک کلاس از کلاس دیگر ، باید زیر کلاس را به کلاس والد گسترش داد . به صورت زیر :

class ClassSuper
{
    public void MethdoTestPublic()
    {
        Console.WriteLine("ClassTest.MethdoTestPublic");
    }

    private void MethdoTestPrivate()
    {
        Console.WriteLine("ClassTest.MethdoTestPublic");
    }
}
    
class ClassSub : ClassSuper // Inheriting from ClassSuper
{
    public void MethodTest()
    {
        MethdoTestPublic(); // calling the super class method
        MethdoTestPrivate(); // calling the super class private method [Error]
        Console.WriteLine("ClassTest2.MethodTest");
    }
}

در اینجا ClassSub به ClassSuper برای دسترسی به متد و خاصیت های کلاس والد گسترش داده شده است.

انواع Inheritance

1. تک وراثت Single Inheritance

2. چند وراثت  Multiple Inheritance

3. وراثت چند سطحی Multi Level Inheritance

4. وراثت سلسله مراتبی  Hierarchial Inheritance

Single Inheritance

مثال بالا یکی از نمونه های single inheritance  است .

class ClassSuper
{
    // Do your code
}
    
class ClassSub : ClassSuper // Inheriting from ClassSuper
{
    // Do your code
}

Multi Level Inheritance

پیوستن دو یا تعداد بیشتری Single inheritance  است. مانند شکل زیر که  sub class 2 از sub class1  ارث بری میکند و sub class1 از super class  ارث بری میکند.  اگر با دقت نگاه کنید  دو Single inheritance یک والد دارند .

class ClassSuper
{
    // Do your code
}
    
class ClassSub1 : ClassSuper // Inheriting from ClassSuper
{
    // Do your code
}
class ClassSub2 : ClassSub1 // Inheriting from ClassSub2
{
    // Do your code
}

Hierarchial Inheritance

در Hierarcial Ihertanc ما چند زیرکلاس داریم که از یک کلاس والد ارث بری میکنند. در انجا sub class1  و sub class 2 هر دو از  super Class ارث بری میکنند.

class ClassSuper
{
    // Do your code
}
    
class ClassSub1 : ClassSuper // Inheriting from ClassSuper
{
    // Do your code
}
class ClassSub2 : ClassSuper // Inheriting from ClassSuper
{
    // Do your code
} 

Multiple Inheritance

این نوع ارث بری برعکس  Hierarchial  می باشد.در این نوع ، یک زیر کلاس از دو کلاس والد ارث بری می کند. مانند هر زبان شی گرای دیگر ، #C هم از اینگونه ارث بری پشتیبانی نمیکند.

همانطور که گفته شد اینگونه ارث بری با کلاسهای #C ممکن نیست . پس برای انجام آن از interface  کمک می گیریم .

interface ISuper1
{
    // Do your code
}
    
interface ISuper2
{
    // Do your code
}
class ClassSub : ISuper1, ISuper2 // Inheriting from ISuper1 and ISuper2
{
    // Do your code
}

مزایای Inheritance

1. قابلیت استفاده مجدد : استفاده از متدهای کلاس والد عمومی و خواص کلاس والد بدون تعریف یا ایجاد یک شی .

2. توسعه پذیری : گسترش منطق متدهای کلاس والد در زیر کلاسها بدون نوشتن دوباره آن متد.

3. پنهان کردن اطلاعات : کلاس والد می تواند بعضی از داده ها را خصوصی نگه دارد پس آن داده نمی تواند توسط کلاس مشتق شده تغییر داده شود.

4. نادیده گرفتن : متدهای کلاس والد برای استفاده مجدد در یک راه معنادار می توانند توسط متدهای زیر کلاس نادیده گرفته شوند.

در inheritance  هر دوی کلاس های والد و زیر کلاس به هم وابسته هستند . پس اگر تغییری در کلاس والد رخ دهد روی زیر کلاس تاثیر خواهد گذاشت.

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 3k بازدید
  • 3 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید