Programování na základě dat - Data-driven programming

v programování, programování založené na datech je paradigma programování ve kterém programové příkazy spíše než definují posloupnost kroků, které mají být provedeny, popisují data, která mají být porovnána, a požadované zpracování.[1] Standardní příklady jazyků založených na datech jsou jazyky pro zpracování textu sed a AWK,[1] kde data jsou posloupností řádků v vstupní proud - tyto jsou tedy známé také jako řádkově orientované jazyky - a porovnávání vzorů se primárně provádí pomocí regulární výrazy nebo čísla řádků.

Související paradigmata

Programování založené na datech je podobné programování řízené událostmi, v tom, že oba jsou strukturovány jako porovnávání vzorů a výsledné zpracování a jsou obvykle implementovány a hlavní smyčka, ačkoli se obvykle používají v různých doménách. Model podmínky / akce je také podobný aspektově orientované programování, kde když a připojit bod (podmínka) je dosaženo, a pointcut (akce) je provedena. U některých se používá podobné paradigma sledování rámce jako DTrace, kde je uveden seznam sond (přístrojových bodů) a souvisejících akcí, které se provádějí, když je podmínka splněna.

Přizpůsobení abstraktní datový typ návrhové metody do objektově orientované programování vede k designu založenému na datech.[2] Tento typ designu se někdy používá v objektově orientovaném programování k definování tříd během koncepce softwaru.

Aplikace

Programování na základě dat se obvykle aplikuje na proudy strukturovaných dat, pro filtrování, transformaci, agregaci (například statistiku výpočtu) nebo volání jiných programů. Mezi typické streamy patří Záznam souborů, hodnoty oddělené oddělovačem nebo e-mailové zprávy, zejména pro filtrování e-mailů. Například program AWK může brát jako vstup proud výpisů protokolu a například posílat všechny do konzoly, zapisovat ty začínající na VAROVÁNÍ do souboru „VAROVÁNÍ“ a poslat e-mail na sysadmin v případě, že některý řádek začíná na „CHYBA“. Mohlo by to také zaznamenat, kolik varování je zaznamenáno denně. Alternativně lze zpracovávat proudy hodnot oddělených oddělovačem, zpracovávat každý řádek nebo agregované řádky, například součet nebo max. V e-mailu, jazyk jako procmail může určit podmínky, které se mají u některých e-mailů shodovat, a jaké akce je třeba provést (doručit, odrazit, odhodit, přeposlat atd.).

Některé jazyky založené na datech jsou Turing-kompletní, například AWK a dokonce i sed, zatímco jiné jsou záměrně velmi omezené, zejména pokud jde o filtrování. Extrémním příkladem toho druhého je pcap, která spočívá pouze v filtrování, přičemž jedinou akcí je „zachytit“. Méně extrémně síto má filtry a akce, ale v základním standardu nemá žádné proměnné ani smyčky, pouze umožňuje bezstavové příkazy filtrování: každý vstupní prvek je zpracováván samostatně. Proměnné umožňují stav, který umožňuje operace závislé na více než jednom vstupním prvku, jako je agregace (sčítání vstupů) nebo škrcení (povolte maximálně 5 e-mailů za hodinu od každého odesílatele nebo omezte opakované zprávy protokolu).

Jazyky založené na datech mají často výchozí akci: pokud se žádná podmínka neshoduje, mohou řádkově orientované jazyky řádek vytisknout (jako v sed) nebo doručit zprávu (jako na sítu). V některých aplikacích, jako je filtrování, lze provádět párování výhradně (tak jen za prvé odpovídající prohlášení), zatímco v ostatních případech Všechno jsou použity shodné příkazy. V obou případech selhání shody žádný vzor může být „výchozí chování“ nebo jej lze považovat za chybu, která bude na konci zachycena příkazem catch-all.

Výhody a problémy

I když se výhody a problémy mohou mezi implementacemi lišit, existuje několik velkých potenciálních výhod a problémů s tímto paradigmatem. Funkčnost jednoduše vyžaduje, aby to věděla abstraktní datový typ proměnných, se kterými pracuje. Funkce a rozhraní lze použít na všechny objekty se stejnými datovými poli, například na „pozici“ objektu. Data lze podle preferencí seskupovat do objektů nebo „entit“ s malými nebo žádnými důsledky.

Zatímco design založený na datech brání propojení dat a funkčnosti, v některých případech se tvrdí, že programování založené na datech vedlo ke špatnému objektově orientovaný design, zejména při práci s abstraktnějšími daty. Důvodem je, že objekt nebo entita čistě založená na datech je definována tak, jak je zastoupeny. Jakýkoli pokus o změnu struktury objektu by okamžitě narušil funkce, které se na něj spoléhají.

Jako příklad lze uvést směry jízdy jako řada křižovatek (dvě protínající se ulice), kde musí řidič odbočit doprava nebo doleva. Pokud je křižovatka (ve Spojených státech) v datech reprezentována symbolem PSČ (Pětimístné číslo) a dvě názvy ulic (řetězce textu), chyby se mohou objevit ve městě, kde jsou ulice protínají vícekrát. I když tento příklad může být příliš zjednodušený, restrukturalizace dat je v softwarovém inženýrství poměrně častým problémem, ať už kvůli eliminaci chyb, zvýšení efektivity nebo podpoře nových funkcí.

Jazyky

Viz také

Reference

  1. ^ A b C Stutz, Michael (19. září 2006). „Začínáme s GAWK: Základy jazyka AWK“. developerWorks. IBM. Archivovány od originál dne 20. května 2011. Citováno 2010-10-23. [AWK se] často nazývá jazyk založený na datech - programové příkazy spíše než posloupnost kroků programu popisují vstupní data, která se mají shodovat a zpracovat.
  2. ^ Wirfs-Brock, Rebecca; Wilkerson, Brian (1989). „Objektově orientovaný design: přístup založený na odpovědnosti“. Sborník konference o objektově orientovaných programovacích systémech, jazycích a aplikacích. New York: ACM: 71–75. doi:10.1145/74877.74885.
  3. ^ Ierusalimschy, Roberto; de Figueiredo, Luiz Henrique; Celes, Waldemar (03.02.2017). „Lua 5.3 Reference Manual“. www.lua.org. Citováno 2018-06-05.
  4. ^ „Clojure“. www.clojure.org. Citováno 2018-06-05.

externí odkazy