Kapselointi
Kapselointi tarkoittaa ohjelmoinnissa yhteen kuuluvien tietojen ja toimintojen kokoamista yhdeksi kokonaisuudeksi. Olio-ohjelmoinnissa kapselointi tapahtuu usein kokoamalla muuttujat ja metodit luokaksi. Myös moduulit ja pakkaukset toimivat kapselointivälineinä.
Kapseloinnin tarkoituksena on useimmiten yhteenkuuluvien asioden kokoamisen lisäksi myös piilottaa toteutus moduulin tai luokan asiakkailta eli sen käyttäjiltä. Tarkoitus on siis tarjota käyttöön eräänlainen valmis ohjelmoinnin rakennuspalikka, jota voi käyttää ohjelman rakentamiseen tietämättä mitään (ja välittämättä) palikan sisäisestä toteutuksesta. Tämä edellyttää sitä, että moduulin tai luokan rajapinta on hyvin määritelty ja dokumentoitu.
Jotkin kielet, kuten Smalltalk ja Ruby, sallivat pääsyn vain objektin metodeilla, mutta useimmat muut kielet (kuten C++, C#, Delphi tai Java) tarjoavat ohjelmoijalle keinon hallita sitä, mitä piilotetaan. Tämä tapahtuu yleensä avainsanoilla, kuten "public" ja "private". ISO C++ -standardi viittaa sanoihin "protected", "private" ja "public" pääsyoikeuksina ja toteaa, että ne eivät "piilota mitään tietoa". Tietojen piilottaminen saavutetaan tarjoamalla käännetty lähdekoodin versio, joka on liitetty otsikkotiedostoon.
Kapselointi on mahdollista myös muissa kuin olio-ohjelmointikielessä. Esimerkiksi C-kielessä rakenne voidaan julistaa julkiseksi API:ksi (sovelluksen ohjelmointirajapinta) header-tiedostossa joukolle funktioita, jotka käsittelevät tietoja sisältävää kohteen dataosaa, jota API:n asiakkaat eivät voi käyttää “extern”-avainsanan avulla.
Syitä kapseloinnin käyttämiseen ovat mm.
- Ohjelman jakaminen pienempiin, helpommin toteutettaviin ja hallittaviin osiin
- Ohjelman ylläpidon helpottaminen, koska muutokset vaikuttavat vain rajoitettuun alueeseen ohjelmassa rajapinnan säilyessä samana. Tämä on erityisen hyödyllistä suurissa ohjelmissa, joissa koodin ylläpitäminen voi muuten olla hankalaa.
- Uudelleenkäytettävyyden helpottuminen. Kun rakennuspalikka on tehty oikein, sitä voidaan käyttää myös muissa ohjelmissa. Tämä säästää aikaa ja vaivaa, kun kehitetään uusia ohjelmia, sillä aiemmin kirjoitetut koodiosat voidaan hyödyntää uudelleen.
- Kapseloinnin hyödyntäminen voi myös auttaa välttämään virheitä. Ohjelmoija voi käyttää toimintoja ja tietoja vain rajapinnan kautta, joka ehkäisee virheitä.
- Vastaavasti kapselointi helpottaa myös ohjelman testaamista, sillä toiminnallisuuksia voidaan testata eristetysti muusta ohjelmasta.
- Lisäksi kapseloinnin avulla voidaan piilottaa luokan tai moduulin toteutus asiakkailta. Tällöin asiakkaan tai käyttäjän ei tarvitse tietää koodin yksityiskohdista, koska he voivat käyttää rajapintaa.