Sobes.tech
Junior

Ի՞նչ է աբստրակցիայի էությունը։

sobes.tech AI

Պատասխան AI-ից

Աբստրակցիան Flutter-ում, ինչպես և ծրագրավորման ընդհանուր առմամբ, վերաբերում է բարդ իրականացման թաքցնելուն և պարզեցված ինտերֆեյս տրամադրելուն փոխազդեցության համար: Դա հասնում է բարձր մակարդակի ներկայացումներով, որոնք թաքցնում են ներքևի մանրամասները և թույլ են տալիս աշխատել կոնցեպցիաներով, ոչ թե կոնկրետ իրականացմամբ:

Հիմնական գաղափարներ՝

  • Մանրամասների թաքցում: Կոմպլեքս տրամաբանությունը կամ տվյալների կառուցվածքը թաքնվում է պարզ ինտերֆեյսի հետևում:
  • Օգտագործման պարզեցում: Ծրագրավորողը աշխատում է աբստրակտ ներկայացման հետ, առանց մտահոգվելու իրականացման մանրամասների մասին:
  • Ավելացնել ճկունություն: Ներքին իրականացման փոփոխությունը չի ազդում այն կոդի վրա, որը օգտագործում է աբստրակցիան, քանի դեռ ինտերֆեյսը մնում է նույնը:
  • Ավելացնել վերօգտագործելիություն: Աբստրակտ կոմպոնենտները կարող են օգտագործվել տարբեր մասերում հավելվածի:

Flutter-ում օրինակներ՝

  • Վիդջեթներ: Վիդջեթները հանդիսանում են օգտագործողի ինտերֆեյսի տարրերի աբստրակցիաներ: Մենք օգտագործում ենք Container, Row, Column և այլերը, չիմանալով նրանց ներքին իրականացման մանրամասները:
  • Ասինխրոն ծրագրավորում: Future և Stream աբստրակցիաներ են, որոնք թաքցնում են ասինխրոն օպերացիաների աշխատանքը, թաքցնելով հոսքերի և իրադարձությունների մանրամասները:
  • Արքիտեկտուրային օրինակներ: Օգտագործում են օրինակներ, ինչպիսիք են BLoC, Provider կամ Riverpod, որոնք աբստրակցիայի ձև են, բաժանելով UI-ն և բիզնես տրամաբանությունը:

Օրինակ կոդ՝ աբստրակցիայի օգտագործմամբ՝

// Տվյալների աղբյուրի աբստրակտ դաս
abstract class DataSource {
  Future<String> fetchData();
}

// HTTP-ով աշխատող իրականացում
class HttpDataSource implements DataSource {
  @override
  Future<String> fetchData() async {
    // Այստեղ բարդ տրամաբանություն HTTP հարցումներով
    return "HTTP-ից տվյալներ";
  }
}

// Լոկալ պահեստից աշխատող իրականացում
class LocalDataSource implements DataSource {
  @override
  Future<String> fetchData() async {
    // Այստեղ բարդ տրամաբանություն լոկալ պահեստի հետ
    return "Տվյալներ լոկալ պահեստից";
  }
}

// Կլաս, որը օգտագործում է DataSource աբստրակցիան
class Repository {
  final DataSource dataSource;

  Repository(this.dataSource);

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

Այս օրինակով, Repository աշխատում է միայն DataSource աբստրակտի հետ, չմտածելով, թե որտեղից են տվյալները (HTTP, լոկալ պահեստ և այլն): Սա թույլ է տալիս հեշտությամբ փոխել տվյալների աղբյուրը՝ առանց Repository կոդը փոխելու։