JavaRush /Java blogi /Random-UZ /Java tilidagi interfeys
vinsler
Daraja

Java tilidagi interfeys

Guruhda nashr etilgan
Men yomon hikoyachiman, agar kimgadir aniq bir iltimos bilan tushunarsiz narsani tushuntirish maqsadim bo'lmasa, men oddiy narsalarni tushunaman va bir narsa uchun bu erda yozaman. Men JavaRush o'qitish misoliga amal qilmayman, avval savol berib, keyin buni qanday qilishni aytaman. Men avval aytib, keyin so'rash tarafdoriman, xuddi aytgandek, avval ko'rsatish, keyin tushuntirish.
Java tilidagi interfeys - 1
BS: Harakatlar == xatti-harakat, ularni sinonim sifatida qabul qiling, harakatlar shunchaki to'g'riroq tushuniladi, bu har doim faol narsadir va xatti-harakatlar hech narsani ko'rsatmasligi mumkin.

interfeys - interfeys

Nima bu? Interfeys ro'yxatiga misol (generiklar bilan):
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 dan: Yaratish, o'qish, yangilash, o'chirish) interfeysi. Xavotir olmang, hamma narsa juda oddiy. Ushbu interfeys ko'plab ma'lumotlar bazalari bilan ishlash quyidagi printsipga asoslanishini anglatadi: siz yozuvni qo'shishingiz, yozuvni yangilashingiz, barcha yozuvlarni o'chirishingiz va topishingiz kerak. Siz buni yana 100 marta ko'rasiz va deyarli bir xil interfeysni bir xil sonda yozasiz. U ommaviy deb belgilangan, chunki u sinf tomonidan amalga oshirilishi kerak. Sinf tomonidan amalga oshirilishi nimani anglatadi ? Hamma narsa juda oddiy: u interfeysning barcha usullarini tavsiflashi kerak. Sinfda amalga oshirishning eng oddiy misoli:
void add (T t) {
	bookstore.add(t);
}
T t o'rniga ma'lum bir generik almashtiriladi. Xulosa qilib aytganda, bu o'zgaruvchining TYPEsidir, shuning uchun u ko'pincha T = Type sifatida belgilanadi. Bizning misolimizda, bu shunday bo'lishi mumkin, deylik:
void add (Book book) {
	bookstore.add(book);
}
Tabiiyki, Kitob kitobi o'rniga siz amalga oshirish uchun kerak bo'lgan har qanday o'zgaruvchini almashtirishingiz mumkin. Tushunish uchun siz nazariy jihatdan T = Ob'ekt ekanligini tasavvur qilishingiz mumkin va Java-da hamma narsa Ob'ekt bo'lganligi sababli, siz u erda har qanday sinf/o'zgaruvchini belgilashingiz mumkin. Faqatgina muammo keyinroq paydo bo'ladi - agar sinf nolga teng bo'lsa, istisnolar va hokazo. O'z so'zlari bilan aytganda, bu ob'ektlar o'rtasidagi munosabatlarni muayyan xatti-harakatlar qismlariga bo'lish orqali aniqlaydigan ma'lum bir dastur tuzilmasi. Interfeysning maqsadi sinf tomonidan amalga oshirish uchun funksionallikni aniqlashdir. Ya'ni, usul imzolarining tavsifi. Interfeys ichida qiymatlarni qaytaradigan va kiritadigan usullarning nomlari mavjud va shu. Xo'sh, siz hali ham u erda ba'zi o'zgaruvchilarni belgilashingiz mumkin, lekin ular darhol ochiq statik yakuniy bo'lib qoladi va ularga dasturning istalgan qismidan kirish mumkin. Interfeys harakatlarni tavsiflaydi va shuning uchun xuddi shu harakatlar unda mavjud, ya'ni. funktsiyalar yoki usullar. Bu nima uchun kerak? Bu nimani soddalashtiradi yoki qanday afzalliklarni beradi? Harakatlar va xatti-harakatlarning tavsifini soddalashtirish. Biz nima qilishni aytamiz, lekin har bir sinf buni qanday qilishni o'zi amalga oshiradi. Katta loyihalarda vaqtni tejang. Interfeyslar biz ba'zi bir vazifani bajarishimiz kerakligini biladigan vaziyatlarda yaratiladi, ammo buni qanday qilish har xil bo'lishi mumkin. Interfeys harakatlar nomlarini tavsiflaydi - bu shunchaki mavhumlikning yo'nalishi. Klonlanadigan, masofaviy va boshqalar kabi markerlar kabi usullar va maydonlarsiz interfeyslar ham bo'lishi mumkin. Keling, har kimning sevimli avtomobil misolini olaylik. Undagi interfeys avtomobilning mumkin bo'lgan harakatlarini, rulni aylantirish yoki harakat yo'nalishini, tezlikni oshirishni, qolgan benzinni va hokazolarni tavsiflaydi. Ya'ni, mutlaqo har qanday avtomobil bo'lishi mumkin bo'lgan xuddi shunday harakatlar. Boshqacha qilib aytadigan bo'lsak, biz buzilish o'rmoniga birinchi avtomobilni yaratishning eng past darajasiga tushamiz va o'z miyamiz bilan uning qanday yaratilganini va nima borligini aniqlaymiz. Tabiiyki, biz buni mavhum va faqat harakatlar uchun tasvirlaymiz. Birinchi mashinada nima bor edi? Rulda bormidi? Bu, ya'ni u qayergadir aylanayotganini anglatadi, rul g'ildiragi/harakat yo'nalishi. G'ildiraklar bormi? Ha, bu men qandaydir tezlikda haydaganimni anglatadi, tezlikni o'zgartirdim. Bu butun interfeys. Ammo umuman olganda, interfeyslar ma'lum harakatlarni amalga oshirish uchun yaratilgan. Bular. biz siz o'ylashingiz mumkin bo'lgan boshqa narsalardan ko'ra aniqroq dastur yozamiz. Shuning uchun interfeyslarning o'zlari aniqroq va aniqroq usullarni o'z ichiga oladi. Albatta, ular imkon qadar mavhum bo'ladi. Interfeyslar bir-biridan sinflar sifatida meros qilib olinishi mumkin.
interface MyInterface extends NotMyinterface;
Interfeyslar sinflarda amalga oshiriladi. Siz xohlagancha ko'p interfeyslarni amalga oshirishingiz mumkin. Merosdan farqli o'laroq, faqat bittadan meros.
class NewClass extends OldClass implements MyInterface, NotMyinterface;
Bular. biz ba'zi harakatlarni o'ylab topdik, ularga nomlar berdik, ma'lumotlarni kiritdik, ma'lumotlarni qaytardik, bularning barchasini interfeysga yozdik, keyin sinf yaratdik va interfeysimizni ushbu sinfga qo'shdik, ya'ni. bizning interfeysimizni ushbu sinfda amalga oshirdi. Bundan tashqari, interfeysda tasvirlangan barcha usullar/funksiyalar amalga oshirilishi kerak. Buni to'g'ridan-to'g'ri interfeysning o'zida usuldan oldin default so'zini qo'shish va amalga oshirishni sinf kabi to'g'ridan-to'g'ri usulda yozish orqali amalga oshirish mumkin. Bu Java-ning 8-versiyasi bilan mumkin bo'ldi. Bu interfeysni amalga oshiradigan sinfda ham amalga oshirilishi mumkin. Xo'sh, biz interfeysni yozdik, uni sinfda qo'lladik, sinfda dasturni ishlab chiqdik, biz uni ishga tushirishimiz va sinab ko'rishimiz mumkin. Shuningdek, interfeyslarda quyidagilar haqida o'qishingiz mumkin:
  • Statik usullar.
  • Shaxsiy usullar. (kodni takrorlash)
  • O'zgaruvchilar/konstantalar.
  • Ichki interfeyslar.
Ammo buni keyinroq qilish yaxshiroqdir, shuningdek, boshingizni juda ko'p miqdorda to'ldirish ham zararli. Qiziqarli savol, Volvo nima? Sinf yoki interfeys?
line1: Volvo v = new VolvoV2();
line2: Volvo v = new VolvoV3();
Interfeyslarga qo'shimcha ravishda Abstrakt sinflar va sinflar haqida ham davom etish kerak. Balki keyinroq, yana bir necha soat bo'sh qolganimda. ))) PS: Bolalar, men post ostida yoki PM orqali barcha tanqidlarni so'rayman, men buni hammada borligini juda yaxshi tushunaman))) va men buni har doim eshitishga qiziqaman, chunki bu biroz yaxshilanish uchun sababdir va yana oldinga siljishda davom eting. Shu bilan barchangizga katta rahmat va dasturlashda omad tilaymiz. )))
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION