JavaRush /Java blogi /Random-UZ /Nima uchun interfeys merosi kerak?

Nima uchun interfeys merosi kerak?

Guruhda nashr etilgan
Nima uchun interfeyslar kerak? Nima uchun interfeysni meros qilib olish kerak? Polimorfizm nima uchun kerak? Interfeys merosini qanday qilishni o'qigan va tushungan, lekin nima uchun ekanligini tushunmaganlar uchun. O'tgan safar oddiy Ivanovlar oilasi misolidan foydalanib, biz interfeyslar nima uchun kerakligini ko'rib chiqdik. Biz muammoli oilani raqamlashtirishda davom etamiz. Har bir insonning o'ziga hech kimdan meros bo'lmagan yoki hech kimga o'tmagan odatlari - shaxsiy odatlari bo'ladi. Bizning vazifamiz har bir oila a'zosiga o'ziga xos odatlar berishdir. Keling, Java tekisligiga o'tamiz: biz faqat shu sinflarga tegishli bo'lgan sinflarda noyob usullarni amalga oshirishimiz kerak. Xo'sh, davom eting! Bu Petya:
class Петя implements ПривычкиПапы, ПривычкиМамы {

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

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

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

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

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

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

//это переданные привычки
@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Mukammal! Hammasi kerak bo'lganidek ishlaydi! Birinchi maqolada dastur real dunyoning aksi ekanligi aytilgan edi. Haqiqatning eng qiziqarli xususiyati shundaki, u doimo o'zgaradi. Ivanovlar oilasi bundan mustasno emas edi, ularning Masha ismli shirin qizi bor edi. Kipriklarini urish odatini esa onadan, dadamdan esa hidlash odatini oldi. Biz dasturimizga o'zgartirish kiritishimiz kerak. Nima uchun interfeysni meros qilib olish kerak?  - 1Keling, bu unchalik qiyin emas, asosiysi mantiqiy fikr yuritishdir. Axir, hamma interfeyslar nima uchun kerakligini biladi. Endi Mashaning odatlari interfeysini yarataylik , u erda clapElashes() va squish() usullarini tasvirlab bering, uni Mashaga qo'llang va biz tugatdik. Xo'sh, agar bir xil nomdagi usullar boshqa interfeyslarda allaqachon amalga oshirilgan bo'lsa, siz buni bir marta qilishingiz mumkin. Nima uchun interfeys merosi kerak?  - 2Darhaqiqat, kim biladi, agar Seryoja tug'ilsa , kim otadan, onadan, bobodan va to'rtinchi avloddan boshqa birovdan odatlarni meros qilib oladi , har safar interfeys yaratadi, masalan: Seryojaning odatlari va u erda. boshqa interfeyslarda allaqachon yuzlab marta e'lon qilinishi mumkin bo'lgan usullarni e'lon qilasizmi? Bir-ikki yoki uch avlodda biz boshqa interfeyslarda tasvirlangan bir xil usullar bilan interfeyslarni olish xavfini tug'diramiz va agar biz biron bir odat nomini o'zgartirishimiz kerak bo'lsa (va bu juda mumkin - oxir-oqibat, dunyo o'zgarmoqda) , keyin bu spagettini qanday aniqlash mumkin, men tasavvur qila olmayman. Faqat o'tirish va mo''jizani orzu qilish qoladi. Nima uchun interfeysni meros qilib olish kerak?  - 3Endi, agar har bir odatning o'z interfeysi bo'lsa. Tasavvur qilaylik:
public interface ПривычкаПрихлюпывать {
    public void прихлюпывать();
}
public interface ПривычкаПоджимать {
    public void поджимать();
}
public interface ПривычкаКовырятьВНосу {
    public void ковырятьВНосу();
}
public interface ПривычкаХлопатьРесницами {
    public void хлопатьРесницами();
}
public interface ПривычкаЧесатьБороду {
    public void чесатьБороду();
}
Va keyin, xuddi Lego-da bo'lgani kabi, biz individual odatlardan bir nechta merosdan foydalanib, oilaning alohida a'zosining odatlari uchun kerakli interfeysni yozishimiz mumkin. Shunga o'xshash narsa:
public interface ПривычкиМамы extends ПривычкаПоджимать, ПривычкаХлопатьРесницами {
    }
public interface ПривычкиПапы extends ПривычкаЧесатьБороду, ПривычкаХлюпать {
    }
public interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу {
    }
public interface ПривычкиМаши extends ПривычкаХлюпать, ПривычкаХлопатьРесницами {
    }
Va keyin shunchaki kerakli interfeysni kerakli sinfga kiriting, masalan, Onam:
class Мама implements ПривычкиМамы{
@Override
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Xuddi shu narsani Papa, Petya va Masha bilan qilish mumkin edi . Va keyin, Ivanovlar oilasining kengayishi bilan odatlar bilan bog'liq muammolar bo'lmaydi, biz ularni salat tarkibidagi ingredientlar kabi interfeys darajasida meros orqali aralashtiramiz va bir xil nomdagi usullarni ishlab chiqarmaymiz. Eh, orzular, orzular ... Nima uchun interfeysni meros qilib olish kerak?  - 4Chizilgan odam to'g'ri, bu aslida mumkin - endi Ivanovlar oilasining simulyatsiyasi saqlanib qoldi! Diqqatli o'quvchi savol berishi mumkin: "Nima uchun har bir oila a'zosi uchun interfeys yaratish kerak? Bizda bir qator harakatlar mavjud - ularni kerakli sinf uchun darhol amalga oshiring." Tasavvur qilaylik, ko'plab parallel dunyolarda Petyaning dubllari mavjud va barcha Petyalar Petyaning odatlari interfeysini amalga oshirishlari kerak.
interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу

class ПетяВселеннаяХ implements ПривычкиПети
class ПетяВселеннаяY implements ПривычкиПети
// и т.д.
Agar umumiy interfeys bo'lmasa nima bo'ladi?
class ПетяВселеннаяХ implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
class ПетяВселеннаяY implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
Bu ko'proq takrorlanadigan kodga olib keladi. Interfeys merosi dasturni o'zgartirish uchun yanada moslashuvchan qiladi, xususan, takroriy usullar bilan bog'liq muammolarni hal qilish mumkin. Iltimos, yana bir bor esda tutingki, interfeyslarni bir nechta meros qilib olishga ruxsat beriladi.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION