بررسی مفهوم وراثت در زبان برنامه نویسی جاوا

*بانو بهار*

کاربر نگاه دانلود
کاربر نگاه دانلود
عضویت
2016/08/15
ارسالی ها
3,937
امتیاز واکنش
10,965
امتیاز
804
محل سکونت
میان شکوفه‌ها
در آموزش قبل، توانستیم با موفقیت اولین شیء خود را در زبان برنامه نویسی شیء گرای جاوا ایجاد کنیم. حال در این قسمت قصد داریم تا Inheritance در زبان برنامه نویسی جاوا را مورد بررسی قرار دهیم.

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

به طور خلاصه، اگر برنامه نویس بخواهد یک شیء ایجاد کند که تمامی و یا برخی از ویژگی های یک شیء دیگر را داشته باشد می تواند از قابلیت ارث بری در زبان برنامه نویسی جاوا استفاده کند. در ضمن اگر برنامه نویس بخواهد تا یک شیء کلیه ی ویژگی های شیء دیگری را به ارث برد به جز یک ویژگی که می بایست تغییر کند، این کار باز هم از طریق وراثت امکان پذیر است که در ادامه ی آموزش ها با نحوه ی انجام این کار نیز آشنا خواهیم شد.

از سوی دیگر وراثت سلسله مراتبی نیز امکان پذیر است. فرض کنیم که ما سه شیء داریم به طوری که شیء شماره دو از شیء شماره یک ارث بری می کند و شیء شماره سه از شیء شماره دو. در واقع شیء شماره سه نه تنها از ویژگی های شیء شماره دو برخوردار خواهد بود، بلکه از آنجا که شیء شماره دو از شیء شماره یک ارث بری می کند، شیء شماره سه ویژگی های شیء شماره یک را نیز در بر خواهد داشت. در این مثال شیء شماره یک به عنوان Superclass یا "کلاس اصلی" تلقی می شود و اشیاء شماره دو و سه به عنوان Subclass یا "کلاس زیرشاخه" تلقی خواهند شد. جالب است بدانیم که در مثال فوق اگر چه که شیء شماره دو برای شیء شماره یک به عنوان یک Subclass تلقی می شود اما این در حالی است که برای شیء شماره سه به عنوان یک Superclass مد نظر قرار داده می شود. این رابـ ـطه به خوبی در تصویر زیر قابل مشاهده است:

63374d8b9b535b2eded042886621f2af.jpg


حال برای آن که درک بهتری از وارثت در زبان برنامه نویسی جاوا داشته باشیم مثالی از دنیای واقعی زده و سپس آن را به یک پروژه ی شیء گرایی تبدیل می کنیم. پدر بزرگ خود را در نظر بگیریم که مثلاً دارای یکسری خصوصیات از این قرار است:

4cb8b8b2e7613b01f2b2b55b741ed6bd.jpg


در واقع برخی از این خصوصیات در ژن ایشان غالب بوده و به فرزندشان که پدرمان باشد انتقال پیدا کرده است. در حقیقت، از موارد فوق خصوصیاتی که پدرمان از پدر بزرگمان به ارث بـرده عبارتند از:

a93e73df3acdc2785f5c05db809ed90f.jpg


همان طور که در جدول فوق مشاهده می شود پدرمان مورد 4 را از پدر بزرگ به ارث نبرده است. به عبارت دیگر، ایشان به جای این که عصبانیت را از پدر خود به ارث بـرده باشد، در عوض فرد خوش اخلاقی است! از سوی دیگر در مورد 5 هم پدر خلاقیت شان به اندازه پدر بزرگ نیست. به عبارت دیگر ایشان بسیار خلاق نیستند بلکه خلاق هستند. به این اتفاق در برنامه نویسی Override یا "رونویسی" می گویند.

به عبارت ساده تر، زمانی که ما بخواهیم که یک کلاس Subclass تعدادی از ویژگی های کلاس Superclass را به ارث نبرد، می بایست آن ویژگی مد نظر را Override کرد. علاوه بر این، به خاطر داشته باشیم که هر موقع یک ویژگی هم در کلاس Superclass موجود باشد و هم در کلاس Subclass، در این مواقع کامپایلر ویژگی موجود در Subclass را مد نظر قرار خواهد داد.

به خاطر داشته باشید
به خاطر داشته باشیم که برای Override کردن اجازه نداریم تا Modifier متد -منظور public, protected, private است- و یا تعداد و یا نوع پارامترهای آن را تغییر دهیم.
علاوه بر مواردی که پدرمان از پدرش به ارث بـرده، ایشان دارای دو خصیصه دیگر نیز می باشند که مخصوص به خودشان است که این دو خصیصه در موارد 8 و 9 گنجانده شده اند. در واقع میزان سواد ایشان در سطح لیسانس بوده و سطح مطالعه ایشان زیاد می باشد. اکنون ببینیم که پسر چه ویژگی هایی را از پدر به ارث بـرده است:

64c25774ed5d682c48e26bdef9290759.jpg


همان طور که در جدول فوق مشاهده می شود، پسر در مورد 1 برخلاف پدرش و پدر بزرگش قد بلند است، پسر در مورد 3 برخلاف پدرش و پدر بزرگش طاس نیست، پسر در مورد 4 برخلاف پدرش که فرد خوش اخلاقی بود، عصبانیت را مجددا از پدر بزرگ خود به ارث بـرده است. در مورد 8 پسر بر خلاف پدرش، تحصیلاتش را ادامه داده و فوق لیسانس دارد. در مورد 9 برخلاف پدر که زیاد مطالعه می کند، پسر خیلی زیاد مطالعه می کند. به منظور درک بهتر این روابط، تصویر زیر را می توانیم مد نظر قرار دهیم:

fd4a717cadf2cbaeb153ae9e8189276d.jpg


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

برخی موضوعات مشابه

بالا