Programarea bazată pe flux este o metodă de proiectare a aplicațiilor și arhitecturii computerizate, care este spre deosebire de metodele tradiționale structurate de proiectare a aplicațiilor, prin aceea că datele sunt destinate să fie procesate într-un flux de componente care nu sunt conectate între ele și care utilizează un sistem de mesagerie extern pentru a comunica . În cadrul programării bazate pe flux, accentul este pus pe transformarea datelor prin utilizarea diferitelor componente, care în esență sunt module sau funcții încapsulate care nu au nicio legătură directă cu celelalte componente ale programului. Fiecare dintre fluxurile de date și alte evenimente sunt gestionate de un sistem extern de transmitere a mesajelor, care nu este diferit de unele tipuri de protocoale de rețea, în care un pachet de informații (IP) este livrat unui modul prin utilizarea unui port abstract. Această vizualizare de proiectare bazată pe componente permite unei aplicații să aibă module de cod dezvoltate separat, care trebuie doar să răspundă la un mesaj de sistem, să proceseze un IP și apoi să elibereze IP-ul înapoi în sistem. Această abordare este utilă pe sisteme distribuite, rețele și cu arhitecturi de programe bazate pe Internet și web, cum ar fi serverele de comerț electronic.
Unul dintre elementele fundamentale ale programării bazate pe flux este ideea unui nod, proces sau modul izolat. Aceasta poate fi considerată ca o bucată de cod sursă de program care nu are nicio dependență directă de alte module, făcând aproape modulul o bucată de sine stătătoare a aplicației care poate fi apelată ori de câte ori este nevoie. Fiecare componentă nu se bazează pe apelarea secvențială cu o altă componentă, astfel încât componentele unei aplicații pot fi aranjate și utilizate în orice ordine, permițând să existe mai multe fluxuri de date unice pe măsură ce informațiile se deplasează prin sistem.
Fiecare dintre modulele individuale din programarea bazată pe flux acceptă date printr-o interfață abstractă cunoscută sub numele de port, care funcționează la fel ca un port de date într-o rețea de calculatoare. Datele sunt trimise către un port printr-un buffer care are o dimensiune limitată, dar transformă mai multe IP-uri într-un flux care este alimentat în mod constant la port. Un singur port se poate referi la mai multe instanțe ale unei singure componente, făcând structura ușor de utilizat pe un sistem distribuit sau pentru procesare paralelă.
Datele conținute într-un pachet de informații sunt manevrate prin module de un sistem de mesagerie extern. În programarea bazată pe flux, acest sistem de mesagerie este separat de module și IP-uri și gestionează fluxul programului numai prin utilizarea de buffere care sunt legate de porturi. Sistemul de mesagerie practic nu cunoaște ceea ce modulele sunt sau fac și nicio preocupare reală cu privire la datele conținute în IP-urile pe care modulele le procesează.
Diviziunile și modularitatea fiecăreia dintre componentele care constituie aplicațiile de programare bazate pe flux se pretează bine la procese precum depanarea și dezvoltarea orientată spre echipă. O mare parte din cod este încapsulat, astfel încât codul sursă are un potențial ridicat de reutilizare. Aceasta înseamnă, de asemenea, că actualizarea sau scalarea unei aplicații care utilizează programarea bazată pe flux poate fi mai ușoară decât cu o aplicație mai integrată, deoarece sistemul de mesagerie, modulele și sistemul de porturi pot fi schimbate fiecare în mod independent, fără a afecta programul mai mare.