JavaRush /Java блогы /Random-KK /Неліктен интерфейс мұрасы қажет?
Павел
Деңгей

Неліктен интерфейс мұрасы қажет?

Топта жарияланған
Неліктен интерфейстер қажет? Неліктен интерфейс мұрасы қажет? Полиморфизм не үшін қажет? Интерфейсті мұрагерлікті қалай жасау керектігін оқып, түсінген, бірақ неге екенін түсінбегендер үшін. Өткен жолы қарапайым Ivanовтар отбасының мысалын қолдана отырып, интерфейстер не үшін қажет екенін қарастырдық. Біз қиын отбасын цифрландыруды жалғастырамыз. Әр адамның ешкімнен мұраға қалдырмаған немесе ешкімге бермеген әдеттері – жеке әдеттері болады. Біздің міндетіміз – әрбір отбасы мүшесіне қайталанбас әдеттер беру. Java жазықтығына көшейік: тек осы сыныптарға жататын сыныптарда бірегей әдістерді енгізу керек. Ал, алға! Бұл Петя:
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("Поджать губки");
    }
}
Керемет! Барлығы керек сияқты жұмыс істейді! Бірінші мақалада бағдарламаның шынайы дүниенің көрінісі екені айтылды. Шындықтың ең қызық қасиеті – ол үнемі өзгеріп отырады. Ivanовтар отбасынан тыс қалмады, олардың Маша есімді тәтті қызы болды. Ал анасынан кірпік қағу, әкеден иіскеу әдеті оған енген. Біз бағдарламамызға өзгерістер енгізуіміз керек. Неліктен интерфейс мұрасы қажет?  - 1Келіңіздер, бұл қиын емес, бастысы логикалық ойлау. Өйткені интерфейстер не үшін қажет екенін бәрі біледі. Енді «Машаның әдеттері» интерфейсін құрайық , онда clapElashes() және squish() әдістерін сипаттап, оны Машаға енгізейік және біз аяқтадық. Сонымен, егер аттас әдістер басқа интерфейстерде қазірдің өзінде енгізілген болса, оны бір рет жасауға болады. Неліктен интерфейс мұрасы қажет?  - 2Шынында да, Ivanовтар отбасының қандай жоспарлары бар екенін кім біледі, егер Серёжа дүниеге келсе, кім әкеден, анадан, үлкен атадан және төртінші ұрпақтан басқа біреуден әдеттер алады , әр жолы интерфейс жасайды, мысалы: Серёжаның әдеттері интерфейсі , және сонда басқа интерфейстерде жүздеген рет жариялануы мүмкін әдістерді жариялау керек пе? Бір-екі немесе үш ұрпақта біз басқа интерфейстерде сипатталған көптеген ұқсас әдістермен интерфейстерді алу қаупін тудырамыз және егер бізге қандай да бір әдеттің атын өзгерту қажет болса (және бұл әбден мүмкін - ақыр соңында әлем өзгеруде) , содан кейін бұл спагеттиді қалай анықтауға болады, мен елестете алмаймын. Ғажайыпты армандауға және отыруға ғана қалды. Неліктен интерфейс мұрасы қажет?  - 3Енді әрбір әдеттің өз интерфейсі болса. Елестетіп көрейік:
public interface ПривычкаПрихлюпывать {
    public void прихлюпывать();
}
public interface ПривычкаПоджимать {
    public void поджимать();
}
public interface ПривычкаКовырятьВНосу {
    public void ковырятьВНосу();
}
public interface ПривычкаХлопатьРесницами {
    public void хлопатьРесницами();
}
public interface ПривычкаЧесатьБороду {
    public void чесатьБороду();
}
Содан кейін, Lego-дағы сияқты, біз жеке әдеттерден бірнеше мұраны пайдалана отырып, отбасының жеке мүшесінің әдеттеріне қажетті интерфейсті тере аламыз. Солай:
public interface ПривычкиМамы extends ПривычкаПоджимать, ПривычкаХлопатьРесницами {
    }
public interface ПривычкиПапы extends ПривычкаЧесатьБороду, ПривычкаХлюпать {
    }
public interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу {
    }
public interface ПривычкиМаши extends ПривычкаХлюпать, ПривычкаХлопатьРесницами {
    }
Содан кейін қажетті интерфейсті қалаған сыныпқа енгізіңіз, мысалы, анам:
class Мама implements ПривычкиМамы{
@Override
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Папамен, Петямен және Машамен де солай жасауға болады . Содан кейін, Ivanовтар отбасының кеңеюімен әдеттермен ешқандай проблемалар болмайды, біз оларды интерфейс деңгейінде мұрагерлік жолмен араластырамыз, мысалы, салаттағы ингредиенттер сияқты және бірдей атаумен көптеген әдістерді шығармас едік. Эх, армандар, армандар... Неліктен интерфейс мұрасы қажет?  - 4Сурет салған адам дұрыс, бұл шын мәнінде мүмкін - енді Ivanовтар отбасының симуляциясы сақталды! Мұқият оқырман сұрақ қоюы мүмкін: «Отбасының әрбір мүшесіне интерфейс жасау не үшін керек? Бізде бірқатар әрекеттер бар – оларды қажетті сынып үшін дереу орындаңыз». Көптеген параллельді әлемдерде Петяның дубльдері бар деп елестетіп көрейік және барлық Петьялар Петяның әдеттері интерфейсін жүзеге асыруы керек.
interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу

class ПетяВселеннаяХ implements ПривычкиПети
class ПетяВселеннаяY implements ПривычкиПети
// и т.д.
Жалпы интерфейс болмаса ше?
class ПетяВселеннаяХ implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
class ПетяВселеннаяY implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
Бұл қайталанатын codeқа әкеледі. Интерфейсті мұралау қолданбаны өзгертуге икемді етеді, атап айтқанда, қайталанатын әдістермен проблемаларды шешуге болады. Интерфейстердің бірнеше мұралануына рұқсат етілгенін ескеріңіз.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION