Ero sivun ”Aliohjelma” versioiden välillä
[katsottu versio] | [katsottu versio] |
Ei muokkausyhteenvetoa |
Ei muokkausyhteenvetoa |
||
Rivi 6: | Rivi 6: | ||
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, [[ohjelmistotestaus|testattavuutta]] ja ylläpidettävyyttä. |
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, [[ohjelmistotestaus|testattavuutta]] ja ylläpidettävyyttä. |
||
Aliohjelmaa voidaan ''kutsua'' useassa kohdassa ohjelmaa. Aliohjelman määrittelyn yhteydessä esitellään joukko aliohjelman ''[[Parametri (tietotekniikka)|parametreja]]'' tai ''argumentteja''. Aliohjelmalla voi olla parametrien lisäksi ''paikallisia [[muuttuja (ohjelmointi)|muuttujia]]'', jotka näkyvät ja ovat käytettävissä vain aliohjelman alueella ({{k-en|scope}}). Aliohjelman parametrit voivat olla muuttujia tai viittauksia muuttujiin ( |
Aliohjelmaa voidaan ''kutsua'' useassa kohdassa ohjelmaa. Aliohjelman määrittelyn yhteydessä esitellään joukko aliohjelman ''[[Parametri (tietotekniikka)|parametreja]]'' tai ''argumentteja''. Aliohjelmalla voi olla parametrien lisäksi ''paikallisia [[muuttuja (ohjelmointi)|muuttujia]]'', jotka näkyvät ja ovat käytettävissä vain aliohjelman alueella ({{k-en|scope}}). Aliohjelman parametrit voivat olla muuttujia tai viittauksia muuttujiin. Parametreja voidaan kielestä riippuen välittää kolmella tavalla: |
||
* arvo (''call by value'') |
|||
* [[Osoitin (ohjelmointi)|osoitin]] |
|||
* referenssi (olio itse [[C++]]:ssa) |
|||
Aliohjelman kutsuun on eräissä [[suoritin|suorittimissa]] tuki käskytasolla: [[konekielinen käsky]] tallentaa senhetkisen ohjelmalaskurin arvon [[pino]]on ja hyppää toiseen kohtaan ohjelmaa. Kun aliohjelma päättyy, paluuosoite haetaan pinon päältä. Tilaa jonne osoite tallennetaan kutsutaan aliohjelman [[aktivaatiotietue]]eksi. Siihen tallennetaan lisäksi aliohjelman käyttämät paikalliset muuttujat. Jos aliohjelma kutsuu itseään useaan kertaan, eli toimii [[rekursio|rekursiivisesti]], aktivaatiotietueita on useampi pinon päällä. |
Aliohjelman kutsuun on eräissä [[suoritin|suorittimissa]] tuki käskytasolla: [[konekielinen käsky]] tallentaa senhetkisen ohjelmalaskurin arvon [[pino]]on ja hyppää toiseen kohtaan ohjelmaa. Kun aliohjelma päättyy, paluuosoite haetaan pinon päältä. Tilaa jonne osoite tallennetaan kutsutaan aliohjelman [[aktivaatiotietue]]eksi. Siihen tallennetaan lisäksi aliohjelman käyttämät paikalliset muuttujat. Jos aliohjelma kutsuu itseään useaan kertaan, eli toimii [[rekursio|rekursiivisesti]], aktivaatiotietueita on useampi pinon päällä. |
Versio 26. maaliskuuta 2018 kello 18.05
Tähän artikkeliin tai osioon ei ole merkitty lähteitä, joten tiedot kannattaa tarkistaa muista tietolähteistä. Voit auttaa Wikipediaa lisäämällä artikkeliin tarkistettavissa olevia lähteitä ja merkitsemällä ne ohjeen mukaan. |
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.
Proseduraalisessa ohjelmointikielessä aliohjelmia kutsutaan funktioiksi tai proseduureiksi. Olio-ohjelmoinnissa olion funktioita nimitetään jäsenfunktioiksi tai metodeiksi.
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. Parametreja voidaan kielestä riippuen välittää kolmella tavalla:
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ä. 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ä.
Esimerkki
Esimerkki aliohjelmasta, joka saa parametriksi numeroarvon (int eli integer) nimeltä ika ja joka palauttaa boolean-arvon (true/false) sen mukaan, onko ika alle 18 vai ei.
public Boolean onkoHenkiloAlaikainen(int ika) {
if(ika<18) {
return true;
} else {
return false;
}
}
Tämän jälkeen aliohjelmaa voitaisiin kutsua esimerkiksi seuraavasti:
if(onkoHenkiloAlaikainen(12) == true) {
tulosta "Henkilö on alaikäinen!";
}
Olio-ohjelmoinnissa eräissä kieli aliohjelman (metodin) eteen kirjoitetaan halutun olion nimi seuraavasti:
if(henkilo.onkoHenkiloAlaikainen(12) == true) {
tulosta "Henkilö on alaikäinen!";
}
Määrittely ja toteutus
Eräät ohjelmointikielet kuten C-kieli erottavat määrittelyn (engl. declaration) ja toteutuksen (engl. definition). Määrittely kertoo miten funktiota kutsutaan ilman tarvetta tietää toteutusta toisessa osassa ohjelmaa.
void swap(int *a, int *b); /* määrittely */
void swap(int *a, int *b) /* toteutus */
{
int t = *a;
*a = *b;
*b = t;
}
Oletusarvot
Eräissä kielissä voidaan antaa oletusarvot argumenteille, jolloin kutsuessa ei välttämättä tarvitse antaa arvoa jokaiselle argumentille. Esimerkki, joka antaa kahden muuttujan tulon:
int kertolasku(int a, int b = 1) { return a * b; }
void main()
{
int tulo;
tulo = kertolasku(2); /* 2 * 1 = 2*/
tulo = kertolasku(2, 1); /* 2 * 1 = 2 */
tulo = kertolasku(2, 2); /* 2 * 2 = 4 */
}