Bosh sahifa Wiki Abstraction

Abstraction

Abstraction — murakkab tizimning muhim xususiyatlarini ko‘rsatib, foydalanish uchun kerak bo‘lmagan ichki tafsilotlarni yashirish tamoyili.

Dasturlashda abstraction foydalanuvchiga “qanday ishlaydi?”dan ko‘ra “nima qiladi?” degan interfeysni beradi.

Masalan, faylni o‘qish uchun disk sectori, filesystem inode’i va device interruptini bilish shart emas. Dastur read kabi interfeysdan foydalanadi.

Abstraction darajalari

Kompyuter tizimi bir necha abstraction qatlamidan iborat:

Application
Library
Operating system API
Kernel
Driver
Hardware

Har qatlam pastki murakkablikni yashirib, yuqori qatlamga soddaroq model beradi.

Funksiya

Funksiya takroriy amallarni nomlangan abstractionga aylantiradi.

total = calculate_total(items)

Caller ichkarida:

  • loop;
  • discount;
  • tax;
  • rounding

qanday bajarilishini bilmasligi mumkin.

Function nomi va contracti muhim xatti-harakatni ifodalaydi.

Data abstraction

Data structure ichki representationni yashirib, operationlar orqali ishlashni beradi.

Masalan, queue:

  • enqueue;
  • dequeue;
  • peek.

Queue array, linked list yoki ring buffer bilan implementatsiya qilinishi mumkin. Foydalanuvchi public contract o‘zgarmasa implementationni bilmaydi.

Interface

Interface abstractionning formal ko‘rinishi bo‘lishi mumkin.

U:

ni belgilaydi.

Turli class yoki module bir interface’ni boshqa usulda implementatsiya qiladi.

Abstract class

Abstract class umumiy state va behavior beradi, lekin ayrim methodlarni child classga qoldiradi.

U to‘g‘ridan-to‘g‘ri instance qilinmasligi mumkin.

Interface’dan farqli ravishda implementation va fieldlarni ham saqlashi mumkin. Aniq farq dasturlash tiliga bog‘liq.

API abstraction

API service ichki database va algorithmni yashiradi.

Client:

POST /payments

kabi operationni biladi.

Ichkarida:

bajarilishi mumkin.

API contract barqaror bo‘lsa, backend implementationi o‘zgaradi.

Hardware abstraction

Operatsion tizim driverlar orqali turli hardware’ni umumiy interfeysga keltiradi.

Masalan, turli disk qurilmalari file API orqali ishlatiladi.

Hardware Abstraction Layer platformaga xos tafsilotlarni ajratadi.

Virtualization abstraction

Virtual mashina guest OSga standart CPU, disk va network qurilma ko‘rsatadi.

Fizik hardware boshqa bo‘lishi mumkin.

Cloud instance foydalanuvchiga virtual resource modelini beradi.

Yaxshi abstraction

Yaxshi abstraction:

  • aniq vazifaga ega;
  • barqaror contract beradi;
  • ichki o‘zgarishni yashiradi;
  • foydalanuvchi uchun kam tushuncha talab qiladi;
  • noto‘g‘ri ishlatishni qiyinlashtiradi;
  • kerakli performance xususiyatlarini hujjatlashtiradi.

Leaky abstraction

Hech bir abstraction barcha tafsilotni to‘liq yashira olmaydi.

Pastki qatlam xususiyati yuqoriga chiqsa leaky abstraction deyiladi.

Masalan, database query API ishlatilsa ham:

ni bilish talab qilinishi mumkin.

Abstraction foydali, ammo fizik va operatsion cheklovlarni yo‘q qilmaydi.

Abstraction narxi

Har abstraction qo‘shimcha qatlam yaratadi.

Mumkin bo‘lgan xarajatlar:

Yuqori darajali interfeys performance-critical holatda pastki parametrlarni ochishi mumkin.

Noto‘g‘ri abstraction

Faqat code o‘xshash ko‘ringani uchun umumiy abstraction yaratilsa, kelajakda turli talablar uni murakkablashtiradi.

Belgilar:

  • ko‘p boolean parameter;
  • ko‘p special case;
  • caller type bo‘yicha ichki shart;
  • tushunarsiz umumiy nom;
  • bir o‘zgarish ko‘p unrelated joyga ta’sir qiladi.

Ba’zan ozgina takrorlanish noto‘g‘ri abstractiondan yaxshiroq.

Abstraction va encapsulation

Abstraction kerakli modelni ko‘rsatadi.

Encapsulation state va implementationga kirishni nazorat qiladi.

Masalan, BankAccount.withdraw() abstraction sifatida pul yechish amalini beradi. Private balance esa encapsulation orqali himoyalanadi.

Ular bog‘liq, lekin bir xil tushuncha emas.

Abstraction va polymorphism

Interface umumiy abstraction beradi. Polymorphism esa turli implementationlarni bir interface orqali ishlatadi.

Masalan:

Storage
├── LocalStorage
├── S3Storage
└── MemoryStorage

Caller Storage abstractioniga tayanadi.

Domain abstraction

Business domain tushunchalari kodda aniq model qilinadi.

Masalan:

  • Order;
  • Invoice;
  • Payment;
  • Subscription.

Faqat database table yoki primitive stringlardan foydalanish business qoidani tarqoq qiladi.

Domain abstraction terminlarni va invariantlarni bir joyda saqlaydi.

Abstraction boundary

Boundary qaysi tafsilot ichkarida, qaysi contract tashqarida ekanini belgilaydi.

Boundarylar:

Boundary kesib o‘tilganda type, error, ownership va latency aniq belgilanadi.

Error abstraction

Pastki xatoni yuqori qatlamga aynan uzatish har doim to‘g‘ri emas.

Masalan, database driver xatosi service API’da domain xatosiga aylantirilishi mumkin.

Biroq diagnostika uchun asl sabab log yoki error chain’da saqlanadi.

Test

Abstraction testda dependency o‘rniga fake yoki mock implementation berishga yordam beradi.

Lekin juda ko‘p mayda interface testni mo‘rt va kodni murakkab qilishi mumkin.

Abstraction haqiqiy variation yoki boundary mavjud joyda yaratiladi.

Diagnostika

Abstraction ostidagi muammoni tahlil qilishda qatlamlar bosqichma-bosqich ochiladi:

Yuqori qatlam xabari yetarli bo‘lmasa tracing va low-level metric ishlatiladi.

Abstraction inversion

Yuqori qatlam odatda pastki implementationga tayanmasligi kerak. Dependency inversion orqali ikkala qatlam barqaror contractga tayanadi. Masalan, business service aniq database driverga emas, repository interface’iga bog‘lanadi. Bu database tafsilotini yo‘q qilmaydi, ammo uning o‘zgarish ta’sirini chegaralaydi.

Abstraction barqarorligi

Barqaror abstraction ichki implementation o‘zgarganda public contractni imkon qadar saqlaydi. Contract tez-tez o‘zgarsa, abstraction chegarasi noto‘g‘ri tanlangan yoki hali yetarlicha shakllanmagan bo‘lishi mumkin.

Bog‘liq tushunchalar

Encapsulation, Interface, Abstract class, Polymorphism, API, Module, Information hiding, Leaky abstraction, Domain model