2.1.1 Yleistä

1970-luvun alussa Dennis Ritchie kehitteli Unix-käyttöjärjestelmää. Hän tarvitsi kehitystyöhön tehokasta koodia tekevän ohjelmointikielen, joka olisi samalla konekieltä helpompi käyttää. Koska tarjolla ei ollut vaatimuksia täyttävää kieltä, loi Ritchie C-kielen. Ns. oliopohjaisen ohjelmoinnin yleistyttyä 1980-luvun alussa ryhtyi Bjarne Stroustrup laajentamaan C-kieltä olio-ohjelmointia tukevilla ominaisuuksilla. Tämän tuloksena syntyi C++-ohjelmointikieli.

Tällä kurssilla opitaan C++-kielen alkeet. Koska C++ on C-kielen laajennus, ovat (melkein) kaikki C-kieliset ohjelmat myös kelvollisia C++-ohjelmia. Monet jatkossa esitettävistä kielen rakenteista kuuluvat tuohon C:n ja C++:n yhteiseen osaan, eivät kuitenkaan kaikki. Esimerkiksi syöttö ja tulostus hoidetaan tällä kurssilla pääasiassa C++:n mukaisella tavalla, joka eroaa C-kielen vastaavista rakenteista.

Useimmat kääntäjät (kuten Borland C++) olettavat, että ohjelmia tallennettaessa tiedostonimen tarkenninosana on CPP, siis esimerkiksi OHJELMA.CPP. Jos jostain syystä halutaan, että kääntäjä käsittelee ohjelman puhtaasti C-kielisenä, laitetaan tarkenteeksi C.

C++ muistuttaa rakenteeltaan hyvin paljon muita lohkorakenteisia ohjelmointikieliä, kuten Pascalia. C++ tarjoaa käyttäjälleen runsaasti työkaluja eri toimintojen suorittamiseksi, ja niiden käyttö on hyvin joustavaa. Tämä tekee C++:sta vahvan ohjelmointikielen; sillä voidaan kirjoittaa erittäin hyviä, mutta myös erittäin huonoja ohjelmia. C++ on myös hyvin monipuolinen; sillä voidaan toteuttaa operaatioita toisaalta suoraan bittitasolla ja toisaalta siinä voidaan käyttää hyvin pitkälle kehitettyjä rutiineja.

Kaikki ohjelmointikielet vaativat ohjelmoijalta heti alusta alkaen kurinalaisuutta. Erilaisia sääntöjä ja sopimuksia tulee noudattaa, jotta ohjelmat olisivat ymmärrettäviä sekä itselle että toisille, myös pitkänkin ajan kuluttua ohjelman kirjoitushetkestä.

Ohjelmointikielet asettavat käyttäjälle tarkkoja sääntöjä, mutta antavat toisaalta joissain kohdin myös suuria vapauksia. Tarkat säännöt ovat välttämättömiä, jotta kääntäjä pystyy yksikäsitteisesti muodostamaan ohjelmaa vastaavat konekieliset käskyt. Käytetyn kielen vapaudet ja runsaat valinnanmahdollisuudet taas asettavat ohjelmoijalle korkeat vaatimukset tietojen ja taitojen osalta. Osaavissa käsissä laajoista mahdollisuuksissa on pääasiassa hyötyä: ohjelmoinnissa voi paremmin toteuttaa omia ajatuksiaan ja leikitellä erilaisilla vaihtoehdoilla tietyn toiminnon toteuttamiseksi.

Ohjelmointia voidaan pitää erittäin luovana työskentelynä. Parhaimmillaan ohjelmointityö on hyvin haastavaa ja hauskaa. Positiivinen asenne ja yrittäminen ovat ohjelmoinnin onnistumisen kannalta tärkeitä tekijöitä. Mikään ohjelma ei yleensä toimi ensimmäisellä yrityksellä, vaan sitä täytyy korjailla ja parannella.

Tietokoneet ovat nykyään pienestä koostaan huolimatta erittäin tehokkaita ja niissä on runsaasti muistia. Tämä puolestaan houkuttelee ohjelmoijia luomaan yhä suurempia ja hiotumpia kokonaisuuksia. Ohjelmistojen sisältämän koodin määrän kasvaessa korostuu selkeän ohjelmakoodin merkitys. Ohjelman muokkaaminen, korjaaminen ja yhdisteleminen jo olemassa oleviin palasiin helpottuu huomattavasti, jos alusta alkaen eri ohjelmanpätkät on rakennettu huolella ja ne on dokumentoitu riittävän huolellisesti.

Ohjelmakommentit
Varsinaisten suorittavien lauseiden lisäksi ohjelmakoodiin täytyy kirjoittaa kommentteja eli ohjelman toimintaa selittäviä tekstejä. Kommentit eivät vaikuta mitenkään itse ohjelmaan: kääntäjä jättää ne kokonaan huomiotta, kun se muodostaa suoritettavia konekielisiä käskyjä.

C++-kielessä on kaksi tapaa kirjoittaa kommentteja: Ensimmäinen tapa, joka on myös C-kieleen kuuluva, on rajata kommentit yhdeksi kokonaisuudeksi alkumerkinnällä /* ja loppumerkinnällä */ ; tällöin kommentti voi olla myös useamman rivin mittainen. Toinen, vain C++-kieleen kuuluva, tapa on käyttää merkintää // , jolloin kaikki sen jälkeen samalle riville kirjoitettu käsitetään kommentiksi; tällöin siis kommentin loppumerkkinä on rivinvaihto.

C++-kielelle on tyypillistä kokonaisuuksien rakentelu osista. Kaiken ohjelmakoodin taustana on joukko pikku rutiineja, joita vähä vähältä yhdistellään suuremmiksi kokonaisuuksiksi, kunnes varsinaisen ohjelmatekstin kyseessä ollen voidaan monimutkainen operaatio hallita muutamalla lauseella. Näitä pikkurutiineja kutsutaan aliohjelmiksi tai funktioiksi. Muutaman lauseen kokonaisuutta, jolla isoja operaatioita voidaan hallita, kutsutaan pääohjelmaksi. Pääohjelman lauseissa kutsutaan (käytetään apuna) kirjoitettuja aliohjelmia, jolloin varsinainen työn suorittaminen tapahtuu näissä aliohjelmissa.

Ohjelmointi on ongelmanratkaisua. Pääosa ohjelmointityöstä on miettimistä, kuinka jokin toiminto voidaan tietokoneessa toteuttaa. Toiminnan suorittamiseksi kehitettyä loogista suoritustapaa kutsutaan algoritmiksi. Ohjelman suunnittelun ja algoritmien tekemisen taidon kehittäminen on vähintään yhtä tärkeää kuin jonkin ohjelmointikielen hallitseminen. Ohjelmointikielet tulevat ja menevät, mutta ohjelman tekeminen noudattaa kuitenkin aina samantyyppistä loogista ajattelua.