previous next Up Title Contents Index

9.3.2 Ensimmäinen olio- esimerkki


Muutetaanpa aikalisa luokaksi ja olioksi:

olioalk\aikaolio.cpp - tietueesta olioksi

	#include <iostream.h>
	#include <iomanip.h>
	
	struct cAika {
	  int h,m;
	  void lisaa(int lisa_min)  {
	    int yht_min = h * 60 + m + lisa_min;
	    h = yht_min / 60;
	    m = yht_min % 60;
	  }
	  void tulosta() const  {
	    cout << setfill('0') << setw(2) << h << ":" << setw(2) << m << endl;
	  }
	};
	
	
	int main(void)
	{
	  cAika a1={12,15}, a2={13,16}, a3={14,25};
	  a1.lisaa(55);  a1.tulosta();
	  a2.lisaa(27);  a2.tulosta();
	  a3.lisaa(39);  a3.tulosta();
	  return 0;
	}
Siinäpä se! Onko muutokset edelliseen nähden suuria? Siis iso osa koko olio- ohjelmoinnista (ja tietotekniikasta muutenkin) on markkinahenkilöiden huuhaata ja yleistä hysteriaa "kaiken ratkaisevan" teknologian ympärillä. No, tosin olio- ohjelmonnissa on puolia, joita emme vielä ole nähneetkään, joiden ansiosta olio- ohjelmointia voidaan pitää uutena ja ohjelmointia ja ylläpitoa helpottavana teknologiana. Näitä ovat mm. perintä ja polymorfismi (monimuotoisuus), joihin emme valitettavasti tällä kurssilla ehdi perehtyä kovinkaan syvällisesti.

No takaisin esimerkkiimme. Uutta on lähinnä se, että metodien (no sanotaan tästä lähtien funktioita metodeiksi) parametrilistat ovat lyhentyneet. Itse oliota ei tarvitse enää viedä parametrina, koska metodit ovat luokan sisäisiä ja tällöin luokkaa edustava olio kyllä tuntee itse itsensä. Samoin on jäänyt pois metodien sisältä viite olioon - samasta syystä:

	...
	  void lisaa(int lisa_min)  {
	    int yht_min = h * 60 + m + lisa_min;
	    h = yht_min / 60;
	    m = yht_min % 60;
	  }
	...
Metodia kutsutaan analogisesti tietueen kenttään viittaamisen kanssa, eli
	a1.lisaa(55);  a1.tulosta();
Tällekin on keksitty oma nimi: välitetään oliolle viesti "tulosta" (message passing). Tässä kuitenkin jatkossa voi vielä lipsahtaa ja vahingossa sanomme kuitenkin, että kutsutaan metodia tulosta, vaikka ehkä pitäisi puhua viestin välittämisestä.

Metodin tulosta esittelyssä

	void tulosta() const  {
oleva const tarkoittaa että metodi ei muuta itse olion tilaa (sen attribuutteja). Metodi lisaa taas vastaavasti muuttaa olion tilaa hyvinkin paljon.

Tehtävä 9.80 const-metodi

Kokeile mitä kääntäjä ilmoittaa, jos muutat myös lisaa- metodin const- tyyppiseksi.


previous next Up Title Contents Index