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

وراثت یکی از مفاهیم اساسی برنامه نویسی شی گرا است. در برنامه نویسی ، کلمه وراثت رابطه ای است که در آن کلاس کودک شرایط و رفتار کلاس والدین را می پذیرد.

هدف از وراثت در توسعه نرم افزار تسهیل استفاده مجدد از نرم افزار مطمئن و قابل اعتماد است. یکی از مزایای اصلی استفاده از وراثت این است که کد اضافی را در برنامه های شما حذف می کند.

میراث چگونه کار می کند

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

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

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

میراث به این ترتیب کار می کند.

بخش میوه در یک فروشگاه

استفاده از وراثت در جاوا

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

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

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

یک کلاس والد در جاوا ایجاد کنید

روند انتخاب کلاس والد از یک سند مورد نیاز نرم افزار به عنوان تجزیه و تحلیل شی گرا شناخته می شود. در طی این فرآیند ، از عبارت “is a” اغلب برای شناسایی روابط احتمالی وراثت استفاده می شود. با استفاده از مثال ما در بالا می بینید که میوه ها کلاس والدین ما خواهند بود.

نمونه کلاس میوه برای والدین


public class Fruit {
//Variable Declaration
protected String seed;
protected String skinColor;
protected String taste;
//Default Constructor
public Fruit(){
seed = "";
skinColor ="";
taste ="";
}
//Primary Constructor
public Fruit(String seed, String skinColor, String taste){
this.seed = seed;
this.skinColor = skinColor;
this.taste = taste;
}
//getters and setters
public String getSeed() {
return seed;
}
public void setSeed(String seed) {
this.seed = seed;
}
public String getSkinColor() {
return skinColor;
}
public void setSkinColor(String skinColor) {
this.skinColor = skinColor;
}
public String getTaste() {
return taste;
}
public void setTaste(String taste) {
this.taste = taste;
}
//eat method
public void eat(){
//general code on how to eat a fruit
}
//juice method
public void juice() {
//general code on how to juice a fruit
}
}

یکی از جنبه های قابل توجه کلاس پدر در بالا ، اصلاح کننده دسترسی است که با هر اعلان متغیر استفاده می شود. اصلاح کننده دسترسی “امن” برای استفاده در کلاسهای والد ایده آل است زیرا از دسترسی کلاسهای غیر کودک به خصوصیات داده کلاس والد جلوگیری می کند.

در زیر این کد در مورد سازنده ها ، گیرنده ها و تنظیم کننده ها که بلوک های ساختاری معمول برای هر کلاس جاوا هستند ، خواهید آموخت. سرانجام ، شما با دو روش (آب میوه و غذا خوردن) آشنا شدید که در کلاس والدین برنامه ما ایجاد شده است ، زیرا آنها برای همه میوه ها جهانی هستند – همه میوه ها را می توان خورد و اشاره کرد.

ایجاد کلاسهای کودکان در جاوا

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

در ادامه مثال ما ، می توانید بفهمید که چرا نارنجی از بچه های میوه بالاتر یک درجه مناسب کودکان است.

نمونه کلاس کودک نارنجی


public class Orange extends Fruit{
//variable declaration
private int supremes;
//default constructor
public Orange() {
supremes = 0;
}
//primary constructor
public Orange(String seed, String skinColor, String taste, int supremes){
super(seed, skinColor, taste);
this.supremes = supremes;
}
//getters and setters
public int getsupremes() {
return supremes;
}
public void setsupremes(int supremes) {
this.supremes = supremes;
}
//eat method
public void eat(){
//how to eat an orange
}
//juice method
public void juice() {
//how to juice and orange
}
//peel method
public void peel(){
//how to peel an orange
}
}

تفاوتی بین آنچه که یک عبارت کلاس Java معمولی به نظر می رسد و آنچه در کد بالا داریم ، وجود دارد. کلمه کلیدی “گسترش می یابد” همان چیزی است که در جاوا برای امکان ایجاد وراثت استفاده می شود.

در مثال ما در بالا ، کلاس فرزند (نارنجی) کلاس والدین (میوه) را گسترش می دهد. بنابراین ، شرایط و رفتار کلاس میوه اکنون توسط کلاس نارنجی قابل دسترسی و اصلاح است.

ویژگی منحصر به فردی که کلاس نارنجی ما دارد با نام متغیر supremes (که نام رسمی بخشهای کوچکی است که در پرتقال یافت می شود) مشخص می شود. اینجاست که تخصص وارد عمل می شود. همه میوه ها دارای برتری نیستند ، اما همه پرتقال ها دارند ، بنابراین حفظ متغیر supremi برای کلاس نارنجی منطقی است.

افزودن روش ‘پوست’ به روش های ‘خوردن’ و ‘آب’ موجود نیز منطقی است ، زیرا اگرچه همه میوه ها را نمی توان پوست کند ، پرتقال ها اغلب پوست می گیرند.

باید به خاطر داشته باشید که اگر قصد تغییر روشهای موجود در “خوردن” و “آب” را نداشته باشیم ، نیازی به گنجاندن آنها در کلاس نارنجی خود نخواهیم بود. روشهای موجود در کلاس نارنجی جایگزین هر روش مشابه در کلاس میوه می شوند. بنابراین ، اگر همه میوه ها به یک شکل خورده و نشان داده شوند ، نباید این روش ها را در کلاس پرتقال ایجاد کنیم.

سازندگان نقش بر اساس ارث بازی می کنند

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

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

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

روش “super” در سازنده اصلی ما در بالا لازم است زیرا مشخص می کند که سازنده اصلی – نه سازنده پیش فرض – از کلاس میوه والد باید هر بار که یک شی پارامتر نارنجی ایجاد می شود فراخوانی شود.

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

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

اعتبار تصویر: Andreas Wohlfahrt / Pexels


خانواده ای از ماکاک ژاپنی که در یک چشمه آب گرم حمام می کنند
نحوه تنظیم کد شی گرا با وراثت

بدست آوردن صحیح برنامه نویسی شی گرا به این معنی است که شما باید در مورد وراثت بدانید که چگونه می تواند کدگذاری را ساده کرده و خطاها را کاهش دهد.

بعدی را بخوانید


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

.

دیدگاهتان را بنویسید