Sobes.tech
Junior

Abstraktsiyaning mohiyati nima?

sobes.tech AI

AIdan javob

Flutter'da abstraksiya, umumiy dasturlashda bo'lgani kabi, murakkab amalga oshirishlarni yashirish va soddalashtirilgan interfeys taqdim etishga qaratilgan. Bu yuqori darajadagi ko'rinishlar yaratish orqali amalga oshiriladi, ular asosiy tafsilotlarni yashiradi va konseptlar bilan ishlashga imkon beradi, aniq amalga oshirishlar bilan emas.

Asosiy g'oyalar:

  • Tafsilotlarni yashirish: Murakkab mantiq yoki ma'lumotlar tuzilmasi oddiy interfeys ortida yashiriladi.
  • Foydalanishni soddalashtirish: Dasturchi amalga oshirish tafsilotlariga kirishmasdan, abstrakt tasvir bilan ishlaydi.
  • Moslashuvchanlikni oshirish: Ichki amalga oshirishdagi o'zgarishlar, interfeys o'zgarmagan holda, uni ishlatadigan kodga ta'sir qilmaydi.
  • Qayta ishlatish imkoniyati: Abstrakt komponentlar turli joylarda ishlatilishi mumkin.

Flutter'da misollar:

  • Vidgetlar: Vidgetlar foydalanuvchi interfeys elementlari uchun abstraktsiyalar. Biz Container, Row, Column va boshqalarni ishlatamiz, ularning ichki amalga oshirishini bilmasdan.
  • Asinxron dasturlash: Future va Stream asinxron operatsiyalar bilan ishlashni abstraktsiya qiladi, oqimlar va voqealar bilan ishlash tafsilotlarini yashiradi.
  • Arxitektura naqshlari: BLoC, Provider yoki Riverpod kabi naqshlardan foydalanish, UI va biznes mantiqini ajratadi.

Abstraktsiya bilan kod misoli:

// Ma'lumot manbai uchun abstrakt sinf
abstract class DataSource {
  Future<String> fetchData();
}

// HTTP ni ishlatadigan amalga oshirish
class HttpDataSource implements DataSource {
  @override
  Future<String> fetchData() async {
    // Bu yerda HTTP so'rovlar bilan murakkab mantiq
    return "HTTP dan ma'lumotlar";
  }
}

// Mahalliy saqlashni ishlatadigan amalga oshirish
class LocalDataSource implements DataSource {
  @override
  Future<String> fetchData() async {
    // Bu yerda mahalliy saqlash bilan murakkab mantiq
    return "Mahalliy saqlashdan ma'lumotlar";
  }
}

// DataSource abstraktsiyasini ishlatadigan sinf
class Repository {
  final DataSource dataSource;

  Repository(this.dataSource);

  Future<String> getData() {
    return dataSource.fetchData();
  }
}

Ushbu misolda, Repository faqat DataSource abstraktsiyasi bilan ishlaydi, ma'lumotlar qaerdan kelayotganiga (HTTP, mahalliy saqlash va boshqalar) e'tibor bermaydi. Bu, ma'lumot manbasini osonlik bilan o'zgartirish imkonini beradi, Repository kodini o'zgartirmasdan.