Olio-ohjelmoinnin tyyliseikkoja¶
Aikaisemmin esitetyt tyyliseikat pätevät myös olio-ohjelmointiin. Niiden lisäksi on olemassa erityisesti olio-ohjelmointia koskevia tyyliseikkoja, joita esitellään tässä kohdassa.
Yleisiä ohjeita¶
Olio-ohjelmoinnissa kannattaa ihan ensimmäiseksi miettiä, onko kirjoittamasi luokka hyödyllinen ja järkevä. Luokan oleellinen tehtävä on kiinnittää data (attribuutit) ja sitä käsittelevä koodi (metodit) yhteen.
Jos luokassa ei ole yhtään metodia (lukuunottamatta rakentajaa ja purkajaa),
luokka ei ole järkevä, koska silloin voisit yksinkertaisemmin käyttää
tietuetta (struct).
Myös jos luokassa on rakentajan ja purkajan lisäksi vain set- ja
get-metodeita, niin silloinkin voisit käyttää
tietuetta, jolloin näitäkään metodeita ei tarvittaisi.
Jos taas luokassa ei ole yhtään attribuuttia, niin sen metodit
eivät todennäköisesti liity yhteen (koska niillä ei ole mitään yhteistä
dataa käsiteltävänä), jolloin niitä ei ole järkevää kirjoittaa luokkaan.
Luokkien niminä tulee käyttää pääsääntöisesti yksikkömuotoa. Juuri koskaan ei ole mitään syytä käyttää monikkoa, sillä luokka yleensä kuvaa yhden olion ominaisuudet. Luokasta voi sitten olla (ja yleensä onkin) useita ilmentymiä.
Luokan jäsenmuuttujien nimissä on hyvä käyttää viimeisenä merkkinä alaviivaa, vaikka C++-kääntäjä ei sitä vaadikaan. Tällä tavalla on helpompi erottaa muista muuttujista.
Yksityiskohtaisempia sääntöjä¶
Alla luetellut tyyliseikat on valikoitu Matti Rintalan ja Jyke Jokisen kirjasta Olioiden ohjelmointi C++:lla (ss. 341-353). Useimmat niistä on mainittu ja selitetty laajemmin muualla materiaalissa, joten tässä ne vain luetellaan lyhyesti.
Yhdessä otsikkotiedostossa (
.hh) on yksi julkinen rajapinta (luokka). Otsikkotiedosto sisältää vain esittelyitä (ei toteutuksia).Otsikkotiedosto on suojattava moninkertaiselta käyttöönotolta:
#ifndef CLASS_A_HH #define CLASS_A_HH ... #endif // CLASS_A_HH
include-direktiivillä saa ottaa käyttöön vain otsikkotiedostoja. Jos otetaan käyttöön useita tiedostoja, ensin luetellaan omat otsikkotiedostot ja sen jälkeen kirjaston tiedostot.Rajapinnan toteutukset esitetään toteutustiedostossa (
.cpp) samassa järjestyksessä kuin ne ovat vastaavassa otsikkotiedostossa (.hh).Luokalle on määritelty hyvä julkinen rajapinta (mahdollisimman pieni), ja kaikki operaatiot tapahtuvat tämän rajapinnan kautta.
Erityisesti olio ei saa muuttaa toisen olion attribuuttien arvoja, ei vaikka oliot olisivat saman luokan ilmentymiä.
Luokan
public-osa kirjoitetaan ennenprivate-osaa.Luokan
public-osassa ei ole jäsenmuuttujia.Luokan
private-osassa ei ole tarpeettomia muuttujia.Luokan operaatioita ei tehdä jäsenfunktioiden ulkopuolella.
Luokan jäsenmuuttujat alustetaan rakentajan alustuslistassa, jossa ne luetellaan siinä järjestyksessä kuin ne on esitelty otsikkotiedostossa.
Jäsenfunktiosta tehdään vakiojäsenfunktio (
const-funktio) aina kun mahdollista.Kun olio välitetään parametrina, käytetään viitettä aina kun mahdollista.
Aikaisemmissa tyyliseikoissa kerrotiin kommentoinnissa. Siinä yhteydessä mainittiin, että luokan jäsenfunktion kommentti kirjoitetaan otsikkotiedostoon (
.hh) funktion yläpuolelle, eikä siis toteutustiedostoon (.cpp).
Toivomus
Kurssin koodipohjissa ja esimerkeissä olemme pyrkineet noudattamaan yllä kerrottuja tyylisääntöjä. Aina emme ole onnistuneet, sillä koodeja ovat kirjoittaneet useat eri henkilöt usein kovassa kiireessä. Toivomme, että ilmiannat tyylisääntöjen rikkeet.