Junior
Mis on abstraktsiooni olemus?
sobes.tech AI
Vastus AI-lt
Flutteris abstraktsioon, nagu ka üldiselt programmeerimises, on seotud keerulise teostuse varjamise ja lihtsustatud liidese pakkumisega suhtlemiseks. Seda saavutatakse kõrgetasemeliste vaadete loomisega, mis varjavad allolevaid detaile ja võimaldavad töötada kontseptsioonidega, mitte konkreetse teostusega.
Põhiteooriad:
- Detailide varjamine: Keeruline loogika või andmestruktuur varjatakse lihtsa liidese taha.
- Kasutamise lihtsustamine: Arendaja suhtleb abstraktse vaatega, mitte süvenedes teostuse detailidesse.
- Paindlikkuse suurendamine: Sise-implementatsiooni muutmine ei mõjuta koodi, mis kasutab abstraktsiooni, kuni liides jääb samaks.
- Taaskasutusvõimaluse suurendamine: Abstraktsed komponendid võivad olla kasutusel erinevates rakenduse osades.
Näited Flutteris:
- Vidinad: Vidinad on kasutajaliidese elementide abstraktsioonid. Kasutame
Container,Row,Columnja teisi, teadmata nende sisemist teostust. - Asünkroonne programmeerimine:
FuturejaStreamabstraktsioonid varjavad asünkroonsete operatsioonide tööd, varjates voogude ja sündmuste üksikasju. - Arhitektuurimudelid: Kasutatakse mustreid nagu BLoC, Provider või Riverpod, mis on abstraktsiooni vorm, eraldades UI ja äriloogika.
Näide abstraktsiooni kasutamisest:
// Andmeallika abstraktne klass
abstract class DataSource {
Future<String> fetchData();
}
// HTTP kasutav teostus
class HttpDataSource implements DataSource {
@override
Future<String> fetchData() async {
// Siin keeruline loogika HTTP-päringutega
return "Andmed HTTP-st";
}
}
// Kohaliku salvestuse kasutav teostus
class LocalDataSource implements DataSource {
@override
Future<String> fetchData() async {
// Siin keeruline loogika kohaliku salvestusega
return "Andmed kohalikust salvestusest";
}
}
// Klass, mis kasutab DataSource abstraktsiooni
class Repository {
final DataSource dataSource;
Repository(this.dataSource);
Future<String> getData() {
return dataSource.fetchData();
}
}
Selles näites suhtleb Repository ainult DataSource abstraktsiooniga, muretsemata selle pärast, kust andmed täpselt tulevad (HTTP, kohalik salvestus jne). See võimaldab andmeallikat hõlpsasti muuta, muutmata Repository koodi.