Sobes.tech
Junior

Kuo iš esmės yra abstrakcijos esmė?

sobes.tech AI

Atsakymas iš AI

„Flutter“ abstrakcija, kaip ir programavime apskritai, yra susijusi su sudėtingos įgyvendinimo slėpimu ir supaprastinto sąsajos teikimu sąveikai. Tai pasiekiama kuriant aukšto lygio vaizdus, kurie slepia žemesnes detales ir leidžia dirbti su koncepcijomis, o ne su konkrečia įgyvendinimu.

Pagrindinės idėjos:

  • Detalių slėpimas: Sudėtinga logika arba duomenų struktūra slepiama už paprasto sąsajos.
  • Paprastinimas naudojimo: Programuotojas sąveikauja su abstrakčiu vaizdu, nesigilindamas į įgyvendinimo detales.
  • Lankstumo didinimas: Vidinė įgyvendinimo keitimas neturi įtakos kodui, naudojančiam abstrakciją, kol sąsaja lieka ta pati.
  • Pakartotinio naudojimo didinimas: Abstraktūs komponentai gali būti naudojami įvairiuose programos dalyse.

Pavyzdžiai Flutter:

  • Vaidmenys: Vaidmenys yra abstrakcijos virš vartotojo sąsajos elementų. Mes naudojame Container, Row, Column ir kitus, nežinodami jų vidinės įgyvendinimo detalės.
  • Asinchroninis programavimas: Future ir Stream abstrakcijos, kurios slepia asinchroninių operacijų darbą, paslėpdamos srautų ir įvykių detales.
  • Architektūros modeliai: Naudojami modeliai, tokie kaip BLoC, Provider ar Riverpod, kurie yra abstrakcijos forma, skirianti UI ir verslo logiką.

Pavyzdys su abstrakcijos naudojimu:

// Duomenų šaltinio abstraktus klasė
abstract class DataSource {
  Future<String> fetchData();
}

// HTTP naudojanti įgyvendinimas
class HttpDataSource implements DataSource {
  @override
  Future<String> fetchData() async {
    // Čia sudėtinga logika su HTTP užklausomis
    return "Duomenys iš HTTP";
  }
}

// Vietinio saugyklos naudojanti įgyvendinimas
class LocalDataSource implements DataSource {
  @override
  Future<String> fetchData() async {
    // Čia sudėtinga logika su vietiniu saugykla
    return "Duomenys iš vietinio saugyklos";
  }
}

// Klasė, naudojanti DataSource abstrakciją
class Repository {
  final DataSource dataSource;

  Repository(this.dataSource);

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

Šiame pavyzdyje Repository bendrauja tik su DataSource abstrakcija, nesirūpindamas, iš kur tiksliai ateina duomenys (HTTP, vietinis saugojimas ir kt.). Tai leidžia lengvai keisti duomenų šaltinį, nekeičiant Repository kodo.