Selitä tässä, mitä olio-ohjelmoinnin pointti tarkoittaa.
Minun mielestäni olio-ohjelmointi ei tarkoita mitään aivan
tiettyä. Olen nähnyt niin monta erilaista oliopohjaiseksi kutsuttua
kieltä, että tiedän kyllä aika monta asiaa, joita sillä tarkoitetaan
eri yhteyksissä. Ja koska olio-ohjelmoinnista puhutaan yhä, voisi olla
hyvinkin vaivan arvoista kertoa, mitkä olio-ohjelmoinniksi kutsutut
ajatukset ovat minusta tutustumisen väärtejä.
Miten toteutetaan Olio-ohjelmointi on tapa (tai
useampi) järjestellä ohjelmia. Nämä tavat järjestellä ohjelmia eivät
ole ohjelmointikielten ominaisuuksia, vaan ohjelmointitekniikoita,
joita voi käyttää lähes kaikissa ohjelmointikielissä -- vaikka tietyt
ohjelmointikielet saattavatkin sisältää ominaisuuksia tai perinteitä,
jotka helpottavat tai ohjaavat oliotekniikoiden käyttöön. Demotakseni
tätä kirjoitan esimerkkini kolmella eri kielillä: *
enkapsulointi ohjelmointikielellä: C-kielellä, joka on
suojaukseton keskitason systeemiohjelmointikieli, Python-kielellä, joka
on oliotekniikoille erityistä tukea sisältävä korkean tason kieli, ja
Scheme-kielellä, joka on ennen kaikkea funktionaaliseen ohjelmointiin
suuntautunut korkean tason kieli.
Keskeisiä oliotekniikoita ovat mielestäni nämä:
# kapselointi eli suojaus (''encapsulation'') # dynaaminen sidonta (''dynamic dispatch'') # periytyvyys (''inheritance'')
Kapselointi on hyvin perustavanlaatuinen tekniikka, jolla ohjelmistojen laatua on parannettu paljon ennen olio-ohjelmoinnin tuloa. Omasta mielestäni dynaaminen sidonta on se olennainen innovaatio, joka tekee olio-ohjelmoinnista jotenkin hyödyllisen lähestymistavan. Periytyvyys on mielestäni lähinnä haitallinen sivupiirre, joka on sisällytetty joihinkin oliokieliin "kätevyyssyistä". En aio demota periytyvyyttä, koska se on mielestäni haitallinen keksintö, mutta kapseloinnin ja dynaamisen sidonnan yritän selittää siten, että käy myös ilmi, mitä hyötyä niistä on.
!!! Kapselointi
[...]
!!! Dynaaminen sidonta
* dynaaminen dispatch * luokat funktiot *
rajapinnat
Toteutuskielet: * C * Python * Scheme
[kategoria: keskeneräiset] * [kategoria: ohjelmointi]