Programowanie oparte na danych - Data-driven programming

W programowaniu komputerowym , programowanie oparte na danych to paradygmat programowania , w którym sprawozdanie programowe opisują dane mają być dopasowane i przetwarzanie wymagane zamiast definiowania sekwencję kroków, jakie należy podjąć. Standardowymi przykładami języków sterowanych danymi są języki przetwarzania tekstu sed i AWK , w których dane są sekwencją wierszy w strumieniu wejściowym – są one zatem znane również jako języki zorientowane wierszowo – a dopasowywanie wzorców odbywa się głównie za pomocą wyrażeń regularnych lub numery linii.

Powiązane paradygmaty

Programowanie sterowane danymi jest podobne do programowania sterowanego zdarzeniami , ponieważ oba są skonstruowane jako dopasowywanie wzorców i przetwarzanie wynikowe i są zwykle implementowane przez pętlę główną , chociaż zwykle są stosowane do różnych domen. Model warunku/akcji jest również podobny do programowania aspektowego , gdzie po osiągnięciu punktu połączenia (warunku) wykonywany jest punkt przecięcia (akcja). Podobny paradygmat jest używany w niektórych frameworkach śledzących , takich jak DTrace , gdzie wymienia się sondy (punkty oprzyrządowania) i powiązane akcje, które są wykonywane, gdy warunek jest spełniony.

Adaptacja abstrakcyjnych metod projektowania typów danych do programowania obiektowego skutkuje projektowaniem opartym na danych. Ten rodzaj projektowania jest czasami używany w programowaniu obiektowym do definiowania klas podczas koncepcji oprogramowania.

Aplikacje

Programowanie sterowane danymi jest zwykle stosowane do strumieni danych strukturalnych w celu filtrowania, przekształcania, agregowania (np. statystyk obliczeniowych) lub wywoływania innych programów. Typowe strumienie obejmują pliki dziennika , wartości rozdzielone ogranicznikami lub wiadomości e-mail, zwłaszcza do filtrowania poczty e-mail . Na przykład program AWK może przyjąć jako dane wejściowe strumień instrukcji dziennika i na przykład wysłać wszystkie do konsoli, zapisać te zaczynające się od OSTRZEŻENIE do pliku „OSTRZEŻENIE” i wysłać e-mail do administratora systemu w przypadku, gdy jakakolwiek linia zaczyna się od "BŁĄD". Może również rejestrować, ile ostrzeżeń jest rejestrowanych dziennie. Alternatywnie można przetwarzać strumienie wartości oddzielonych ogranicznikami, przetwarzając każdy wiersz lub zagregowane wiersze, takie jak suma lub max. W e-mailu język taki jak procmail może określać warunki, które mają być spełnione w niektórych wiadomościach e-mail, oraz jakie działania należy podjąć (dostarczenie, odrzucenie, odrzucenie, przekazanie itp.).

Niektóre języki oparte na danych są Turing-complete , takie jak AWK, a nawet sed, podczas gdy inne są celowo bardzo ograniczone, zwłaszcza do filtrowania. Skrajnym przykładem tego ostatniego jest pcap , który polega jedynie na filtrowaniu, a jedyną akcją jest „przechwytywanie”. Mniej ekstremalnie, sito ma filtry i akcje, ale w podstawowym standardzie nie ma zmiennych ani pętli, pozwalając tylko na bezstanowe instrukcje filtrowania: każdy element wejściowy jest przetwarzany niezależnie. Zmienne allow state, które umożliwiają operacje zależne od więcej niż jednego elementu wejściowego, takie jak agregacja (sumowanie danych wejściowych) lub ograniczanie przepustowości (zezwalają na maksymalnie 5 wiadomości e-mail na godzinę od każdego nadawcy lub ograniczają powtarzające się komunikaty dziennika).

Języki sterowane danymi często mają domyślną akcję: jeśli żaden warunek nie pasuje, języki zorientowane liniowo mogą wydrukować linię (jak w sed) lub dostarczyć komunikat (jak w sieve). W niektórych aplikacjach, takich jak filtrowanie, dopasowywanie może być wykonywane wyłącznie (a więc tylko pierwsza instrukcja dopasowująca), podczas gdy w innych stosowane są wszystkie instrukcje dopasowujące. W każdym przypadku niepowodzenie w dopasowaniu dowolnego wzorca może być "zachowaniem domyślnym" lub może być postrzegane jako błąd, który zostanie przechwycony przez instrukcję catch-all na końcu.

Korzyści i problemy

Chociaż korzyści i problemy mogą się różnić w zależności od wdrożenia, istnieje kilka dużych potencjalnych korzyści i problemów związanych z tym paradygmatem. Funkcjonalność wymaga po prostu znajomości abstrakcyjnego typu danych zmiennych, z którymi pracuje. Funkcje i interfejsy mogą być używane na wszystkich obiektach z tymi samymi polami danych, na przykład „pozycja” obiektu. Dane mogą być grupowane w obiekty lub „byty” zgodnie z preferencjami z niewielkimi konsekwencjami lub bez żadnych konsekwencji.

Chociaż projektowanie oparte na danych uniemożliwia łączenie danych i funkcjonalności, w niektórych przypadkach twierdzi się, że programowanie oparte na danych prowadzi do złego projektowania obiektowego , szczególnie w przypadku bardziej abstrakcyjnych danych. Dzieje się tak, ponieważ obiekt lub jednostka oparta wyłącznie na danych jest definiowana przez sposób, w jaki jest reprezentowana . Każda próba zmiany struktury obiektu natychmiast przerwałaby funkcje, które na nim polegają.

Jako przykład można przedstawić wskazówki dojazdu jako serię skrzyżowań (dwie przecinające się ulice), na których kierowca musi skręcić w prawo lub w lewo. Jeśli skrzyżowanie (w Stanach Zjednoczonych) jest reprezentowane w danych przez kod pocztowy (5-cyfrowy numer) i dwie nazwy ulic (ciągi tekstu), błędy mogą pojawić się w przypadku napotkania miasta, w którym ulice przecinają się wielokrotnie. Chociaż ten przykład może być zbyt uproszczony, restrukturyzacja danych jest dość powszechnym problemem w inżynierii oprogramowania, aby wyeliminować błędy, zwiększyć wydajność lub wspierać nowe funkcje.

Języki

Zobacz też

Bibliografia

Zewnętrzne linki