Sobes.tech
Junior

Abstraksiya mahiyyəti nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Flutter-də abstraksiya, ümumiyyətlə proqramlaşdırmada olduğu kimi, mürəkkəb həyata keçirmələri gizlətməyə və sadələşdirilmiş bir interfeys təqdim etməyə yönəlib. Bu, aşağı səviyyəli görünüşlər yaradaraq həyata keçirilir, onlar əsas detalları gizlədir və konseptlərlə işləməyə imkan verir, konkret həyata keçirmələr ilə deyil.

Əsas fikirlər:

  • Detalları gizlətmək: Mürəkkəb məntiq və ya məlumat strukturları sadə interfeys arxasında gizlənir.
  • İstifadəni sadələşdirmək: İnkişaf etdirici, həyata keçirmə detalları ilə məşğul olmadan, abstrakt nümayəndəliklə işləyir.
  • Əlçatanlığı artırmaq: Daxili həyata keçirmədə dəyişikliklər, interfeys dəyişmədiyi müddətdə, onu istifadə edən kodu təsir etmir.
  • Yenidən istifadə: Abstrakt komponentlər müxtəlif hissələrdə istifadə oluna bilər.

Flutter-də nümunələr:

  • Vidgetlər: Vidgetlər, istifadəçi interfeysinin elementləri üzərində abstraksiyalardır. Container, Row, Column və digər istifadə edirik, onların daxili həyata keçirməsini bilmədən.
  • Asinxron proqramlaşdırma: FutureStream, asinxron əməliyyatlarla işləməni abstraktsiya edir, axınlar və hadisələrlə işləmə detalları gizlənir.
  • Memar nümunələri: BLoC, Provider və ya Riverpod kimi nümunələrin istifadəsi, UI və biznes məntiqini ayırır.

Abstraksiya ilə kod nümunəsi:

// Məlumat mənbəyi üçün abstrakt sinif
abstract class DataSource {
  Future<String> fetchData();
}

// HTTP istifadə edən həyata keçirmə
class HttpDataSource implements DataSource {
  @override
  Future<String> fetchData() async {
    // Burada HTTP sorğuları ilə mürəkkəb məntiq
    return "HTTP-dən məlumatlar";
  }
}

// Yerli yaddaş istifadə edən həyata keçirmə
class LocalDataSource implements DataSource {
  @override
  Future<String> fetchData() async {
    // Burada yerli yaddaş ilə mürəkkəb məntiq
    return "Yerli yaddaşdan məlumatlar";
  }
}

// DataSource abstraksiyasını istifadə edən sinif
class Repository {
  final DataSource dataSource;

  Repository(this.dataSource);

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

Bu nümunədə, Repository yalnız DataSource abstraksiyası ilə əlaqə qurur, məlumatların haradan gəldiyi ilə maraqlanmır (HTTP, yerli yaddaş və s.). Bu, məlumat mənbəsini asanlıqla dəyişməyə imkan verir, Repository kodunu dəyişdirmədən.