Aliohjelma (kutsutaan eri yhteyksissä myös termeillä proseduuri, funktio, metodi tai rutiini) on ohjelmoinnissa itsenäinen ohjelman osa, joka suorittaa tietyn toiminnon ja jota voidaan kutsua eri puolilta pääohjelmaa tai muista aliohjelmista. Aliohjelman suorituksen jälkeen ohjelman suoritus jatkuu kutsuvassa ohjelmassa aliohjelmakutsua seuraavasta lauseesta.
Aliohjelmien tarkoitus on yksinkertaistaa ohjelmointia: useimmat tietokonetta vaativat tehtävät ovat liian monimutkaisia kerralla ratkaistavaksi ja aliohjelmien käytöllä ongelmat voidaan pilkkoa pienempiin yksittäin ratkaistaviin palasiin.[1]
Proseduraalisessa ohjelmointikielessä aliohjelmia kutsutaan funktioiksi tai proseduureiksi. Olio-ohjelmoinnissa olion funktioita nimitetään jäsenfunktioiksi tai metodeiksi. Assemblyssä aliohjelmia kutsutaan alirutiineiksi. Joissakin yhteyksissä aliohjelmasta käytetään nimitystä kutsuttava yksikkö (engl. callable unit) usein eri nimitysten sijaan.[2]
Ohjelmoinnissa esiintyy usein tilanne, että samanlaista toimintoa tarvitaan ohjelman useassa eri kohdassa. Kirjoittamalla toiminto aliohjelmaksi voidaan se suorittaa useasta eri kohdasta. Näin säästetään työtä. Jos sama toiminto kirjoitettaisiin ohjelmaan yhä uudelleen, ohjelmakoodi pitenisi ja tulisi epäselväksi ja virheiden mahdollisuus kasvaisi. Mahdolliset korjaukset ohjelmakoodiin pitäisi tehdä useaan paikkaan. Aliohjelmat myös lisäävät ohjelman modulaarisuutta, koska ne mahdollistavat ohjelmakoodin jakamisen pienempiin itsenäisiin osiin ja parantavat siten ohjelmiston luettavuutta, testattavuutta ja ylläpidettävyyttä.
Aliohjelmaa voidaan kutsua useassa kohdassa ohjelmaa. Aliohjelman määrittelyn yhteydessä esitellään joukko aliohjelman parametreja tai argumentteja. Aliohjelmalla voi olla parametrien lisäksi paikallisia muuttujia, jotka näkyvät ja ovat käytettävissä vain aliohjelman alueella (engl. scope). Aliohjelman parametrit voivat olla muuttujia tai viittauksia muuttujiin.
Aliohjelman kutsuun on eräissä suorittimissa tuki käskytasolla: konekielinen käsky tallentaa senhetkisen ohjelmalaskurin arvon pinoon ja hyppää toiseen kohtaan ohjelmaa. Kun aliohjelma päättyy, paluuosoite haetaan pinon päältä. Kaikki ohjelmointikielet eivät tue pinoa: FORTRAN 77 ei tukenut pinoa vaan funktioilla oli oma muistialueensa argumenteille ja datalle.[3]
Järjestelmäkutsu ei ole suora funktiokutsu kuten sovelluksissa, vaan kutsun on ylitettävä ytimen ja käyttäjäavaruuden välinen jako.[4]
Tilaa jonne osoite tallennetaan kutsutaan aliohjelman aktivaatiotietueeksi. Siihen tallennetaan lisäksi aliohjelman käyttämät paikalliset muuttujat. Jos aliohjelma kutsuu itseään useaan kertaan, eli toimii rekursiivisesti, aktivaatiotietueita on useampi pinon päällä.