ارث بری در شیء گرایی

در مقاله قبلی به توضیحاتی در مورد مفهوم شیء گرایی و object oriented پرداختیم. در این مقاله می خواهیم با بیان مثال حالت‌های مختلف یک کلاس و متدهای آن مانند (public، private و protected) و به طور کلی مفهوم ارث بری یا وراثت را معرفی کنیم. پس لطفا تا انتهای مقاله همراه ما باشید و نظرات خود را برای ما ارسال کنید.

ارث بری

ارث بری

مفهوم مهم این مقاله، وراثت یا Inheritance نام دارد. برای این که مفهوم اصلی وراثت در برنامه نویسی را متوجه شوید، این تعریف از دانشنامه ویکی پدیا را مطالعه کنید:

وراثت در برنامه‌نویسی شبیه وراثت بیولوژیکی است که در آن فرزندان صفاتی را از والدین به ارث می‌برند. در برنامه نویسی شیء گرا می‌توان با وراثت از کلاس موجود کلاسی را ایجاد کرد که داده‌ها و متدهای کلاس قبلی را به ارث ببرد. برای فرزند یک کلاس می‌توان توابع و متغیرهای جدید تعریف کرد یا توابع مربوط به والد را دوباره‌نویسی (override) نمود.

همان طور که از تعریف بالا مشخص است، وقتی شما یک کلاس دارید (مثلا کلاس B) و می خواهید این کلاس ویژگی های کلاس دیگری مانند A را داشته باشد، به علاوه چند ویژگی و یا متد دیگر، در این صورت می توانید از مفهوم ارث بری استفاده کنید. با این کار دیگر نیازی نیست در کلاس B ویژگی ها و متدهای مشترک با A را بازنویسی کنید. بلکه فقط در تعریف کلاس B اسم کلاس A را نیز با سینتکس زیر می آورید و سپس متد ها و ویژگی های جدید کلاس B را می نویسید.

بیان مثال از کلاس A و B و ارث بری میان این دو

در بیان این مثال وراثت از زبان سی پلاس پلاس استفاده می کنیم. فرض کنید که کلاس A به شکل زیر تعریف شده باشد:

Class A

{

public:

int x,y;

int sum(int int);

}

در این کلاس دو عدد صحیح xو y به صورت public تعریف شده اند. (در ادامه مقاله به توضیح public،privateو protectedمی پردازیم.) و همچنین یک تابع یا متد برای جمع داریم. (در بیان مثال ها از نوشتن بدنه متد ها برای کوتاهی کد صرف نظر کرده ایم)

حال فرض کنید که می خواهیم کلاس مجزای دیگری به اسم B داشته باشیم که از کلاس A ارث بری می کند. این کلاس هم دارای دو عدد صحیح و متد جمع باشد اما متد دیگری برای تفریق نیز در آن وجود داشته باشد. برای این کار این گونه عمل می کنیم:

Class B : public A

{

public:

int sub(int, int);

}

در این مثال شما پس از ساخت یک شیء و از کلاس A فقط می توانید عملیات جمع را انجام دهید. اما اگر شیءای از کلاس B بسازید و از ارث بری و وراثت استفاده کنید، علاوه بر جمع می توانید عملیات تفریق را نیز انجام دهید.

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

A object;

object.x=10;

object.y =5;

object.sum(x,y);

inheritance example
در این تصویر نیز کلاس پایه حیوان داریم که کلاس های دیگر با نام های Cow و Cat و Dog از آن ارث بری می کنند.
public و یا عمومی بودن به چه معناست؟

در مثال بالا به کلاس A کلاس پدر یا پایه می گوییم و به کلاس B کلاس فرزند و یا مشتق شده می گوییم.

در ارث بری هر کدام از اعضا داخل کلاس ها می توانند عضو دسته public یا private و یا protected باشند. اما سوال این جاست که این دسته بندی ها چه مفهومی دارند؟

در این بخش به توضیح مفهوم public می پردازیم.

متد ها و ویژگی هایی که در مفهوم وراثت به عنوان پابلیک معرفی می شوند ( قبل از آن ها عبارت public به همراه : می آید) قابل دسترسی در کلاس های خارجی نیز هستند. اعضای public در کلاس پایه در هر جایی که یک شی از کلاس پایه یا کلاس های مشتق آن وجود دارد قابل دسترسی است.

private چیست؟

اگر شما در وراثت عضوی از کلاس را به عنوان private یا خصوصی تعریف کنید، دیگر در هیچ کلاس دیگری قابل دسترسی و استفاده نیست. این عضو فقط داخل همین کلاس قابل دسترسی و استفاده است و در امن ترین حالت ممکن قرار دارد. به عنوان مثال اگر شما متد sum در کلاس A از نوع خصوصی قرار دهید، دیگر پس از ساخت یک شی از کلاس B به آن دسترسی نخواهید داشت.

protected چیست؟

می توانیم بگوییم protected در ارث بری مفهومی ما بین publicو private است. به این معنی که متدها و اعضای با این ویژگی فقط در همان کلاس و یا کلاس های فرزند آن قابل دسترسی هستند.

keyboard_arrow_up