حسین احمدی
بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

تفاوت Has a و Is a در وراثت چیست؟

یکی از اصول مهم در برنامه نویسی شئ گرا وراثت یا Inheritance است. معمولاً وراثت را با این تعریف می شناسیم: وراثت یا Inheritance اشاره به این قابلیت دارد که یک کلاس می تواند خصوصیات و رفتار های تعریف شده در یک کلاس دیگر را به ارث ببرد. اما در برخی مطالب با دو عبارت Is a و Has a برخورد می کنیم که مربوط به مبحث وراثت هستند. در این مطلب می خواهیم در مورد این دو در وراثت صحبت کنیم.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
سرفصل های این مطلب
  1. مفهوم Is a
  2. مفهوم Has a

مفهوم Is a

فرض کنید کلاسی داریم به نام Person و کلاسی دیگر به نام Teacher که از کلاس Person مشتق شده است:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Teacher : Person
{
    public string Certificate { get; set; }
}

در کد بالا، کلاس Teacher از کلاس Person مشتق شده، یعنی Teacher یک Person آست و اصطلاحا می گویم: Teacher is a person

مفهوم Has a

برای درک این مفهوم، مثالی میزنیم از ماشین و سیستم پخش. کلاسی داریم با نام Car:

public class Car
{
    public string Color { get; set; }
    public string Brand { get; set; }
    public string Model { get; set; }
}

در ادامه می خواهیم به Car یک سیستم پخش اضافه کنیم، کلاسی با نام Player به صورت زیر تعریف می کنیم:

public class Player
{
    public string SupportedMedia { get; set; }
    public string Model { get; set; }

    public void Play()
    {
            
    }

    public void Stop()
    {
            
    }
}

در در ادامه کلاس Car را به صورت زیر تغییر می دهیم:

public class Car
{
    public string Color { get; set; }
    public string Brand { get; set; }
    public string Model { get; set; }

    public Player Player { get; set; }
}

خصوصیت Player که از نوع کلاس Player است به کلاس Car اضافه شده. در حقیقت کلاس Car یک Player دارد و اصطلاحاً می گوییم: Car has a player پس تفاوت Is a با Has a در وراثت را اینگونه مطرح می کنیم: در حالت Is a کلاس ما به صورت مستقیم از یک کلاس دیگر مشتق می شود، اما در حالت Has a، کلاس ما یک کلاس دیگر را در خود جای داده است. امیدوارم که این نکته مورد توجه دوستان قرار گرفته باشد. ITPRO باشید

نویسنده: حسین احمدی

منبع: ITPRO


حسین احمدی
حسین احمدی

بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ...

نظرات