Bosh sahifa Wiki Interface

Interface

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:

  • multiple default conflict;
  • state yo‘qligi;
  • behavior contracti;
  • version mosligi

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:

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