Voopõhine programmeerimine on arvutirakenduste ja -arhitektuuride kujundamise meetod, mis erineb traditsioonilistest struktureeritud rakenduste kujundamise meetoditest selle poolest, et andmed on ette nähtud vootöötlemiseks komponentide poolt, mis ei ole omavahel ühendatud ja mis kasutavad suhtlemiseks välist sõnumsidesüsteemi. . Voopõhise programmeerimise puhul keskendutakse andmete teisendamisele, kasutades erinevaid komponente, mis on sisuliselt kapseldatud moodulid või funktsioonid, millel puudub otsene seos programmi teiste komponentidega. Kõiki andmevooge ja muid sündmusi haldab väline sõnumiedastussüsteem, mis ei erine teatud tüüpi võrguprotokollidest, kus teabepakett (IP) toimetatakse moodulisse abstraktse pordi abil. See komponendipõhine disainivaade võimaldab rakendusel omada eraldi väljatöötatud koodimooduleid, mis peavad vastama ainult süsteemisõnumile, töötlema IP-d ja seejärel vabastama IP süsteemi tagasi. See lähenemine on kasulik hajutatud süsteemides, võrkudes ning Interneti- ja veebipõhiste programmiarhitektuuride, näiteks e-kaubanduse serverite puhul.
Voopõhise programmeerimise üks põhilisi ehitusplokke on isoleeritud sõlme, protsessi või mooduli idee. Seda võib pidada programmi lähtekoodi osaks, millel pole otsest sõltuvust ühestki teisest moodulist, mis muudab mooduli peaaegu eraldiseisvaks rakenduse osaks, mida saab igal ajal kutsuda. Iga komponent ei sõltu sellest, et neid kutsutakse järjestikku koos mõne teise komponendiga, nii et rakenduse komponente saab korraldada ja kasutada mis tahes järjekorras, võimaldades teabe liikumisel süsteemis eksisteerida mitmel ainulaadsel andmevool.
Iga voopõhise programmeerimise moodul võtab andmeid vastu abstraktse liidese kaudu, mida nimetatakse pordiks ja mis toimib sarnaselt arvutivõrgu andmepordiga. Andmed saadetakse porti läbi puhvri, mis on piiratud suurusega, kuid muudab mitu IP-d vooks, mida pidevalt porti toidetakse. Üks port võib olla seotud ühe komponendi mitme eksemplariga, muutes struktuuri hõlpsaks kasutamiseks hajutatud süsteemis või paralleelseks töötlemiseks.
Teabepaketis sisalduvad andmed manööverdatakse moodulite kaudu välise sõnumisüsteemi abil. Voopõhises programmeerimises on see sõnumsidesüsteem moodulitest ja IP-dest eraldiseisev ning haldab programmivoogu ainult portidega seotud puhvrite abil. Sõnumisüsteem ei tea põhimõtteliselt, mida moodulid teevad või teevad, ega ka tegelikku muret selle pärast, milliseid andmeid moodulite töödeldavates IP-des sisalduvad.
Iga voopõhise programmeerimisrakenduse komponendi jaotus ja modulaarsus sobivad hästi selliste protsesside jaoks nagu silumine ja meeskonnale suunatud arendus. Suur osa koodist on kapseldatud, seega on lähtekoodil suur taaskasutatavuse potentsiaal. See tähendab ka seda, et voopõhist programmeerimist kasutava rakenduse uuendamine või skaleerimine võib olla lihtsam kui integreerituma rakendusega, kuna sõnumisüsteemi, mooduleid ja pordisüsteemi saab kumbagi iseseisvalt muuta ilma suuremat programmi mõjutamata.