Haluaisin tietää mitä käytännön eroa on luokkien käyttämisellä verrattuna tietueisiin, joita muokkaa aliohjelmilla?
Ei mitään ja kaikki. :-)
C++:ssa struct
- ja class
-rakenteiden ainoa ero on näkyvyydessä: ekassa (tietue) kaikki jäsenet ja kantaluokat ovat oletusarvoisesti public
, tokassa (luokka) kaikki on oletusarvoisesti private
.
Tuo näkyvyys sitten tuokin asialle toisen merkityksen. Kyse on siitä, että minkä tahansa asian esittely C++:ssa meinaa eräänlaista sopimusta. Esittelyn perusteella jokin otus lupaa tai antaa tehdä erilaisia juttuja.
Käytännössä luokalla tarkoitetaan sellaista vehjettä, joka tallettaa oman tilatietonsa private-muuttujiin ja määrittelee sitten rajallisen määrän public-funktioita, joilla tuota tilaa muutellaan. Tätä ei tehdä vain jonkin yleisen ylevän enkapsulointiperiaatteen vuoksi, että se nyt vaan olisi jotenkin tavoiteltava asia. Viisaus on siinä, että tällä tavoin voidaan varmistaa, että olio on aina ehjä ja täysjärkisessä kunnossa, muutoin ilmassa on jotain poikkeuksellista. Muut ylevät asiat ovatkin sitten vähän niin kuin seurausta ja tukevat tällaista vastuunjakoa.
Tietueella tarkoitetaan sitten yleensä jotakin sellaista otusta, joka ei oikein tätä perustakuuta anna: kuka tahansa voi missä tahansa asettaa olion tilaksi mitä tahansa.
Mutta kuten sanottu, C++:ssa tämä jaottelu ei suoraan riipu siitä, käytetäänkö struct
- ja class
-sanaa. C++:aa opiskelevat C-koodarit tai pienistä jutuista aloittelevat hemmot eivät aina meinaa niin arvostaa näitä oliofilosofisia vastuunjakojuttuja, kun ilmankin näyttää hyvin pärjäävän. Joo, C:ssä ei ole vaihtoehtoja ja pienissä jutuissa nyt on muutoinkin aika sama, miten homman hoitaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.