Ero sivun ”Aliohjelma” versioiden välillä

Wikipediasta
Siirry navigaatioon Siirry hakuun
[katsottu versio][katsottu versio]
Poistettu sisältö Lisätty sisältö
Ipr1 (keskustelu | muokkaukset)
Ei muokkausyhteenvetoa
Ipr1 (keskustelu | muokkaukset)
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 (ks. [[Osoitin (ohjelmointi)|osoitin]]).
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

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:

  • arvo (call by value)
  • osoitin
  • referenssi (olio itse C++:ssa)

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 */
}

Katso myös