JavaRush /وبلاگ جاوا /Random-FA /چرا وراثت رابط ضروری است؟
Павел
مرحله

چرا وراثت رابط ضروری است؟

در گروه منتشر شد
چرا رابط ها مورد نیاز هستند؟ چرا وراثت رابط ضروری است؟ چرا پلی مورفیسم مورد نیاز است؟ برای کسانی که مطالعه کردند و فهمیدند که چگونه به ارث بری رابط بپردازند، اما دلیل آن را متوجه نشدند. آخرین بار، با استفاده از مثال خانواده معمولی ایوانف، به این موضوع پرداختیم که چرا به رابط ها نیاز است. ما همچنان به دیجیتالی کردن خانواده مشکل دار ادامه می دهیم. هر شخصی عاداتی دارد که از کسی به ارث نبرده یا به کسی منتقل نکرده است - عادات شخصی او. وظیفه ما این است که برای هر یک از اعضای خانواده عادات منحصر به فردی ایجاد کنیم. بیایید به صفحه جاوا برویم: ما باید متدهای منحصر به فردی را در کلاس هایی پیاده سازی کنیم که فقط به این کلاس ها تعلق دارند. خب برو جلو! این پتیا است:
class Петя implements ПривычкиПапы, ПривычкиМамы {

//это личные Петины привычки
public void ковырятьВНосу () {
System.out.println("Ковырь-ковырь");
    }

//это унаследованные привычки
@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать () {
System.out.println("Поджать губки");
    }
}
این بابا است:
class Папа implements ПривычкиПапы {

//это личные Папины привычки
public void чесатьБороду () {
System.out.println("Чешу бороду");
    }

//это переданные привычки
   @Override
    public void прихлюпывать() {
     System.out.println("Хлюп");
   }
}
این مامان است:
class Мама implements ПривычкиМамы{

//это личные Мамины привычки
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

//это переданные привычки
@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
کامل! همه چیز همان طور که باید کار می کند! در مقاله اول گفته شد که برنامه بازتابی از دنیای واقعی است. جالب ترین ویژگی واقعیت این است که همیشه تغییر می کند. خانواده ایوانف نیز از این قاعده مستثنی نبود؛ آنها دختری شیرین به نام ماشا داشتند. و عادت مژه زدن را از مامان و بو کشیدن را از بابا به ارث برد. ما باید در برنامه خود تغییراتی ایجاد کنیم. چرا وراثت رابط ضروری است؟  - 1بیا، آنقدرها هم سخت نیست، نکته اصلی این است که منطقی فکر کنیم. پس از همه، همه می دانند که چرا رابط ها مورد نیاز هستند. حالا بیایید یک رابط Masha’s Habits ایجاد کنیم، متد clapElashes() و squish() را در آنجا توصیف کنیم ، آن را در Masha پیاده سازی کنیم و کارمان تمام شد. بنابراین اگر متدهایی با همین نام قبلاً در واسط های دیگر پیاده سازی شده باشند، می توانید یک بار این کار را انجام دهید. چرا وراثت رابط ضروری است؟  - 2در واقع، چه کسی می داند که خانواده ایوانف چه برنامه هایی دارند، اگر سریوژا متولد شود ، چه کسی عادات را از پدر، مادر، پدربزرگ و شخص دیگری از نسل چهارم به ارث می برد، هر بار یک رابط ایجاد می کند، مانند: رابط Seryozha's Habits ، و آنجا روش هایی را که قبلاً می توان صدها بار در واسط های دیگر اعلان کرد؟ در چند یا سه نسل، ما در خطر دریافت رابط هایی با دسته ای از روش های یکسان هستیم که قبلاً در رابط های دیگر توضیح داده شده است، و اگر لازم باشد نام برخی عادت ها را تغییر دهیم (و این کاملاً ممکن است - بالاخره دنیا در حال تغییر است) ، پس من نمی توانم تصور کنم که چگونه این اسپاگتی را بفهمم. تنها چیزی که باقی می ماند این است که بنشینیم و رویای یک معجزه را ببینیم. چرا وراثت رابط ضروری است؟  - 3حال اگر هر عادتی رابط خاص خود را داشت. بیایید تصور کنیم:
public interface ПривычкаПрихлюпывать {
    public void прихлюпывать();
}
public interface ПривычкаПоджимать {
    public void поджимать();
}
public interface ПривычкаКовырятьВНосу {
    public void ковырятьВНосу();
}
public interface ПривычкаХлопатьРесницами {
    public void хлопатьРесницами();
}
public interface ПривычкаЧесатьБороду {
    public void чесатьБороду();
}
و سپس، مانند لگو، می‌توانیم با استفاده از وراثت چندگانه از عادات فردی، رابط مورد نیاز خود را برای عادات یک عضو خانواده تایپ کنیم. چیزی شبیه به این:
public interface ПривычкиМамы extends ПривычкаПоджимать, ПривычкаХлопатьРесницами {
    }
public interface ПривычкиПапы extends ПривычкаЧесатьБороду, ПривычкаХлюпать {
    }
public interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу {
    }
public interface ПривычкиМаши extends ПривычкаХлюпать, ПривычкаХлопатьРесницами {
    }
و سپس به سادگی رابط مورد نظر را در کلاس مورد نظر پیاده سازی کنید، به عنوان مثال، Mom:
class Мама implements ПривычкиМамы{
@Override
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
همین کار را می توان با پاپا، پتیا و ماشا انجام داد . و سپس، با گسترش خانواده ایوانف، هیچ مشکلی با عادات وجود نخواهد داشت، ما آنها را به سادگی از طریق ارث بردن در سطح رابط، مانند مواد تشکیل دهنده یک سالاد، به هم می زنیم، و دسته ای از روش ها را با همین نام تولید نمی کنیم. آه، رویاها، رویاها... چرا وراثت رابط ضروری است؟  - 4مرد ترسیم شده درست می گوید، این در واقع امکان پذیر است - اکنون شبیه سازی خانواده ایوانوف نجات یافته است! یک خواننده با دقت ممکن است این سؤال را بپرسد: "چرا برای هر یک از اعضای خانواده رابط ایجاد می کنیم؟ ما مجموعه ای از اقدامات داریم - بلافاصله آنها را برای کلاس مورد نیاز اجرا می کنیم." بیایید تصور کنیم که در بسیاری از جهان‌های موازی، دوتایی‌های Petya وجود دارد و همه Petyaها باید رابط کاربری Petya's Habits را پیاده‌سازی کنند.
interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу

class ПетяВселеннаяХ implements ПривычкиПети
class ПетяВселеннаяY implements ПривычкиПети
// и т.д.
اگر رابط مشترک وجود نداشت چه؟
class ПетяВселеннаяХ implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
class ПетяВселеннаяY implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
این منجر به کدهای تکراری تر می شود. وراثت رابط باعث می شود برنامه کاربردی برای تغییر انعطاف پذیرتر شود، به ویژه، مشکلات با روش های تکراری قابل حل است. لطفاً مجدداً توجه داشته باشید که وراثت چندگانه رابط ها مجاز است.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION