JavaRush /Блоги Java /Random-TG /Чаро мероси интерфейс зарур аст?
Павел
Сатҳи

Чаро мероси интерфейс зарур аст?

Дар гурӯҳ нашр шудааст
Чаро интерфейсҳо лозиманд? Чаро мероси интерфейс зарур аст? Чаро полиморфизм лозим аст? Барои онҳое, ки хонданд ва фаҳмиданд, ки чӣ тавр мероси интерфейсро иҷро кардан мумкин аст, аммо чаро намефаҳмиданд. Дафъаи гузашта, бо мисоли оилаи оддии 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 ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
Ин ба рамзи такроршаванда оварда мерасонад. Мероси интерфейс барномаро барои тағир чандиртар мекунад, аз ҷумла, мушкилот бо усулҳои такрориро ҳал кардан мумкин аст. Лутфан бори дигар қайд кунед, ки мероси сершумори интерфейсҳо иҷозат дода мешавад.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION