JavaRush /Java блогу /Random-KY /Эмне үчүн интерфейсти мурастоо керек?
Павел
Деңгээл

Эмне үчүн интерфейсти мурастоо керек?

Группада жарыяланган
Эмне үчүн интерфейстер керек? Эмне үчүн интерфейсти мурастоо керек? Эмне үчүн полиморфизм керек? Интерфейстик мурасты кантип жасоону окуп, түшүнгөн, бирок эмне үчүн экенин түшүнбөгөндөр үчүн. Өткөн жолу жөнөкөй 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 чесатьБороду();
}
Андан кийин, Легодогудай, биз жеке адаттардан бир нече мурасты колдонуп, үй-бүлөнүн айрым мүчөсүнүн адаттары үчүн керектүү интерфейсти тере алабыз. Бул сыяктуу бир нерсе:
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