Srauto programavimas yra kompiuterių taikomųjų programų ir architektūrų projektavimo metodas, kuris skiriasi nuo tradicinių struktūrizuotų taikomųjų programų projektavimo metodų tuo, kad duomenys yra skirti srautu apdoroti komponentais, kurie nėra sujungti vienas su kitu ir naudoja išorinę pranešimų sistemą, kad galėtų susisiekti. . Taikant srautu pagrįstą programavimą, dėmesys sutelkiamas į duomenų transformavimą naudojant skirtingus komponentus, kurie iš esmės yra inkapsuliuoti moduliai arba funkcijos, neturinčios tiesioginio ryšio su kitais programos komponentais. Kiekvieną duomenų srautą ir kitus įvykius valdo išorinė pranešimų perdavimo sistema, kuri nesiskiria nuo kai kurių tinklo protokolų tipų, kuriuose informacijos paketas (IP) pristatomas į modulį naudojant abstraktų prievadą. Šis komponentais pagrįstas dizaino vaizdas leidžia programai turėti atskirai sukurtus kodo modulius, kuriems tereikia atsakyti į sistemos pranešimą, apdoroti IP ir grąžinti IP į sistemą. Šis metodas yra naudingas paskirstytose sistemose, tinkluose ir interneto bei žiniatinklio programų architektūrose, pvz., el. prekybos serveriuose.
Vienas iš pagrindinių srautu pagrįsto programavimo elementų yra izoliuoto mazgo, proceso ar modulio idėja. Tai gali būti laikoma programos šaltinio kodo dalimi, kuri neturi tiesioginės priklausomybės nuo kitų modulių, todėl modulis yra beveik atskira programos dalis, kurią galima iškviesti, kai tik reikia. Kiekvienas komponentas nėra priklausomas nuo to, ar bus iškviečiamas nuosekliai su kitu komponentu, todėl programos komponentai gali būti išdėstyti ir naudojami bet kokia tvarka, todėl informacijai judant sistemoje gali egzistuoti keli unikalūs duomenų srautai.
Kiekvienas srautu pagrįsto programavimo modulis priima duomenis per abstrakčią sąsają, vadinamą prievadu, kuri veikia panašiai kaip duomenų prievadas kompiuterių tinkle. Duomenys į prievadą siunčiami per buferį, kuris yra riboto dydžio, tačiau kelis IP paverčia srautu, kuris nuolat tiekiamas į prievadą. Vienas prievadas gali būti susijęs su keliais vieno komponento egzemplioriais, todėl struktūrą lengva naudoti paskirstytoje sistemoje arba lygiagrečiam apdorojimui.
Informaciniame pakete esantys duomenys yra manevruojami per modulius išorine pranešimų siuntimo sistema. Srauto pagrindu programuojant ši pranešimų sistema yra atskirta nuo modulių ir IP ir tik valdo programos srautą naudodama buferius, susietus su prievadais. Pranešimų siuntimo sistema iš esmės neturi žinių apie tai, ką moduliai veikia ar daro, ir nesirūpina, kokie duomenys yra modulių apdorojamuose IP.
Kiekvieno komponento, sudarančio srautu pagrįsto programavimo programas, padalijimas ir moduliškumas puikiai tinka tokiems procesams kaip derinimas ir į komandą orientuotas kūrimas. Didžioji kodo dalis yra įdėta į kapsules, todėl šaltinio kodas turi didelį pakartotinio naudojimo potencialą. Tai taip pat reiškia, kad programos, kuri naudoja srautu pagrįstą programavimą, atnaujinimas arba mastelio keitimas gali būti lengviau nei naudojant labiau integruotą programą, nes pranešimų sistema, moduliai ir prievadų sistema gali būti keičiami atskirai, nepažeidžiant didesnės programos.