Voisimme jatkaa pääohjelman selkeyttämistä. Tavoite voisi olla aluksi vaikkapa kirjoittaa pääohjelma muotoon:
ohjeet(); kysy_matka(&matka_mm); matka_km = mittakaava_muunnos(matka_mm); tulosta_matka(matka_km); return 0;
Tällainen pääohjelma tuskin tarvitsisi paljoakaan kommentteja.
Edellä on käytetty neljän eri tyypin aliohjelmia (funktioita)
Valmis ohjelma, jossa myös aliohjelmat on esitelty, näyttäisi seuraavalta (rivien numerointi on myöhemmin esitettävää pöytätestiä varten):
// matka_a2.cpp // Ohjelmalla lasketaan mittakaavamuunnoksia 1:200000 kartalta // Vesa Lappalainen 4.1.1997 #include <iostream.h> const double MITTAKAAVA = 200000.0; const double MM_KM = 1000.0*1000.0; void ohjeet(void) { cout << "Lasken 1:" << MITTAKAAVA << " kartalta millimetreinä mitatun matkan\n"; cout << "kilometreinä luonnossa.\n"; } void kysy_matka(int *pMatka_mm) { int mm; cout << "Anna matka millimetreinä>"; cin >> mm; *pMatka_mm = mm; } double mittakaava_muunnos(int matka_mm) { return matka_mm*MITTAKAAVA/MM_KM; } void tulosta_matka(double matka_km) { cout << "Matka on luonnossa "<< matka_km << " km." << endl; } int main(void) { int matka_mm; double matka_km; ohjeet(); kysy_matka(&matka_mm); matka_km = mittakaava_muunnos(matka_mm); tulosta_matka(matka_km); return 0; }
Edellä olevasta huomataan, että aliohjelmat jotka eivät palauta mitään arvoa nimessään, esitellään void- tyyppisiksi.
mittakaava_muunnos on reaaliluvun palauttava funktio, joten se esitellään double - tyyppiseksi.
Seuraavaksi pöytätestaamme ohjelmamme toiminnan:
|
main
|
kysy_matka
|
mi..muunnos
|
tulosta
|
|
|||
lause
|
matka_mm
|
matka_km
|
pMatka_mm
|
mm
|
matka_mm
|
tulos
|
matka_km
|
tulostus
|
40
ohjeet()
|
??
|
??
|
|
|
|
|
|
|
9-13
cout<<
|
|
|
|
|
|
|
|
Lasken
1:200000
|
41
kysy_mat
|
|
|
&matka_mm
|
|
|
|
|
|
16-18
int
m
|
|
|
|
??
|
|
|
|
|
19
cout
<<
|
|
|
|
|
|
|
|
Anna
matka ...
|
20
cin>>mm
|
|
|
|
352
|
|
|
|
|
21
*pMatka
|
352
|
|
<==o
|
|
|
|
|
|
42
matka_km
|
|
|
|
|
352
|
|
|
|
26
return
|
|
|
|
|
|
70.4
|
|
|
42
matka_km
|
|
70.4
|
|
|
|
|
|
|
43
tulosta
|
|
|
|
|
|
|
70.4
|
|
29-31
cout<
|
|
|
|
|
|
|
|
Matka
on luo..
|
44
return
0;
|
|
|
|
|
|
|
|
|
Mikäli kukin aliohjelma olisi testattu erikseen, riittäisi meille pelkkä pääohjelman testi:
|
main
|
|
|
lause
|
matka_mm
|
matka_km
|
tulostus
|
40
ohjeet()
|
??
|
??
|
Lasken
1:200000
|
41
kysy_mat
|
352
|
|
Anna
matka ..
|
42
matka_km
|
|
70.4
|
|
43
tulosta
|
|
|
Matka
on luo..
|
44
return
0;
|
|
|
|
Tämä on testaustapa, johon tulisi pyrkiä. Isossa ohjelmassa ei ole enää mitään järkeä testata sitä jokainen aliohjelma kerrallaan. Koodiin liitettyjen aliohjelmien tulee olla testattuja kukin erillisinä ja lopullinen testi on vain viimeisimmän mallin mukainen!