(toiminnot)

hwechtla-tl: Olio-ohjelmoinnin pointti

Kierre.png

Mikä on WikiWiki?
nettipäiväkirja
koko wiki (etsi)
viime muutokset


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ä.

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 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ä:

  1. kapselointi eli suojaus (encapsulation)
  2. dynaaminen sidonta (dynamic dispatch)
  3. 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


Pikalinkit:


kommentoi (viimeksi muutettu 20.04.2013 21:24)