Programowanie przepływu danych to model używany podczas konceptualizacji i wdrażania oprogramowania. Programowanie przepływu danych koncentruje się na skoncentrowaniu projektu systemu na przetwarzanych danych, a nie na kodzie używanym do manipulowania informacjami. Rezultatem jest system, w którym podstawowe funkcje obliczeniowe są izolowane w małych modułach znanych jako węzły; akceptują one niektóre dane po osiągnięciu określonego stanu, przetwarzają dane i przesyłają dane wyjściowe z powrotem do przepływu sterowania programu, potencjalnie przekazując informacje do innego węzła. Jest to przeciwieństwo normalnego paradygmatu programowania imperatywnego, w którym bezpośrednia lista poleceń definiuje przepływ sterowania programu, a nie stan danych. Istnieje kilka zastosowań programów zbudowanych wokół przepływu danych, w tym przetwarzanie równoległe, systemy czasu rzeczywistego i systemy wbudowane.
W programowaniu niejawnym, które jest najczęściej używanym typem języka programowania komputerowego, programy często są konstruowane na podstawie schematów blokowych, które zawierają sekwencję wywołań funkcji lub metod, przy czym każde wywołanie rozgałęzia się na inne funkcje. Ten rodzaj programowania z natury koncentruje się na procedurach używanych do manipulowania danymi programu. Gdy używane jest programowanie przepływu danych, fokus jest usuwany z jawnych wywołań funkcji, a zamiast tego koncentruje się na tworzeniu abstrakcyjnych modułów, które akceptują dane, gdy dane lub program spełniły lub osiągnęły określone warunki. W tym momencie, zamiast wywoływania funkcji, projekt programu powoduje, że dane przepływają do modułów lub węzłów, gdzie potencjalnie wchodzą w strumień w celu przetworzenia przez wiele węzłów.
Jeden abstrakcyjny przykład tego, jak działa programowanie przepływu danych, można zobaczyć, rozważając, jak napełnić szklankę wodą z kranu. Niezbędnym podejściem byłoby wygenerowanie funkcji, aby włączyć wodę, przesunąć szklankę w odpowiednie miejsce pod kranem, a następnie napełnić szklankę wodą. W przykładzie programowania przepływu danych kran zamiast tego czeka, aż kubek zostanie umieszczony pod nim, aby rozpocząć jego napełnianie, a cokolwiek się porusza, kubek czeka, aż kubek osiągnie określony stan, taki jak pełny, aby usunąć go spod kranu . Rzeczywiste mechanizmy programistyczne, które zmieniają stan danych, nie są bezpośrednim przedmiotem zainteresowania projektu.
Zaletą programowania przepływu danych jest aplikacja lub system, w którym można manewrować różnymi węzłami, aby tworzyć całkowicie unikalne przepływy danych, bez konieczności zakodowania relacji. Ponadto program korzystający z programowania przepływu danych jest aktywnie przygotowany do przetwarzania danych przez cały czas, zamiast jawnie wchodzić w stan lub wzorzec, który blokuje dostęp lub wykonywanie przez jeden lub więcej węzłów. Konstrukcja i koncepcja węzłów oznacza, że aplikacje do programowania przepływu danych można łatwo zaprojektować do użytku w systemach rozproszonych i procesorach równoległych.