Flödesbaserad programmering är en metod för att designa datorapplikationer och arkitekturer som skiljer sig från traditionella strukturerade metoder för applikationsdesign genom att data är avsedda att bearbetas i en ström av komponenter som inte är anslutna till varandra och använder ett externt meddelandesystem för att kommunicera . Under flödesbaserad programmering ligger fokus på att transformera data genom att använda olika komponenter, som i huvudsak är inkapslade moduler eller funktioner som inte har någon direkt koppling till de andra komponenterna i programmet. Var och en av dataströmmarna och andra händelser hanteras av ett externt system för meddelandeöverföring som inte skiljer sig från vissa typer av nätverksprotokoll, där ett informationspaket (IP) levereras till en modul genom att använda en abstrakt port. Denna komponentbaserade designvy tillåter en applikation att ha separat utvecklade kodmoduler som bara behöver svara på ett systemmeddelande, bearbeta en IP och sedan släppa tillbaka IP:n i systemet. Detta tillvägagångssätt är användbart på distribuerade system, nätverk och med internet- och webbaserade programarkitekturer som e-handelsservrar.
En av de grundläggande byggstenarna i flödesbaserad programmering är idén om en isolerad nod, process eller modul. Detta kan ses som ett stycke programkällkod som inte har några direkta beroenden av några andra moduler, vilket nästan gör modulen till en fristående del av applikationen som kan anropas närhelst den behövs. Varje komponent är inte beroende av att anropas sekventiellt med en annan komponent, så komponenterna i en applikation kan ordnas och användas i valfri ordning, vilket gör att flera unika dataflöden kan existera när information rör sig genom systemet.
Var och en av de individuella modulerna i flödesbaserad programmering accepterar data genom ett abstrakt gränssnitt som kallas en port, som fungerar ungefär som en dataport i ett datornätverk. Data skickas till en port genom en buffert som har en begränsad storlek men förvandlar flera IP-adresser till en ström som ständigt matas till porten. En enskild port kan relatera till flera instanser av en enskild komponent, vilket gör strukturen enkel att använda på ett distribuerat system eller för parallell bearbetning.
Data som finns i ett informationspaket manövreras genom modulerna av ett externt meddelandesystem. I flödesbaserad programmering är detta meddelandesystem separat från modulerna och IP:erna och hanterar endast programflödet genom användning av buffertar som är bundna till portar. Meddelandesystemet har i princip ingen kunskap om vad modulerna gör eller gör och ingen verklig oro över vilken data som finns inom de IP-adresser som modulerna bearbetar.
Uppdelningen och modulariteten hos var och en av komponenterna som utgör flödesbaserade programmeringsapplikationer lämpar sig väl för processer som felsökning och teamorienterad utveckling. Mycket av koden är inkapslad, så källkoden har en hög återanvändbarhetspotential. Detta innebär också att det kan vara lättare att uppgradera eller skala en applikation som använder flödesbaserad programmering än med en mer integrerad applikation, eftersom meddelandesystemet, modulerna och portsystemet var och en kan ändras oberoende utan att det påverkar det större programmet.