JavaRush /Java блогу /Random-KY /Java тилиндеги интерфейс
vinsler
Деңгээл

Java тилиндеги интерфейс

Группада жарыяланган
Мен жаман жомокчумун, эгер мен кимдир бирөөгө белгилүү бир өтүнүч менен түшүнүксүз нерсени түшүндүрүп берүү максатым жок болсо, анда мен жөнөкөй нерселерди түшүнөм, бир нерсе үчүн бул жерде бул жөнүндө жазам. Адегенде суроо берип, анан аны кантип жасоо керектигин айта турган JavaRush окутуу үлгүсүн ээрчибейм. Мен биринчи айтып, анан сурагандай, биринчи көрсөтүп, анан түшүндүрүүнү жактайм.
Java интерфейси - 1
BS: Иш-аракеттер == жүрүм-турум, аларды синонимдер катары кабыл алыңыз, иш-аракеттер жөн гана туурараак түшүнүлөт, ал дайыма активдүү нерсе жана жүрүм-турум эч нерсе көрсөтпөшү мүмкүн.

интерфейс - интерфейс

Бул эмне? Интерфейс листингинин мисалы (генериктери менен):
public interface Store<T, ID> {
    void add(T t);
    void update(T t, ID i);
    void delete(ID i);
    T findOne(ID i);
    List<T> findAll();
}
Common crud (CRUDден: түзүү, окуу, жаңыртуу, жок кылуу) интерфейси. Коркпоңуз, баары жөнөкөй. Бул интерфейс көптөгөн маалымат базалары менен иштөө төмөнкү принципке негизделгенин билдирет: жазууну кошуу, жазууну жаңыртуу, бардык жазууларды жок кылуу жана табуу керек. Сиз буга дагы 100 жолу туш болосуз жана дээрлик бир эле интерфейсти өзүңүз дагы бир нече жолу жазасыз. Ал жалпыга белгилүү, анткени ал класс тарабынан ишке ашырылышы керек. Класс ишке ашыруу деген эмнени билдирет ? Баары абдан жөнөкөй: ал интерфейстин бардык ыкмаларын сүрөттөп бериши керек. Класста ишке ашыруунун эң жөнөкөй мисалы:
void add (T t) {
	bookstore.add(t);
}
T t ордуна белгилүү бир генерик алмаштырылат. Кыскача айтканда, бул өзгөрмөнүн ТҮРҮ, ошондуктан ал көбүнчө T = Тип катары белгиленет. Биздин мисалда, мындай болушу мүмкүн дейли:
void add (Book book) {
	bookstore.add(book);
}
Албетте, Китеп китебинин ордуна сиз ишке ашыруу үчүн керектүү каалаган өзгөрмөлөрдү алмаштыра аласыз. Түшүнүү үчүн, сиз теориялык жактан T = Объект деп элестете аласыз, жана Javaда бардыгы Объект болгондуктан, сиз ошол жерден каалаган классыңызды/өзгөрмөлөрдү аныктай аласыз. Бир гана кыйынчылык кийинчерээк пайда болот - класс нөл болсо, өзгөчөлүктөр ж.б. Өз сөзү менен айтканда, бул an objectтердин ортосундагы мамилелерди белгилүү бир жүрүм-турум бөлүктөрүнө бөлүү аркылуу аныктаган белгилүү бир программалык түзүлүш. Интерфейстин максаты класс тарабынан ишке ашыруу үчүн функцияларды аныктоо болуп саналат. Башкача айтканда, ыкма кол сыпаттамасы. Интерфейстин ичинде баалуулуктарды кайтаруучу жана киргизген ыкмалардын аттары бар, ушуну менен. Ооба, сиз дагы эле ал жерде кээ бир өзгөрмөлөрдү белгилей аласыз, бирок алар дароо ачык ачык статикалык жыйынтыкка айланат жана программанын каалаган бөлүгүнөн кирүүгө болот. Интерфейс аракеттерди сүрөттөйт, демек, ошол эле аракеттер анда камтылган, б.а. функциялар же методдор. Бул эмне үчүн керек? Бул эмнени жөнөкөйлөтөт же кандай артыкчылыктарды берет? Иш-аракеттердин жана жүрүм-турумдун сүрөттөлүшүн жөнөкөйлөтүү. Эмне кылабыз дейбиз, бирок ар бир класс муну кантип жасоону өзү ишке ашырат. Ири долбоорлордо убакытты үнөмдөңүз. Интерфейстер биз кандайдыр бир тапшырманы аткаруубуз керектигин билген жагдайларда түзүлөт, бирок аны кантип жасоо ар кандай болушу мүмкүн. Интерфейс аракеттердин аталыштарын сүрөттөйт - бул жөн гана кандайдыр бир абстракциянын багыты. Ошондой эле ыкмалар жана талаалар жок интерфейстер болушу мүмкүн, мисалы, Cloneable, Remote ж.б. Келгиле, ар кимдин сүйүктүү үлгүсүндөгү машинаны алалы. Андагы интерфейс унаанын мүмкүн болгон аракеттерин, рулду же кыймылдын багытын, ылдамдыкты жогорулатууну, калган бензинди ж.б. Башкача айтканда, ар кандай унаа ээ боло турган иш-аракеттер. Башкача айтканда, биз эң биринчи машинаны жаратуудагы эң төмөнкү деңгээлге чейин деградация джунглисине түшүп, анын кандайча жаратылганын жана анын эмнеси бар экенин өзүбүздүн мээбиз менен аныктайбыз. Албетте, биз муну абстракттуу жана иш-аракеттер үчүн гана сүрөттөйбүз. Биринчи машинада эмне болгон? Руль бар беле? Бул, бул бир жакка бурулуп жатканын билдирет, рулдун / кыймылдын багыты. Дөңгөлөктөр бар беле? Ооба, бул мен кандайдыр бир ылдамдыкта айдадым, ылдамдык өзгөрдү. Бул бүт интерфейс. Бирок жалпысынан интерфейстер белгилүү бир аракеттерди ишке ашыруу үчүн түзүлгөн. Ошол. биз сиз ойлогон башка нерселерге караганда конкреттүү программаларды жазабыз. Ошондуктан, интерфейстердин өздөрү дагы ачык-айкын жана конкреттүү ыкмаларды камтыйт. Албетте, алар мүмкүн болушунча абстракттуу болот. Интерфейстер класстар катары бири-биринен мураска алынышы мүмкүн.
interface MyInterface extends NotMyinterface;
Интерфейстер класстарда ишке ашырылат. Каалаганыңызча интерфейстерди ишке ашыра аласыз. Мурастан айырмаланып, бирден гана мурас.
class NewClass extends OldClass implements MyInterface, NotMyinterface;
Ошол. биз кээ бир аракеттерди ойлоп таптык, аларга ат бердик, маалыматтарды киргиздик, маалыматтарды кайтарып бердик, мунун бардыгын интерфейске жаздык, андан кийин класс түзүп, интерфейсибизди бул класска коштук, б.а. бул класста биздин интерфейсти ишке ашырдык. Андан тышкары, интерфейсте сүрөттөлгөн бардык методдор/функциялар ишке ашырылышы керек. Аны түздөн-түз интерфейстин өзүндө методдун алдына демейки сөздү кошуу жана ишке ашырууну класс сыяктуу методдо түздөн-түз жазуу менен жасоого болот. Бул Java 8 versionсы менен мүмкүн болду. Бул интерфейсти ишке ашыра турган класста да жасалышы мүмкүн. Ооба, биз интерфейсти жаздык, аны класста ишке ашырдык, класста ишке киргиздик, биз аны иштетип, сынай алабыз. Сиз ошондой эле интерфейстерден окуй аласыз:
  • Статикалык методдор.
  • Жеке ыкмалар. (codeду кайталоо)
  • Өзгөрмөлөр/туруктуулар.
  • Ички интерфейстер.
Бирок муну кийинчерээк кылганыңыз жакшы, башыңызды ашыкча толтуруу да зыяндуу. Кызыктуу суроо, Volvo деген эмне? Класс же интерфейс?
line1: Volvo v = new VolvoV2();
line2: Volvo v = new VolvoV3();
Интерфейстерден тышкары, абстракттуу класстар жана класстар жөнүндө улантуу керек. Балким, кийинчерээк, мен дагы бир-эки саат бош калганда. ))) PS: Балдар, мен посттун астына же PM аркылуу баардык сын-пикирди суранам, мен мунун бардыгында бар экенин жакшы түшүнөм))) жана мен ар дайым аны угууга кызыгам, анткени бул бир аз жакшыраак болууга жана дагы алга карай уланта бергиле. Ушуну менен баарыңыздарга чоң рахмат жана программалоодо ийгorк каалайм. )))
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION