Alkusanat neljänteen, uudistettuun painokseen

Oliokeskeisyyteen liittyvässä markkinahumussa termistä oliokeskeinen on muodostunut vähitellen termin hyvä synonyymi; lähes mikä hyvänsä idea tai tuote voidaan naamioida oliokeskeiseksi myyntitarkoituksissa. Oleellisen erottaminen epäoleellisesta tulee tämän myötä yhä hankalammaksi.

- Ilkka Haikala

 

Olio-ohjelmointi on nopeasti muuttunut "uudesta ja ihmeellisestä" ohjelmointitavasta arkipäiväiseksi valtavirran ohjelmointimenetelmäksi. Samaan aikaan aiheeseen liittyviä kirjoja on julkaistu lukemattomia määriä.

Useissa olio-ohjelmointia käsittelevissä kirjoissa on kuitenkin tyypillisesti yksi ongelma. Jotkin kirjat on kirjoitettu hyvin yleisellä tasolla, ja ne keskittyvät oliosuunnitteluun ja olio-ohjelmoinnin teoriaan paneutumatta siihen, miten nämä asiat toteutetaan käytännön olio-ohjelmointia tukevissa kielissä. Toiset kirjat ovat puolestaan lähes yksinomaan jonkin oliokielen oppikirjoja, jolloin ne usein keskittyvät lähinnä tietyn kielen syntaksin ja erikoisuuksien opettamiseen.

Tämä kirja pyrkii osumaan näiden kahden ääripään puoliväliin. Siinä pyritään antamaan mahdollisimman monesta olio-ohjelmoinnin aiheesta sekä yleinen ("teoreettinen" olisi ehkä liian mahtipontinen sana) että käytännönläheinen kuva. Kirjan käytännön puolessa keskitytään etupäässä C++-kieleen, koska se on tällä hetkellä yleisin olio-ohjelmointia tukevista kielistä. Myös joidenkin muiden oliokielten ominaisuuksia käydään kuitenkin läpi silloin, kun ne oleellisesti eroavat C++:n oliomallista.

Kirjan päämäärästä johtuen tämä teos ei ole ohjelmoinnin alkeisopas. Se edellyttää lukijaltaan "perinteisen" ei-olio-ohjelmoinnin perustaitoja sekä C- tai C++-kielen alkeiden tuntemista. Olio-ohjelmoinnista lukijan ei kuitenkaan tarvitse tietää mitään ennen tämä kirjan lukemista.

Tämä teos ei myöskään pyri olemaan C++-kielen oppikirja. Se esittelee suurimman osan C++:n olio-ohjelmointiin liittyvistä piirteistä ja käsittelee niiden käyttöä olio-ohjelmoinnissa, mutta ko. piirteiden kaikkiin yksityiskohtiin ei ole mahdollista paneutua kirjan puitteissa. Tämän vuoksi C++:aa opettelevan kannattaa hankkia tämän kirjan rinnalle käsikirjaksi jokin C++-kielen oppikirja, josta voi etsiä vastauksia itse kielen omituisuuksiin liittyviin kysymyksiin.

Kirjan materiaali on saanut alkunsa tekijöiden Tampereen teknillisellä korkeakoululla luennoimasta kurssista Olio-ohjelmointi sekä lukuisista yrityksille pidetyistä C++-kursseista. Kirjaan liittyviä uutisia ja lisätietoja löytyy WWW-sivulta. Sivun kautta voi lähettää myös palautetta kirjan tekijöille. Otamme mielellämme vastaan kaikki kirjaa koskevat kommentit ja kehitysehdotukset. Kumpikin kirjoittaja mielellään syytää toista kaikista kirjaan vielä mahdollisesti jääneistä virheistä.

Neljäs, uudistettu painos

Opetus on kehittyvä prosessi. Tampereen teknillisellä yliopistolla on ohjelmistotekniikan opetuksessa nykyisin kaksi kurssia olio-ohjelmoinnista (perus- ja jatkokurssi). Erityisesti jatkokurssin tarpeiden mukaisesti olemme laajentaneet edellisiä painoksia mm. seuraavissa aiheissa: C++:n nimiavaruudet, moniperiytyminen, viipaloituminen kopioinnissa ja sijoituksessa, geneerisyys ja template-metaohjelmointi sekä poikkeusturvallisuus. Edelleen painotus on yleisissä olio-ohjelmoinnin periaatteissa ja niiden soveltamisessa C++-ohjelmointikielellä.

Edellä mainitut laajemmat lisäykset tehtiin kirjan vuoden 2003 kolmanteen, uudistettuun painokseen. Nyt vuonna 2005 julkaistiin kirjan neljäs painos. Siinä on kolmanteen painokseen verrattuna tehty joitakin korjauksia, lisäyksiä, päivityksiä ja tyylillisiä parannuksia.

Kirjan rakenne

Tämä kirja on tarkoitettu luettavaksi järjestyksessä alusta loppuun, ja se esittelee olio-ohjelmoinnin ominaisuuksia sellaisessa järjestyksessä, joka on ainakin tekijöiden kursseilla tuntunut toimivalta. Kirjan lukujen rakenne on seuraava:

Lisäksi liitteessä A esitellään lyhyesti sellaisia C++:n ei-olio-ominaisuuksia, joita ei ole ollut C-kielessä, mutta joita käytetään tämän kirjan esimerkeissä. Liitteessä A käydään läpi

Liitteen tarkoituksena on että lukija, joka ei näitä ominaisuuksia tunne, saa niistä liitteen avulla sellaisen käsityksen, että kirjan koodiesimerkkien lukeminen onnistuu vaivatta. Kyseisiä ominaisuuksia ei kuitenkaan opeteta liitteessä perinpohjaisesti.

Liite B sisältää C++-tyylioppaan. Siihen on kerätty tekijöiden mielestä tärkeitä ohjelmointityyliin ja C++:n sudenkuoppien välttämiseen liittyviä ohjeita selityksineen. Tämä tyyliopas on käytössä mm. Tampereen teknillisen yliopiston Ohjelmistotekniikan laitoksella opetuksessa ja ohjelmointiprojekteissa.

Kirjan lopussa on myös kirjallisuusluettelo sekä aakkosellinen luettelo englanninkielisistä olio-ohjelmoinnin termeistä ja niiden suomenkielisistä vastineista tässä teoksessa (itse tekstissä jokaisesta uudesta termistä on pyritty kertomaan sekä suomenkielinen että englanninkielinen sana). Lisäksi kirjan loppuun on liitetty normaali aakkosellinen hakemisto.

Tampereella 15.4.2005

Matti Rintala ja Jyke Jokinen