Programiranje protoka podataka je model koji se koristi pri konceptualizaciji i implementaciji softvera. Fokus programiranja protoka podataka je usredotočiti dizajn sustava na podatke koji se obrađuju za razliku od koda koji se koristi za manipulaciju informacijama. Rezultat je sustav u kojem su osnovne računske funkcije izolirane u male module poznate kao čvorovi; oni prihvaćaju neke podatke kada se postigne određeno stanje, obrađuju podatke i potiskuju izlaz natrag u kontrolni tijek programa, potencijalno prosljeđujući informacije drugom čvoru. Ovo je u suprotnosti s normalnom paradigmom imperativnog programiranja, u kojoj neposredni popis naredbi definira kontrolni tijek programa, a ne stanje podataka. Postoji nekoliko namjena programa koji su izgrađeni oko protoka podataka, uključujući paralelnu obradu, sustave u stvarnom vremenu i ugrađene sustave.
U implicitnom programiranju, koji je najčešće korišten tip računalnog programskog jezika, programi se često izrađuju iz dijagrama toka koji sadrže niz poziva funkcija ili metoda, pri čemu se svaki poziv grana na druge funkcije. Ova vrsta programiranja inherentno se usredotočuje na postupke koji se koriste za manipuliranje programskim podacima. Kada se koristi programiranje protoka podataka, fokus se uklanja iz eksplicitnih poziva funkcija i umjesto toga se fokusira na stvaranje apstraktnih modula koji prihvaćaju podatke kada podaci ili program zadovolje ili postignu određene uvjete. U ovom trenutku, umjesto poziva funkcije, dizajn programa uzrokuje protok podataka prema modulima ili čvorovima, gdje potencijalno ulaze u tok za obradu od strane više čvorova.
Jedan apstraktni primjer kako funkcionira programiranje protoka podataka može se vidjeti kada se razmatra kako napuniti čašu vodom iz slavine. Imperativni pristup bio bi generiranje funkcija za uključivanje vode, premještanje čaše na odgovarajuće mjesto ispod slavine, a zatim punjenje čaše vodom. Kroz primjer programiranja protoka podataka, slavina umjesto toga čeka dok se šalica ne postavi ispod nje kako bi je počela puniti, a što god da se kreće, šalica čeka dok čaša ne postigne određeno stanje, kao što je puna, kako bi je uklonila ispod slavine. . Stvarni programski mehanizmi koji mijenjaju stanje podataka nisu neposredna briga dizajna.
Prednost programiranja protoka podataka je aplikacija ili sustav u kojem se različitim čvorovima može manevrirati kako bi se stvorili potpuno jedinstveni tijekovi podataka bez nužnog potrebnog čvrstog kodiranja odnosa. Dodatno, program koji koristi programiranje protoka podataka aktivno je spreman za obradu podataka u svakom trenutku, umjesto da eksplicitno ulazi u stanje ili uzorak koji zaključava pristup ili izvršavanje od strane jednog ili više čvorova. Dizajn i koncept čvorova znači da se aplikacije za programiranje protoka podataka mogu lako dizajnirati za korištenje na distribuiranim sustavima i paralelnim procesorima.