Interface — komponent yoki type tashqi tomonga qanday operatsiyalarni taqdim etishini belgilaydigan contract. U implementation tafsilotlarini emas, foydalanish mumkin bo‘lgan method, parameter, natija va xatti-harakat qoidalarini ifodalaydi.
Interface object-oriented tillarda maxsus type bo‘lishi, module API, tarmoq protokoli yoki hardware ulanish chegarasi ma’nosida ishlatilishi mumkin.
Type interface
Dasturlash tilidagi interface method signature’larini belgilaydi.
interface Storage {
save(key, value)
load(key)
delete(key)
}
Turli classlar shu contractni implementatsiya qiladi.
Caller aniq classga emas, Storage interface’iga tayanadi.
Contract
Interface faqat method nomi va type’dan iborat emas.
To‘liq contract quyidagilarni ham belgilaydi:
- precondition;
- postcondition;
- xato;
- null holati;
- ordering;
- thread safety;
- ownership;
- timeout;
- side effect;
- performance xususiyati;
- versioning.
Ikki implementation signature jihatdan mos, semantik jihatdan nomos bo‘lishi mumkin.
Implementation
Class interface’dagi barcha majburiy methodlarni taqdim etadi.
Compile-time type checker missing method yoki noto‘g‘ri signature’ni aniqlaydi.
Dynamic tilda moslik runtime yoki test orqali tekshirilishi mumkin.
Explicit va implicit implementatsiya
Explicit
Class qaysi interface’ni implementatsiya qilishini declarationda ko‘rsatadi.
Afzalligi:
- niyat aniq;
- compiler tekshiradi;
- nominal typing;
- documentation.
Implicit
Class kerakli methodlarga ega bo‘lsa, interface’ga mos hisoblanadi.
Bu structural typing yoki duck typingga yaqin.
Interface segregation
Juda katta interface implementatorni ishlatmaydigan methodlarni ham yozishga majbur qiladi.
Interface Segregation Principle clientlarga kerakli kichik contractlarni ajratishni taklif qiladi.
Masalan:
Readable
Writable
Closable
bitta katta FileEverything interface’idan aniqroq bo‘lishi mumkin.
Marker interface
Methodi bo‘lmagan interface type’ga maxsus ma’no beradi.
Masalan, object:
- serializable;
- trusted;
- remote;
- immutable
ekanini belgilashi mumkin.
Zamonaviy tillarda annotation yoki trait marker ishlatilishi ham mumkin.
Default method
Ba’zi tillarda interface default implementation bera oladi.
Bu yangi methodni eski implementatorlarni darhol buzmasdan qo‘shishga yordam beradi.
Biroq:
murakkablashishi mumkin.
Abstract class bilan farqi
| Jihat | Interface | Abstract class |
|---|---|---|
| Asosiy maqsad | Contract | Umumiy base implementation |
| State | Odatda yo‘q yoki cheklangan | Bo‘lishi mumkin |
| Constructor | Odatda yo‘q | Bor |
| Multiple implement | Ko‘p bo‘lishi mumkin | Tilga bog‘liq |
| Coupling | Kamroq | Hierarchy kuchliroq |
Aniq farq dasturlash tiliga bog‘liq.
Dependency inversion
Yuqori darajali modul concrete implementationga emas, abstractionga tayanadi.
OrderService → PaymentGateway interface
Productionda real gateway, testda fake gateway beriladi.
Interface dependency yo‘nalishini boshqaradi.
Dependency injection
Interface implementationi objectga tashqaridan beriladi.
Usullar:
Constructor injection dependency majburiyligini aniq ko‘rsatadi.
Fake, stub va mock
Testda interface asosida alternativ implementation ishlatiladi.
- Fake — soddalashtirilgan ishlaydigan implementation.
- Stub — oldindan belgilangan javob.
- Mock — chaqiriqlarni tekshiradi.
Har class uchun interface yaratish shart emas. Haqiqiy boundary yoki variation mavjud bo‘lishi kerak.
Public API
Module eksport qilgan function va type’lar uning interface’ini tashkil qiladi.
Hatto til interface kalit so‘ziga ega bo‘lmasa ham, public API contract mavjud.
Public interface o‘zgarsa downstream kodga ta’sir qiladi.
User interface
User Interface ham “interface” atamasining boshqa qo‘llanishi.
Bu foydalanuvchi va dastur orasidagi chegara:
Type interface bilan nomi bir xil, darajasi boshqa.
Network interface
Operatsion tizimda network interface packet yuborish va qabul qilish nuqtasi.
U:
ga ega.
Bu ham componentlar orasidagi boundary ma’nosidagi interface.
Hardware interface
USB, PCIe, I2C yoki GPIO elektr va protocol qoidalarini belgilaydi.
Connector mos bo‘lishi yetarli emas; voltage, signal va protocol ham mos bo‘lishi kerak.
Software interface kabi hardware interface ham contract hisoblanadi.
Interface versioning
Public interface’ga method qo‘shish ayrim tillarda breaking change.
Moslik usullari:
- default method;
- yangi interface;
- optional capability;
- adapter;
- major version;
- feature negotiation.
Client va server bir vaqtda yangilanmasligi mumkin.
Capability interface
Objectning barcha xususiyatini bitta hierarchy bilan emas, kichik qobiliyatlar orqali ifodalash mumkin.
Masalan:
Readable;Seekable;Flushable.
Function faqat kerakli capability’ni talab qiladi.
Bu couplingni kamaytiradi.
Adapter
Mavjud class kerakli interface’ga mos bo‘lmasa, adapter tarjima qiladi.
Adapter:
- method nomini o‘zgartiradi;
- type conversion qiladi;
- errorni moslashtiradi;
- lifecycle’ni boshqaradi.
Adapter legacy yoki third-party libraryni ichki contractga ulaydi.
Null implementation
Ba’zi interface uchun hech narsa qilmaydigan implementation yaratiladi.
Masalan, logging o‘chirilganda NullLogger.
Bu callerda doimiy null tekshiruvni kamaytiradi.
Null implementation ham interface contractiga mos bo‘lishi kerak.
Xavfsizlik
Interface qaysi imkoniyat tashqariga ochilishini cheklaydi.
Kichik capability object berish to‘liq service yoki global context berishdan xavfsizroq.
Masalan, faqat o‘qish interface’i yozish huquqini yashiradi.
Diagnostika
Interface muammosida:
- implementation tanlovi;
- contract;
- default method;
- dependency injection;
- runtime proxy;
- version;
- method signature;
- nullability;
- thread safety;
- adapter
tekshiriladi.
Compile-time moslik business semantika mosligini to‘liq tekshirmaydi.
Interface evolution
Interface’ni rivojlantirishda mavjud implementatorlar va callerlar bir vaqtda yangilanmasligi hisobga olinadi. Yangi capability alohida kichik interface sifatida qo‘shilishi, adapter orqali eski implementationga moslashtirilishi yoki major versiyada majburiy qilinishi mumkin.
Bog‘liq tushunchalar
Contract, Implementation, Abstract class, Polymorphism, Dependency inversion, Dependency injection, Adapter, API, User interface, Network interface