La programmazione basata sul flusso è un metodo di progettazione di applicazioni e architetture informatiche diverso dai tradizionali metodi strutturati di progettazione di applicazioni in quanto i dati sono destinati ad essere elaborati in un flusso da componenti non collegati tra loro e utilizzano un sistema di messaggistica esterno per comunicare . Nella programmazione basata sul flusso, l’attenzione è posta sulla trasformazione dei dati utilizzando componenti diversi, che essenzialmente sono moduli o funzioni incapsulati che non hanno una connessione diretta con gli altri componenti del programma. Ciascuno dei flussi di dati e degli altri eventi è gestito da un sistema esterno di passaggio dei messaggi che non è diverso da alcuni tipi di protocolli di rete, in cui un pacchetto di informazioni (IP) viene consegnato a un modulo attraverso l’uso di una porta astratta. Questa visualizzazione di progettazione basata sui componenti consente a un’applicazione di avere moduli di codice sviluppati separatamente che devono solo rispondere a un messaggio di sistema, elaborare un IP e quindi rilasciare l’IP nel sistema. Questo approccio è utile su sistemi distribuiti, reti e con Internet e architetture di programmi basate sul Web come i server di e-commerce.
Uno degli elementi costitutivi fondamentali della programmazione basata sul flusso è l’idea di un nodo, processo o modulo isolato. Questo può essere pensato come un pezzo di codice sorgente del programma che non ha dipendenze dirette da altri moduli, rendendo quasi il modulo un pezzo autonomo dell’applicazione che può essere chiamato ogni volta che è necessario. Ciascun componente non fa affidamento sull’essere chiamato in sequenza con un altro componente, quindi i componenti di un’applicazione possono essere organizzati e utilizzati in qualsiasi ordine, consentendo l’esistenza di più flussi di dati univoci mentre le informazioni si spostano attraverso il sistema.
Ciascuno dei singoli moduli nella programmazione basata sul flusso accetta i dati attraverso un’interfaccia astratta nota come porta, che funziona in modo molto simile a una porta dati all’interno di una rete di computer. I dati vengono inviati a una porta tramite un buffer di dimensioni limitate ma che trasforma più IP in un flusso che viene costantemente inviato alla porta. Una singola porta può riguardare più istanze di un singolo componente, rendendo la struttura facile da usare su un sistema distribuito o per l’elaborazione parallela.
I dati contenuti in un pacchetto informativo vengono manovrati attraverso i moduli da un sistema di messaggistica esterno. Nella programmazione basata sul flusso, questo sistema di messaggistica è separato dai moduli e dagli IP e gestisce solo il flusso del programma attraverso l’uso di buffer collegati alle porte. Il sistema di messaggistica fondamentalmente non ha alcuna conoscenza di ciò che i moduli stanno o stanno facendo e nessuna reale preoccupazione su quali dati sono contenuti all’interno degli IP che i moduli stanno elaborando.
Le divisioni e la modularità di ciascuno dei componenti che costituiscono le applicazioni di programmazione basate sul flusso si prestano bene a processi come il debug e lo sviluppo orientato al team. Gran parte del codice è incapsulato, quindi il codice sorgente ha un alto potenziale di riutilizzabilità. Ciò significa anche che l’aggiornamento o il ridimensionamento di un’applicazione che utilizza la programmazione basata sul flusso può essere più semplice rispetto a un’applicazione più integrata, poiché il sistema di messaggistica, i moduli e il sistema di porte possono essere modificati indipendentemente senza influire sul programma più ampio.