Sanasto

Tämä sivu selittää valikoitujen ohjelmointiin liittyvien termien merkityksiä lyhyesti.

Selittelyjä

Termien kaikkia merkityksiä ja kaikkia vaihtoehtoisia määritelmiä ei ole selitetty, vaan on keskitytty kurssin kannalta oleellisimpiin. Useilla sanastossa esiintyvistä termeistä on muitakin merkityksiä sekä ohjelmoinnin ulkopuolella että muissa ohjelmointiyhteyksissä. Osa alla olevista määritelmistä on epämuodollisia ja hieman epätarkkoja, mutta kurssimme tarpeisiin riittäviä.

Annetut englanninkieliset lähimmät vastineet eivät kaikissa tapauksissa tarkoita prikulleen samaa kuin suomenkieliset.

Jos etsit sivulta englanninkielistä sanaa (Ctrl+F), niin huomaa, että jotkut sanat esiintyvät luettelossa usean eri suomenkielisen sanan käännöksinä.

Katso myös Scala-kielen virallinen sanasto, jota emme tosin kurssilla noudata aivan pilkuntarkasti.

Puuttuuko jotain?

Etsitkö tältä sivulta jotain, mitä täällä ei ole? Ilmoita asiasta Ohjelmointi 1 -kurssin vastaavalle opettajalle (juha.sorva@aalto.fi). Lisäyksiä voidaan tehdä.

Selityksiä

abstrakti luokka
abstract class luokka, jolle pätee: 1) siinä voi olla (myös) abstrakteja metodeja; 2) siitä ei voi luoda ilmentymiä kuin aliluokkiensa kautta; 3) sille voidaan määritellä konstruktoriparametreja ¶ Ks. luku 6.4 ja vrt. piirreluokka.
abstrakti metodi
abstract method metodi, jolle on määritelty puumerkki muttei runkoa ¶ Ks. luvut 6.2, 6.4. Abstrakteja metodeita voi olla piirreluokissa ja abstrakteissa luokissa eli sellaisissa luokissa, joista ei suoraan luoda ilmentymiä.
abstraktio
abstraction yleistys, käsitteellistys; malli, josta on jätetty pois epäoleellisia yksityiskohtia ¶ Ohjelmointi on abstraktioiden määrittelemistä ja hyödyntämistä; ks. esim. luvut 1.6, 2.1, 2.3, 2.6, 6.2, 6.4, 7.5, 8.1 ja 10.1.
aihealue
domain ongelmakenttä tai aihepiiri, jota ohjelma käsittelee ¶ Esimerkiksi tietokonepelin aihealueeseen kuuluu pelimaailma sääntöineen.
ajaa
run 1) määrätä tietokone toimimaan tietyn ohjelman mukaisesti; 2) toimia ohjelman määräämällä tavalla, suorittaa ¶ Vrt. “Aurora ajoi kirjoittamansa ohjelman ja huomasi tulosteesta, että ohjelmassa oli bugi.” ja “Tietokone ajaa ohjelman vaihe vaiheelta käskyjä noudattaen.”
ajonaikainen tyyppi
runtime type sama kuin dynaaminen tyyppi
ajonaikainen virhe
runtime error virhe, joka ilmenee (vasta) ohjelmaa ajettaessa, kun jonkin toimenpiteen suorittaminen epäonnistuu ¶ Ks. luvut 1.8, 3.2 ja 4.1 ja vrt. käännösaikainen virhe ja looginen virhe. Esimerkiksi nollalla jakaminen ja tietokoneen vapaan muistin loppuminen aiheuttavat ajonaikaisia virheitä. Ajonaikainen virhe johtaa usein ohjelma-ajon “kaatumiseen” eli keskeytymiseen ellei sitä onnistuneesti ehkäistä tai käsitellä.
ajuri
driver ohjelma, jonka tehtävänä on ohjata tietyn oheislaitteen, kuten hiiren tai näytönohjaimen, käyttöä ¶ Käyttöjärjestelmä käyttää oheislaitteita ajurien avulla.
algoritmi
algorithm vaiheittainen, toimiva ratkaisumenetelmä jollekin ongelmalle ¶ Ks. luku 1.2. Algoritmit eivät välttämättä liity tietokoneisiin tai ohjelmointiin; esimerkiksi tapa, jolla lukuja jaetaan jakokulmassa, on algoritmi (joka voidaan kyllä toteuttaa tietokoneohjelmaksikin).
aliluokka
subclass/derived class luokka, joka perii jonkin toisen luokan ja edustaa yliluokkansa kuvaaman käsitteen alakäsitettä ¶ Aliluokka “perii” yliluokan ominaisuudet; ks. luku 6.4. Sen ilmentymät ovat paitsi aliluokan itsensä tyyppisiä, myös yliluokan tyyppisiä. Aliluokka määritellään mm. Scalassa siten, että aliluokan määrittelyyn kirjataan merkintä sen välittömästä yliluokasta; aliluokalle voi Scalassa kirjata vain yhden välittömän yliluokan. Vrt. piirreluokan liittäminen ja ks. moniperintä.
aliohjelma
subprogram sama kuin funktio
alkio
element kokoelman tai vastaavan tietorakenteen sisältämä arvo ¶ Ks. luku 1.5.
alkiokokoelma
ks. kokoelma
Any
Any kaikkien Scala-luokkien yliluokka ¶ Ks. luku 6.4.
AnyRef
AnyRef useimpien Scala-luokkien yliluokka ¶ Ks. luku 6.4. Scala-ohjelmaa suorittava virtuaalikone käsittelee AnyVal-olioita viittausten kautta; vrt. AnyVal. AnyRef on Anyn välitön aliluokka. Ks. myös Object.
AnyVal
AnyVal eräiden tehokkuusoptimoitujen Scala-luokkien yliluokka ¶ Ks. luku 6.4 (ja 2.9). Scala-ohjelmaa suorittava virtuaalikone ei käsittele AnyVal-olioita viittausten kautta; vrt. AnyRef. AnyVal on Anyn välitön aliluokka.
API
API application programming interface eli sovelluskirjasto
apply
apply (Scalassa:) nimi, joka voidaan antaa metodille, jotta tuota metodia voisi kutsua mainitsematta metodin nimeä laisinkaan ¶ Ks. luvut 4.5 ja 7.4. Eräänlainen “olion oletusmetodi”: olio(parametrit) on lyhennysmerkintä kutsulle olio.apply(parametrit) ja toimii vain, jos oliolle on apply-niminen metodi asianmukaisesti määritelty. apply-metodeita käytetään Scalassa mm. tehdasmetodeina mutta myös muihin tarkoituksiin.
argumentti
argument 1) parametrilauseke; 2) parametriarvo ¶ Sanoja “parametri” ja “argumentti” käytetään monesti sekaisin. On kohtalaisen yleistä (ja joidenkin mielestä ainoa oikea tapa) käyttää sanaa “argumentti”, kun funktiolle välitettävää tietoa tarkastellaan funktion itsensä ulkopuolelta (esimerkiksi funktiokutsulausekkeessa), ja sanaa “parametri”, kun funktion vastaanottamia tietoja tarkastellaan funktion sisällä (erityisesti: parametrimuuttujista puhuttaessa). Tämän kurssin materiaalissa on vältetty “argumentti”-termiä.
arvo
value 1) “yksittäinen ohjelman käsittelemä tiedonjyvänen” eli lausekkeen evaluoimisen tulos, jota ei voi enää evaluoida yksinkertaisemmaksi; 2) hakurakenteen sisältämän avain–arvo-parin toinen osa, joka voidaan hakea avaimen perusteella ¶ Esimerkiksi Scala-kielisen aritmeettisen lausekkeen 1 + 1 arvo on kokonaisluku kaksi (ks. oppimateriaalin luku 1.3), funktiokutsun min(10, 5) arvo on luku viisi (ks. luku 1.6) ja lausekkeen Buffer(10, 2, 3) arvo on viittaus erääseen puskuriin (ks. luku 1.5). Huom. termiä “arvo” käytetään kurssilla eri tavoin kuin osassa Scala-kieltä hyödyntävästä ohjelmointikirjallisuudesta, jossa arvoiksi sanotaan mitä tahansa olioita.
askeltaja
stepper muuttuja, jota käytetään pitämään kirjaa arvosta, joka on viimeisin tietyssä etukäteen tunnetussa arvojen sarjassa ¶ Yksi muuttujien rooleista. Ks. luvut 2.6 ja 5.3. Askeltaja voi esimerkiksi pitää kirjaa kasvavasta järjestysnumerosta: 0, 1, 2, jne.
avain
key tieto, jonka perusteella voidaan paikantaa toinen tieto eli arvo (hakurakenteessa) ¶ Ks. luku 9.1 ja vrt. indeksi.
avain–arvo-pari
key–value pair avaimen ja arvon muodostama pari ¶ Käytetään erityisesti hakurakenteiden alkioina; ks. luku 9.1.
bitti
b(inary dig)it digitaalisen tiedon perusyksikkö, jolla voi olla yksi kahdesta arvosta ¶ Usein bitin kahteen arvoon viitataan numeroilla 0 ja 1; biteistä voidaan näin muodostaa binaarilukuja. Bittejä järjestelmällisesti yhdistelemällä voidaan kuvata erilaista tietoa esimerkiksi tietokoneessa; ks. luku 5.2.
Boolean
Boolean totuusarvoja Scala-ohjelmissa kuvaava tietotyyppiBoolean-tyyppisiä arvoja on vain kaksi: tosi ja epätosi, joita kuvaavat Scalassa literaalit true ja false. Ks. luku 2.8; ks. myös vertailuoperaattori ja logiikkaoperaattori.
bugi
bug virhe ¶ Sanaa käytetään erityisen usein toimintavirheistä, jotka ilmenevät ohjelmaa ajettaessa, eli ajonaikaisista ja loogisista virheistä.
catch
catch (Scala-kielessä:) poikkeustenkäsittelyssä käytetty varattu sana, jolla aloitetaan try-lohkon jälkeinen toinen lohko, joka suoritetaan try-lohkon jälkeen (mutta mahdollista finally-lohkoa ennen) siinä tapauksessa, että try-lohkoa suoritettaessa tapahtui virhe
debugata
debug etsiä virheitä ohjelmasta; erityisesti: etsiä ajonaikaisia tai loogisia virheitä
debuggeri
debugger apuohjelma, jonka avulla ohjelmoija voi tutkia ohjelman suoritusta vaiheittain samalla tarkastellen tietokoneen muistin sisältöä ¶ Debuggeria voi käyttää debugatessa tai muusta syystä ohjelmaan perehtyessä. Ks. luku 4.1.
deklaratiivinen ohjelmointi
declarative programming yleinen ohjelmointiparadigma, jossa ohjelma muodostuu oleellisesti ongelman ratkaisemiseen tarvittavista määritelmistä, säännöistä, rajoitteista (tms.) eikä peräkkäisten käskyjen sarjoista kuten imperatiivisessa ohjelmoinnissa ¶ Ks. luku 7.5. Deklaratiiviseen paradigmaan luetaan monesti erilaisia toisistaan paljonkin poikkeavia ohjelmointitapoja. Funktionaalinen ohjelmointi lienee deklaratiivisen ohjelmoinnin merkittävin aliparadigma.
dialogi(-ikkuna)
dialog (box) eräänlainen GUI-elementti; ikkuna, joka näytetään käyttäjälle väliaikaisesti ja jota käytetään käyttäjän ja ohjelman väliseen “vuoropuheluun” ¶ Ks. luku 11.2. Monissa sovelluksissa on suurempi pääikkuna, jonka oheen avataan väliaikaisesti erilaisia pienempiä dialogeja.
do-silmukka
do loop silmukka, joka on muodostettu do-avainsanaa käyttäen ja joka toistaa toimenpidettä yhden tai useampia kertoja ¶ Ks. luku 6.1 ja vrt. while-silmukka.
dokumentaatio
documentation ohjelmaa siihen perehtyvälle ihmiselle selkiyttävä asiakirja tai sellaisten kokoelma ¶ Erityisesti ohjelman osien rajapinnat on tapana kuvata laatimalla niistä dokumentaatiota; ks. luku 2.6. Ks. myös Scaladoc.
dokumentaatiokommentti
doc(umentation) comment erityisellä tavalla muotoiltu kommentti, jota voidaan käyttää dokumentaation tuottamiseen osittain automaattisesti ¶ Ks. luku 2.6. Scala-ohjelman ja siihen upotettujen dokumentaatiokommentien perusteella voidaan luoda dokumentaatiota Scaladoc-työkalulla.
domain
domain sama kuin aihealue ¶ Sanalla viitataan usein (kurssimme ulkopuolella) myös verkkotunnuksiin kuten aalto.fi, mikä on ihan eri asia.
Double
Double (Scala-kielessä:) tietotyyppi, jolla kuvataan desimaalilukuja liukulukuina ¶ Ks. luvut 1.3 ja 5.2. Vastaavalla tietotyypillä on samankaltainen nimi useassa muussakin ohjelmointikielessä; nimi tulee ilmaisusta double precision floating point number.
DRY
DRY periaate, jonka mukaan kukin ohjelmistoon liittyvä seikka tulee olla määritelty vain kerran yhdessä paikassa ¶ Sanoista don’t repeat yourself. Lähdekoodin laatimiseen sovellettuna DRY-periaate kannustaa välttämään toisteisuutta koodissa, ja periaatteen noudattaminen parantaa usein mm. ohjelman muokattavuutta. Ks. esim. luvut 1.4, 3.5, 6.2 ja 10.1. Vastaava periaate on esitetty ohjelmoijien keskuudessa myös monella muulla nimellä. Vastakohta: WETWET.
DSL
DSL domain-specific language eli täsmäkieli
dynaaminen
dynamic ohjelma-ajoon tai ohjelman suorittamisen tuottamaan prosessiin liittyvä, ohjelmaa ajaessa määrittyvä; ei-staattinen, muuttuva ¶ Tietokoneohjelmalla voidaan sanoa olevan kaksi “olomuotoa”, staattinen ja dynaaminen; ks. esim. luvut 1.2 ja 2.1. Ohjelman dynaamisiin piirteisiin voi vaikuttaa esimerkiksi ohjelman käyttäjän antama syöte. Ks. myös dynaaminen tyyppi.
dynaaminen ohjelmointi
dynamic programming ohjelmien toteuttamistekniikka, jossa pienempien osaongelmien ratkaisuja tallennetaan muistiin, jotta niitä voidaan tehokkaasti hyödyntää (kenties useita kertoja) isompien osaongelmien ratkaisuissa ¶ Tästä tekniikasta on yksi pieni esimerkki luvussa 11.3. Huom. Sanalla “dynaaminen” ei ole tässä yhteydessä aivan samanlaista merkitystä kuin muissa kurssilla esiintyvissä yhteyksissä. Sana on valittu tekniikan nimeen osin markkinointimielessä.
dynaaminen sidonta
dynamic binding/dispatch käytäntö, jossa vasta ohjelma-ajon aikana lyödään ajonaikaisen tiedon perusteella lukkoon, mitkä funktiot suoritetaan ¶ Olio-ohjelmoinnissa dynaaminen sidonta ilmenee muun muassa siten, että vasta metodikutsua suoritettaessa tehdään kohdeolion dynaamisen tyypin perusteella päätös siitä, mikä metoditoteutus suoritetaan; päätökseen vaikuttaa siis se, minkä aliluokan olio on viestiä vastaanottamassa. Ks. luvut 6.2 ja 6.4.
dynaaminen tyyppi
runtime/dynamic type arvon tyyppi ¶ Määrittyy dynaamisesti ohjelma-ajon aikana. Staattiselta tyypiltään tietynlaisen lausekkeen tai muuttujan arvolla voi olla mikä tahansa sellainen dynaaminen tyyppi, joka on staattisen tyypin kanssa yhteensopiva; ks. luvut 6.2 ja 6.4.
dynaamisesti tyypitetty
dynamically typed (ohjelmointikielestä:) tyyppijärjestelmältään sellainen, että lähdekoodin osille ei määritetä tyyppejä staattisesti, vaan ainoastaan arvojen dynaamisilla tyypeillä on merkitystä. ¶ Esimerkiksi muuttujilla ei siis dynaamisesti tyypitetyssä kielessä ole tyyppejä, vaan niihin voi sijoittaa mitä tahansa arvoja. Vrt. staattisesti tyypitetty. Dynaamisesti tyypitettyjä ohjelmointikieliä ovat esimerkiksi Python, JavaScript ja Ruby. Scala ei lähtökohtaisesti ole dynaamisesti tyypitetty, mutta taipuu myös sellaiseen käyttöön.
Eclipse
Eclipse eräs sovelluskehitin ¶ Ks. luvut 1.2 ja 5.2. Eclipse ja ja sen Scala IDE -lisäosa ovat kurssin virallinen (joskaan ei pakollinen) työskentely-ympäristö.
editori
editor sovellusohjelma tekstin muokkaamiseen
ehdollinen operaattori
short-circuited operator logiikkaoperaattori, jonka jälkimmäistä operandia ei evaluoida, mikäli loogisen operaation tulos määrittyy jo ensimmäisen operandin perusteella ¶ Ks. luku 3.4.
eksplisiittinen
explicit nimenomaisesti sanottu, selvästi ilmoitettu; ohjelmakoodiin nimenomaisesti kirjattu ¶ Vastakohta: implisiittinen.
elementti
element 1) alkio; 2) GUI-elementti
ensimmäisen asteen funktio
first-order function funktio, joka ei ole korkeamman asteen funktio
evaluoida
evaluate määrittää lausekkeen arvo ¶ Ks. esim. luku 1.3. Lausekkeen evaluoimiseksi tarvittavat toimenpiteet riippuvat lausekkeesta. Esimerkiksi aritmeettisen lausekkeen kuten 1 + 1 evaluoiminen edellyttää laskutoimituksen tekemistä, ja muuttujan nimen muodostama lauseke evaluoidaan noutamalla arvo nimetystä muuttujasta. Funktiokutsulauseke evaluoidaan suorittamalla kyseinen funktio; tällaisen lausekkeen arvo on funktion palautusarvo.
evaluointialue
tietokoneen muistin osa (kehyksen sisällä), jota käytetään apuna lausekkeita evaluoitaessa ¶ Ks. esim. luvut 1.3 ja 1.7. Tämä on lähinnä tässä kurssimateriaalissa käytetty termi. Evaluointialue on keskeisessä roolissa kurssimateriaaliin upotetuissa ohjelman suorittamista kuvaavissa animaatioissa.
finally
finally (Scala-kielessä:) poikkeustenkäsittelyssä käytetty varattu sana, jolla aloitetaan try-lohkon jälkeinen toinen lohko, joka suoritetaan try-lohkon (ja mahdollisen catch-lohkon) jälkeen riippumatta siitä, tapahtuiko try-lohkoa suoritettaessa aikana virhettä vai ei.
for-silmukka
for loop silmukka, joka on muodostettu for-avainsanaa käyttäen ¶ Scalassa kaikki for-silmukat ovat ns. foreach-silmukoita. Joissakin muissa kielissä on myös muunlaisia for-sanaa käyttäen muodostettavia silmukoita.
foreach-silmukka
foreach loop silmukka, joka käy läpi annetun kokoelman ja toistaa tiettyä toimenpidettä kunkin tuon kokoelman alkion kohdalla ¶ Scalassa ns. foreach-silmukka kirjoitetaan sanaa for-käyttäen; ks. luvut 5.3 ja 5.4. (Huom. Scalan foreach-silmukka on erittäin monipuolinen, eikä sen kaikkia piirteitä käsitellä Ohjelmointi 1 -kurssilla. Lisää aiheesta toisilla ohjelmointikursseilla tai muista lähteistä.)
funktio
function aliohjelma; ohjelman osa, joka huolehtii tietystä tehtävästä ja joka voidaan määrätä suoritettavaksi kutsumalla sitä ¶ Ks. luvut 1.6, 1.7 ja 1.8. Funktio määritellään kirjaamalla ohjelmakoodiin sen puumerkki ja runko. Kun funktio on määritelty, sitä voi kutsua, jolloin sen ohjelmakoodi suoritetaan. Mm. Scala-kielessä funktiot voivat olla tilaa muuttavia tai tilaa muuttamattomia. Metodit ovat olioihin liitettyjä funktioita.
funktiokutsu
function call 1) lauseke, joka evaluoidaan suorittamalla tietyn funktion ohjelmakoodi; 2) tällaisen lausekkeen suorittamisesta syntyvä toiminta ¶ Ks. luvut 1.6 ja 1.7. Monille funktioille välitetään parametreja; parametrilausekkeet kirjataan funktiokutsulausekkeeseen. Kun funktiokutsu suoritetaan, sen tarpeisiin luodaan (tavallisesti) kehys ja funktion rungon sisältämät käskyt suoritetaan. Funktiokutsulausekkeen arvo on funktion koodin suorittamisen tuottama palautusarvo. Scala-ohjelmien funktiot palauttavat aina jonkin arvon, joskin palautusarvo voi olla vain Unit merkkinä siitä, ettei merkityksellistä palautusarvoa ole.
funktioliteraali
function literal literaali, joka määrittelee nimettömän funktion ¶ Scala tarjoaa useita vaihtoehtoisia tapoja kirjoittaa funktioliteraaleja; ks. luku 7.4.
funktion runko
function body funktion määrittelyn se osa, joka määrittelee, mitkä käskyt suoritetaan, kun funktiota kutsutaan ¶ Ks. luku 1.7. Scala-koodissa funktion runko kirjoitetaan funktion puumerkin ja yhtäsuuruusmerkin perään.
funktionaalinen ohjelmointi
functional programming ohjelmointiparadigma, joka perustuu tilaa muuttamattomiin funktioihin ja muuttumattomaan tietoon ja johon tyypillisesti yhdistyy runsas korkeamman asteen funktioiden käyttäminen ¶ Ks. luku 7.5 ja vrt. imperatiivinen ohjelmointi. Funktionaalinen ohjelmointi on keskeinen deklaratiivisen ohjelmoinnin muoto.
generoiva rekursio
generative recursion rekursion muoto, jossa algoritmi tai ohjelma luo muistiin uusia arvoja ja soveltaa sitten itseään niihin rekursiivisella kutsulla ¶ Ks. luku 11.3 ja vrt. rakenteellinen rekursio.
graafinen käyttöliittymä
graphical user interface käyttöliittymä, joka perustuu pelkkien kirjoitusmerkkien sijaan myös graafisiin elementteihin kuten ikkunoihin ja nappuloihin ¶ Ks. luku 11.2. Graafisiin käyttöliittymiin viitataan suomeksikin hyvin usein lyhenteellä GUI. Graafiset käyttöliittymät ovat nykyään erittäin yleisiä erityisesti sellaisissa sovellusohjelmissa, joiden käyttäjät eivät itse ole ohjelmoijia.
GUI
GUI graphical user interface eli graafinen käyttöliittymä
GUI-elementti
GUI element graafisen käyttöliittymän osa ¶ Ks. GUI-komponentti.
GUI-komponentti
GUI component graafisen käyttöliittymän osa; erityisesti: sellainen graafisen käyttöliittymän osa, joka on sijoitettu ikkunan sisälle ¶ Esimerkiksi nappulat ja tekstikentät ovat GUI-komponentteja. GUI-elementillä tarkoitetaan usein samaa, mutta joissain yhteyksissä komponenteiksi kutsutaan vain käyttöliittymäikkunan varsinaisen sisällön muodostavia osia (ei esim. dialogeja ja muita ikkunoita), kun taas “elementti”-sanalla on yleisempi merkitys.
hakurakenne
map/dictionary kokoelma, jonka alkiot ovat avain–arvo-pareja ja josta voi poimia arvon käyttämällä tuon arvon yksiselitteisesti osoittavaa avainta ¶ Ks. luvut 9.1 ja 9.2. Hakurakenteita on (esim. Scalassa) sekä muuttuvatilaisia että muuttumattomia. Hakurakenteista käytetään monia muitakin nimiä, esim. “sanakirja”, “assosiatiivinen taulukko” ja “mäppi”.
hierarkia
hierarchy ks. luokkahierarkia
I/O
I/O lyhenne termille input/output
IDE
IDE integrated development environment eli sovelluskehitin
if
if monissa ohjelmointikielissä esiintyvä valintakäsky, jolla voidaan määrätä tietokone valitsemaan kahdesta vaihtoehdosta totuusarvoisen lausekkeen arvon perusteella ¶ Ks. luku 2.9.
ilmentymä
instance luokan perusteella luotu olio, yksittäistapaus luokan kuvaamasta käsitteestä ¶ Ks. luku 2.3. Ilmentymien tietoja ei kirjata ohjelmakoodiin samoin kuin yksittäisolioiden, vaan ne luodaan luokkamäärittelyn perusteella instantioimalla. Ilmentymiä sanotaan myös “instansseiksi”.
ilmentymämuuttuja
instance variable 1) luokan jäsenmuuttuja; 2) luokan jäsenmuuttujan ilmentymäkohtainen kopio tietokoneen muistissa ¶ Ilmentymien tiedot varastoidaan ilmentymämuuttujiin; ks. luku 2.4.
implisiittinen
implicit kätketty; (vain) epäsuorasti pääteltävissä oleva; ei eksplisiittinen
imperatiivinen ohjelmointi
imperative programming yleinen ohjelmointiparadigma, joka perustuu muuttuvatilaisen tiedon käsittelyyn peräkkäin järjestetyillä lauseilla ja tilaa muuttavilla aliohjelmilla ja johon tyypillisesti yhdistyy runsas silmukoiden käyttö toiston välineenä ¶ Ks. luku 7.5 ja vrt. funktionaalinen ohjelmointi.
implisiittinen riippuvuus
implicit tilanne, jossa yhden ohjelmakoodin osan muuttaminen edellyttää muutoksia myös toisaalle ohjelmassa, mutta tämä tarve ei ole ilmeinen ¶ Esimerkiksi maagiset luvut aiheuttavat implisiittisiä riippuvuuksia; ks. myös luku 10.1. Implisiittiset riippuvuudet huonontavat ohjelmakoodin muokattavuutta ja kasvattavat bugien riskiä.
indeksi
index alkion järjestysnumero sellaisessa kokoelmassa, jonka alkiot ovat numeroidussa järjestyksessä ¶ Esimerkiksi taulukot, vektorit ja puskurit ovat indeksoituja kokoelmia. Indeksoidun kokoelman alkioihin pääsee käsiksi indeksin perusteella; ks. luku 1.5. Joissakin ohjelmointikielissä indeksointi alkaa ykkösestä eli ensimmäisen alkion indeksi on 1. Toisissa (kuten Scalassa) se alkaa nollasta.
indeksoida
index 1) osoittaa alkiokokoelman kohta indeksiä käyttäen; 2) varustaa indekseillä ¶ Esim. lausekkeessa puskuri(0) = 10 indeksoidaan puskuria (merkitys 1), ja näin sijoitetaan sen ensimmäiseksi alkioksi luku 10.
indeksoitu
indexed (kokoelmasta:) indekseihin perustuva
input/output
input/output ohjelman ja sen ulkopuolisten tahojen välinen viestintä; lukeminen ja kirjoittaminen ¶ “Ulkopuolisia tahoja” voivat olla esimerkiksi tiedostot (ks. luku 9.4), tietokoneen oheislaitteet (esim. näppäimistö, näyttö) ja toiset tietoverkossa sijaitsevat tietokoneet. Usein käytetään lyhennettä I/O tai IO.
instanssi
instance sama kuin ilmentymä
instantioida
instantiate luoda olio tietyn luokan ilmentymäksi ¶ Instantioiminen tapahtuu siten, että käytössä on luokan määrittely ja suoritetaan käsky, joka määrää olion luotavaksi tämän määrittelyn perusteella. Scalassa instantiointiin käytetään new-sanaa; ks. luku 2.3. Instantioinnin yhteydessä uudelle oliolle varataan muistitilaa ja alustetaan olio konstruktorin avulla. Instantiointikäskyn voidaan sanoa olevan eräänlainen erikoisfunktiokutsu.
iteraatio
iteration 1) toistaminen siten, että kukin toistokerta jatkaa siitä, mihin edellinen jäi; 2) sellaiseen toistoon perustuva ohjelmien toteutustapa, erityisesti: lauseiden toistaminen silmukalla ¶ Vrt. rekursio ja ks. luku 11.3.
iteraattori
iterator olio, joka tarjoaa palvelun tietyn kokoelman sisällön läpikäymiseen jossakin järjestyksessä ¶ Ks. luku 9.4.
itsenäinen yksittäisolio
standalone object yksittäisolio, joka ei ole kumppaniolio
Java
Java 1) eräs ohjelmointikieli; 2) alun perin Java-kielen yhteyteen suunniteltu ohjelmointityökalusto, ns. Java platform, johon sisältyy eritoten Java-virtuaalikone ¶ Java-kieli on tarkoitettu lähinnä imperatiiviseen olio-ohjelmointiin. Java-ohjelmia ajetaan yleensä Java-virtuaalikoneessa kuten Scala-ohjelmiakin, ja Scala-ohjelmistakin on helppo käyttää Java-kielellä laadittuja kirjastoja; ks. luvut 5.2, 9.4, 11.2.
Java-virtuaalikone
Java Virtual Machine eräs virtuaalikone ¶ Ks. luku 5.2. Java-virtuaalikone eli JVM suunniteltiin Java-ohjelmointikielen yhteyteen, mutta sittemmin on ryhdytty kääntämään monia muitakin ohjelmointikieliä sellaiseksi tavukoodiksi, jota JVM osaa suorittaa. Scala on yksi näistä kielistä.
julkinen
public ulospäin näkyvä; rajapintaan kuuluva; mistä tahansa ohjelmassa käytettävissä oleva ¶ Ks. luku 2.6 ja vrt. yksityinen. Scalassa kaikki sellaiset luokkien ja yksittäisolioiden jäsenet, joiden näkyvyyttä ei erikseen ole rajoitettu, ovat julkisia.
JVM
JVM Java Virtual Machine eli Java-virtuaalikone
järjestäminen
sorting kokoelman alkioiden asettaminen järjestykseen jonkin kriteerin perusteella ¶ Esimerkiksi lukuja sisältävä taulukko voidaan järjestää siten, että sen sisältämät luvut asetetaan nousevaan tai laskevaan suuruusjärjestykseen; ks. luku 9.2. Järjestämisen yhteydessä voidaan luoda uusi kokoelma järjestettyä tietoa varten; muuttuvatilainen kokoelma voidaan myös järjestää “paikallaan” (in place).
jäsen
member nimetty luokan tai yksittäisolion osa ¶ Metodit ja jäsenmuuttujat ovat jäseniä.
jäsenmuuttuja
member variable muuttuja, joka on luokan tai yksittäisolion jäsen ¶ Luokkien jäsenmuuttujia sanotaan usein ilmentymämuuttujiksi, koska niistä luodaan muistiin kopio jokaista luokan ilmentymää kohden; ks. luku 2.4.
kapselointi
encapsulation sana, jolla tarkoitetaan jompaakumpaa seuraavista tai niiden yhdistelmää: 1) tiedon piilottaminen jonkin rajapinnan taakse esimerkiksi näkyvyysmääreitä käyttäen; 2) aliohjelmien liittäminen samaan kokonaisuuteen niiden käsittelemien tietojen kanssa (kuten olioissa)
katenoida
catenate yhdistää peräkkäin asettaen ¶ Käytetään ohjelmoinnin yhteydessä erityisesti merkkijonoista; esimerkiksi merkkijonot “kon” ja “katenoida” katenoimalla syntyy merkkijono “konkatenoida”.
kehys
(stack) frame osa tietokoneen muistista, joka on varattu tietyn funktiokutsun suorittamiseen tarvittavien tiedon varastoimiseen ¶ Ks. luvut 1.7 ja 1.8. Kehysten tyypilliseen sisältöön lukeutuvat mm. paikalliset muuttujat, osio lausekkeiden evaluoimiselle funktiokutsun aikana sekä tieto siitä, mistä ohjelman kohdasta funktiota on kutsutta ja mihin siis tulee palata funktiokutsun päättyessä. Kukin kehys pidetään varattuna niin kauan kuin funktiokutsu kestää. Kehykset muodostavat kutsupinon.
kenttä
field sama kuin jäsenmuuttuja
keskeytyskohta
breakpoint debuggerissa tehty asetus, joka saa ohjelman suorituksen pysähtymään, kun tarkasteltavan ohjelman suorituksessa saavutaan tiettyyn vaiheeseen ¶ Ks. luku 4.1. Myös “keskeytyspiste”.
kiintoarvo
fixed value muuttuja, jonka arvoa ei vaihdeta sen jälkeen, kun muuttuja on kerran alustettu sopivalla arvolla ¶ Yksi muuttujien rooleista. Ks. luku 2.5 ja vrt. vakio ja val-muuttuja.
kirjasto
library valikoima aliohjelmia, luokkia tai vastaavia ohjelmien osiksi sopivia komponetteja ¶ Eräät kirjastot, kuten Scala API, liittyvät kiinteästi tiettyyn ohjelmointikieleen. Jotkut kirjastot ovat yleiskäyttöisempiä kuin toiset, eli niiden tarjoamia osia voi hyödyntää useammanlaisten eri ohjelmien “rakennuspalikoina”.
kirjastofunktio
library function funktio, joka sisältyy johonkin kirjastoon ¶ Käytetään usein korostamaan sitä, että kyseessä ei ole ohjelmoijan itsensä tiettyyn sovellukseen laatima funktio vaan yleiskäyttöisemmän kirjaston osa, jota hyödynnetään.
kirjoittaa
write/print 1) välittää tietoa ohjelmasta sen ulkopuolelle (osa I/O:ta); 2) sijoittaa ¶ Ks. luku 9.4; ks. myös tulostaa.
klosuuri
(lexical) closure sama kuin sulkeuma
koheesio
cohesion yhteenliittyvyys, yhtenäisyys; se, kuinka tiiviisti tietty ohjelman osa muodostaa yhden selvästi rajatun kokonaisuuden, jonka osat liittyvät toisiinsa ¶ Esimerkiksi luokalla on korkea koheesio, jos se määrittelee yhden selvästi muista erottuvan käsitteen eikä sisällä tähän käsitteeseen liittymättömiä jäseniä. Koheesio on toivottava piirre ohjelmaa suunnitellessa; ks. luku 10.1.
kokoelma
collection/container tietorakenne, jonka tehtävänä on pitää kirjaa useasta arvosta ¶ Scala-ohjelmissa kokoelmia kuvataan olioina. Kokoelman sisältämiä arvoja sanotaan alkioiksi. Kokoelmia on eri tyyppisiä; erilaiset kokoelmat eroavat toisistaan mm. muokattavuuden ja tehokkuuden osalta. Joissakin kokoelmissa alkiot ovat hyvin määritellyssä järjestyksessä esimerkiksi indeksien perusteella. Kokoelmatyypit ovat usein tyyppiparametrillisia. Kurssilla käsiteltäviin kokoelmatyyppeihin lukeutuvat mm. puskurit, merkkijonot, vektorit, taulukot, hakurakenteet ja pinot. Funktionaalisessa Scala-ohjelmoinnissa käytetään usein myös muita kokoelmatyyppejä kuten listoja ja virtoja, joita käsitellään jatkokursseilla.
kokooja
gatherer muuttuja, jota käytetään kokoamaan tulos useiden yksittäisten arvojen perusteella, näitä arvoja vaiheittain yhdistellen ¶ Kokoojaan voidaan esimerkiksi muodostaa vaiheittain lukujen summa. Kokooja on yksi muuttujien rooleista. Ks. luvut 2.5 ja 5.3.
komentosarja
script skripti (erityisesti: sellainen skripti, jota käytetään työvaiheiden automatisointiin)
kommentti
comment lähdekoodiin kirjoitettu ihmislukijalle tarkoitettu osio, jota tietokone ei tulkitse osaksi suoritettavaa ohjelmaa ja joka ei siis vaikuta ohjelman toimintaan ¶ Asianmukainen kommenttien käyttö kuuluu hyvään ohjelmointityyliin. Ks. luku 1.2 ja kurssin tyyliopas. Ks. myös dokumentaatiokommentti.
komponentti
component 1) osa; 2) GUI-komponentti
konekieli
machine code/language ohjelmointikieli, joka sopii (tietynlaisten) prosessorien suoritettavaksi ¶ Ks. luku 5.2. Konekielet ovat pääsääntöisesti erittäin matalatasoisia laitteistoriippuvaisia kieliä. Prosessorin käsittelemät konekieliset ohjelmat muodostuvat tällöin (binaari)luvuista, mutta konekielinen ohjelma voidaan esittää myös symbolisessa muodossa. Nykyään ohjelmat usein kirjoitetaan korkean tason kielellä, joka muunnetaan konekieleksi ennen ajamista esimerkiksi kääntämällä. Sanaa “konekieli” voidaan käyttää myös symbolisista konekielistä ja virtuaalikoneiden suoritettaviksi sopivista näennäiskonekielistä.
konkatenoida
concatenate sama kuin katenoida
konkreettinen luokka
concrete class luokka, joka ei ole abstrakti eikä piirreluokka ¶ “Tavallinen luokka”. Konkreettisessa luokassa ei voi olla abstrakteja metodeja, mutta myös konkreettinen luokka voi toimia yliluokkana kuten abstrakti luokkakin; ks. luku 6.4.
konstruktori
(instance) constructor aliohjelma, joka suoritetaan ilmentymää luodessa ¶ Sanalla “konstruktori” viitataan ohjelmakoodiin, joka suoritetaan instantioinnin yhteydessä, kun olion tiedoille on varattu muistitilaa. Scala-ohjelmiin ei kirjoiteta konstruktoria mihinkään erilliseen paikkaan (kuten joissakin muissa kielissä), vaan konstruktori muodostuu luokan runkoon kirjoitetuista käskyistä; ks. luku 2.4. Konstruktorin pääasiallinen tehtävä on alustaa juuri luodun olion tila halutunlaiseksi. Monesti konstruktorille annetaan parametreja, jotka täsmentävät, millainen ilmentymä luokasta halutaan luoda.
konstruktoriparametri
constructor parameter konstruktorille välitetty parametri ¶ Ks. luvut 2.3 ja 2.4. Konstruktoriparametreja käytetään, kun luokasta instantioidaan uusia olioita. On tyypillistä, että konstruktoriparametrien arvot sijoitetaan uuden olion ilmentymämuuttujien arvoiksi, mutta niitä voidaan hyödyntää myös muulla tavoin olion alustamisen yhteydessä.
koodi
code ks. ohjelmakoodi
korkeamman asteen funktio
higher-order function funktio, joka käsittelee toisia funktioita: ottaa niitä parametriksi tai palauttaa niitä ¶ Ks. luku 7.3. Käytetään myös nimeä “korkeamman kertaluvun funktio”. Muunlaisia funktioita voidaan sanoa “ensimmäisen asteen funktioiksi”.
korkean tason kieli
high-level language ohjelmointikieli, jonka abstraktiotaso on korkea ja joka ei riipu ohjelmaa suorittavan tietokoneen erityispiirteistä ¶ Kielen “korkeus” on suhteellista, mutta esimerkiksi Scalaa pidetään yleisesti varsin korkean tason ohjelmointikielenä. Vrt. matalan tason kieli ja konekieli. Korkean tason kielet ovat yleensä ihmisten käyttöön sopivampia kuin matalan tason kielet.
korvata
override toteuttaa yliluokassa jo määritelty metodi uudelleen ¶ Aliluokassa voidaan korvata yliluokan määrittelemä metoditoteutus toteutuksella, joka sopii aliluokan ilmentymille; ks. luku 6.4.
kumppaniolio
companion object yksittäisolio, joka toimii tietyn luokan “kumppanina” ja mallintaa kyseistä luokkaa itseään olio-ohjelmassa ¶ Kumppaniolio on luokkansa kanssa samanniminen ja tulee määritellä samassa lähdekooditiedostossa; ks. luku 4.5. Luokalla ja sen kumppanioliolla on pääsy toistensa tietoihin. Kumppanioliossa voidaan pitää kirjaa esimerkiksi luokkaan liittyvistä vakioista tai muusta sellaisesta tiedosta, joka liittyy luokan edustamaan käsitteeseen mutta ei ole ilmentymäkohtaista.
kuormittaa
overload määritellä samaan ohjelmakomponenttiin (esim. luokkaan) keskenään samannimisiä funktioita, joilla kuitenkin on erilaiset parametrit ja siten eri puumerkit ¶ Ks. luku 3.5.
kutsua
call/invoke/apply määrätä funktio suoritettavaksi ¶ Ks. funktiokutsu.
kutsumuoto
signature sama kuin puumerkki
kutsupino
(call) stack pinotyyppinen kehyksiä sisältävä tietorakenne, jonka avulla pidetään ohjelma-ajon aikana kirjaa kullakin hetkellä käynnissä olevista funktiokutsuista ¶ Ks. luvut 1.7 ja 1.8.
käsky
tietokonetta ohjeistava määräys ¶ “Käsky”-sanaa käytetään kurssilla hyvin epämuodollisesti mistä tahansa tietokoneen komentamisesta. Esimerkiksi tilan muuttamiseen käytettävät lauseet ovat käskyjä, samoin REPLin evaluoitaviksi annetut tilaa muuttamattomat lausekkeet.
käynnistysolio
main object (Scalassa:) sovellukseen kuuluva yksittäisolio, jonka yhteyteen kirjataan, mitä tietokoneen kuuluu tehdä, kun kyseinen sovellus käynnistetään ¶ Ks. luku 2.7.
käyttöalue
scope se osa ohjelmakoodia, josta käsin tiettyä ohjelman osaa voi käyttää ¶ Esimerkiksi Scalassa luokan julkisen metodin käyttöalue on koko ohjelma, yksityisen vain tuo luokka itse (mahdollisine kumppaniolioineen), ja funktion parametrimuuttujan kyseisen funktion runko. Ohjelman lohkorakenne vaikuttaa käyttöalueeseen; ks. luku 5.4. Aihetta sivutaan myös luvussa 11.3.
käyttöjärjestelmä
operating system ohjelmisto, joka hallinnoi laitteiston käyttöä ja jonka avulla voidaan käynnistää sovellusohjelmia ¶ Käyttöjärjestelmä mm. huolehtii laitteistoresurssien (muisti, prosessori, tiedostot, tietoverkko, oheislaitteet ym.) käytöstä.
käyttöliittymä
user interface ohjelman tai laitteen se osa, jonka kanssa käyttäjä vuorovaikuttaa ¶ Sovellusohjelman käyttöliittymä voi esimerkiksi perustua tekstikonsoliin tulostuviin kirjoitusmerkkeihin tai se voi olla graafinen.
käyttöliittymätapahtuma
GUI event (graafiseen) käyttöliittymään liittyvä tapahtuma ¶ Esimerkiksi hiiren liikkeet sekä käyttöliittymän nappuloiden painaminen ovat käyttöliittymätapahtumia. Ks. luku 11.2.
käännösaikainen virhe
compilation-time error virhe, joka havaitaan automaattisesti ohjelmaa staattisesti käsittelemällä eli ohjelmaa ajamatta; erityisesti: virhe, joka havaitaan ohjelmaa kääntäessä ¶ Ks. luvut 1.8 ja 3.1 ja vrt. ajonaikainen virhe ja looginen virhe. Monet käännösaikaiset virheet ovat syntaksivirheitä.
kääntäjä
compiler apuohjelma, joka muodostaa annetusta lähdekoodista toisenkielisen version; erityisesti: apuohjelma, joka muodostaa käännetyn version staattisesti, ohjelma-ajosta erillään ¶ Ohjelmia voidaan kääntää välikielelle tai suoraan konekieleksi. Scala-ohjelmia käännetään yleensä Java-virtuaalikoneelle sopivalle välikielelle. Ks. luku 5.2 ja vrt. tulkki.
laiteajuri
device driver ks. ajuri
lajitteleminen
sorting sama kuin järjestäminen
lambdafunktio
lambda function sama kuin nimetön funktio ¶ Erityisesti kielissä, joissa sellaisen määrittelemiseen käytetään sanaa “lambda” tai vastaavaa kreikkalaista aakkosta.
lambdalauseke
lambda expression sama kuin funktioliteraali ¶ Erityisesti kielissä, joissa funktioliteraaleissa käytetään sanaa “lambda” tai vastaavaa kreikkalaista aakkosta.
lause
statement käsky, joka määrää tietokoneen suorittamaan jonkin toimenpiteen ¶ Ks. luku 1.3. Esimerkiksi Scalan tulostuskäsky println(1 + 1) ja sijoituskäsky a = 10 ovat lauseita. Lauseella ei välttämättä ole merkityksellistä arvoa; esimerkiksi Scala-lause voi tuottaa vain Unit-arvon ja olla silti hyödyllinen. Lause voi sisältää lausekkeita, jotka evaluoidaan lauseen suorittamisen aikana; esimerkiksi lause println(1 + 1) sisältää lausekkeen 1 + 1. Lauseita voi kirjoittaa ohjelmakoodiin peräkkäin, ja näin voidaan määrätä toimenpiteitä suoritettaviksi peräkkäisessä järjestyksessä. Yksi lausekekin voi muodostaa lauseen. Scala-kielessä funktioiden ja luokkien määrittelyt sekä import-käskyt luetaan virallisesti eräänlaisiksi lauseiksi nekin; ne eivät toisaalta ole lausekkeita, koska niille ei voida määrittää arvoa. (Vrt. tulostuslause on Scala-ohjelmassa paitsi lause myös lauseke, koska sillä on Unit-arvo.) Lauseen käsite liittyy erityisesti imperatiiviseen ohjelmointiin; puhtaasti funktionaalisessa ohjelmoinnissa lausekkeen käsite riittää.
lauseke
expression ohjelmointikielen ilmaisu, jolle voidaan määrittää arvo ¶ Ks. esim. luku 1.3 ja vrt. lause. Esimerkiksi literaalit, aritmeettiset lausekkeet kuten 1 + 1, muuttujien nimet ja ohjelmakoodiin kirjoitetut funktiokutsut ovat lausekkeita. Arvon määrittämistä sanotaan lausekkeen evaluoimiseksi.
LIFO
LIFO pinojen noudattama periaate, jonka mukaan alkiota poistettaessa poistetaan aina viimeksi lisätty alkio ¶ Sanoista last in, first out. Ks. luku 12.1.
liittää (piirre)
mix in (a trait) määritellä piirreluokka luokan (tai yksittäisolion) yläkäsitteeksi ¶ Ks. luku 6.2. Kun luokkaan on liitetty tietty piirre, sen ilmentymät ovat paitsi luokan itsensä tyyppisiä, myös liitetyn piirreluokan tyyppisiä. Piirteen liittävä luokka kuvaa piirreluokan kuvaaman käsitteen alakäsitettä. Luokkaan voi liittää useita piirreluokkia.
lippu
flag muuttuja tai vastaava tietorakenne, jota käytetään ilmoittamaan jostakin kaksijakoisesta asiaintilasta ¶ Ks. luku 6.3 ja yksisuuntainen lippu. Lippu voidaan toteuttaa esimerkiksi totuusarvoisena muuttujana.
Liskovin periaate
Liskov substitution principle tietotyyppien määrittelyyn liittyvä suunnitteluperiaate, jonka mukaan alatyypin (esim. aliluokan) arvoja täytyy voida mielekkäästi käyttää missä tahansa yhteydessä, jossa ylätyypinkin (esim. yliluokan) arvoja voi ¶ Ks. luku 6.4.
literaali
literal yksinkertainen lauseke, jonka arvo on kirjoitettu suoraan ohjelmakoodiin ¶ Esimerkiksi 10 on kokonaislukuliteraali ja "laama" merkkijonoliteraali. Ks. myös funktioliteraali.
liukuluku
floating point number tietokoneissa yleisesti käytetty bittitason esitystapa desimaaliluvuille ¶ Liukuluvun määrittävät etumerkkibitti, kerroin eli mantissa, kantaluku ja eksponentti. Kantalukuna käytetään yleensä (esim. Scalassa) lukua kaksi ja muut osat tallennetaan lukukohtaisesti. Aihetta sivutaan luvussa 5.2.
logiikkaoperaattori
logical operator operaattori, jonka operandit ovat totuusarvoja ja joka tuottaa totuusarvotyyppisen tuloksen ¶ Esimerkiksi && (and) ja || (or) ovat logiikkaoperaattoreita; ks. luku 3.4.
lohko
block (Scalassa:) aaltosulkeiden sisään kirjoitettu peräkkäisten lauseiden yhdistelmän muodostama lauseke ¶ Esimerkiksi funktion runko määritellään lohkoksi, kun runkoon kuuluu useita peräkkäisiä lauseita. Samoin if-valintalauseiden ehdollisesti suoritettavat osat voidaan kirjata lohkoiksi. Lohkot vaikuttavat käyttöalueisiin. Erityisesti: paikallisen muuttujan käyttöalue rajautuu lohkoon, jossa muuttuja on määritelty; ks. luku 5.4.
looginen operaattori
logical operator sama kuin logiikkaoperaattori
looginen virhe
logical error virhe, joka ohjelman ei-toivottuna toimintana eikä teknisenä virhetilanteena ¶ Esimerkiksi jos ohjelma laskee vääriä tuloksia, tervehtii käyttäjää vääränlaisella viestillä, tai jättää toivottuja toimintoja suorittamatta, on kyseessä looginen virhe. Vrt. käännösaikainen virhe ja ajonaikainen virhe.
lukea
read 1) vastaanottaa tietoa ohjelmaan sen ulkopuolelta (osa I/O:ta); 2) selvittää muuttujaan tallennettu arvo (kun muuttujaa käytetään lausekkeessa) ¶ Ks. luku 9.4; ks. myös syöte.
luokan runko
class body luokan määrittelyn varsinainen sisältö ¶ Luokan rungossa mm. määritellään luokkaan kuuluvat ilmentymämuuttujat ja metodit. Scalassa runko rajataan aina aaltosuluilla. Scala-luokan runkoon kirjoitetut lauseet suoritetaan, kun luokasta luodaan ilmentymä; runko siis toimii konstruktorina.
luokka
class 1) olioita kuvaava tietotyyppi; 2) tällaisen tietotyypin määrittely ohjelmakoodissa ¶ Ks. luvut 2.1, 2.3 ja 2.4. Luokka määrittelee millaisia tietyntyyppiset oliot ovat; vrt. yksittäisolio, joka on määritelty kaikista muista olioista erikseen. Siinä missä olio kuvaa yksittäista asiaa, luokka kuvaa yleisempää käsitettä, josta oliot ovat yksittäistapauksia. Luokan voi instantioida, jolloin syntyy uusi kyseisen tyyppinen olio eli luokan ilmentymä. Ks. myös piirreluokka, abstrakti luokka. (Tarkennus: kurssilla sanomme Scala-luokkia tietotyypeiksi tai tietotyyppien määrittelyiksi, mikä on pieni yksinkertaistus. Huolellisemmin sanoen Scalan luokat ovat määrittelyjä, jotka voivat kuvata yhden tai useamman tietotyypin. Esimerkiksi luokka Int kuvaa yhden tietotyypin, ja luokka Buffer kuvaa useita tietotyyppejä, jotka saadaan käyttämällä eri tyyppiparametreja: Buffer[Int], Buffer[String], jne.)
luokkahierarkia
class hierarchy luokkien välisten ylä- ja alakäsitesuhteiden kokonaisuus, luokkien “sukupuu” ¶ Ks. luku 6.4 sekä yli- ja aliluokka.
luokkakirjasto
class library kirjasto, joka sisältää luokkia
luokkatiedosto
class file eräänlainen Java-virtuaalikoneelle tarkoitettu tiedosto, joka sisältää sille sopivaa välikieltä ¶ Scala-ohjelmat yleensä käännetään luokkatiedostoiksi Java-virtuaalikoneessa suorittamista varten. Luokkatiedostot nimetään .class-päätteisiksi.
lähdekoodi
source code tekstimuotoinen kääntämätön ohjelmakoodi, joka on tarkoitettu ihmisen käsiteltäväksi ¶ Ks. luku 5.2. Kurssilla käsittelemme Scala-kielellä kirjoitettua lähdekoodia.
maaginen luku t. arvo
magic number/value literaali, jonka tarkoitus ohjelmassa ei ole ohjelmakoodista ilmeinen ¶ Maagiset luvut hankaloittavat ohjelman lukemista ja voivat aiheuttaa implisiittisiä riippuvuuksia. Niitä on hyvä välttää käyttämällä esimerkiksi vakioita niiden sijaan; ks. kurssin tyyliopas. Ks. myös luku 10.1.
matalan tason kieli
low-level language ohjelmointikieli, jonka abstraktiotaso on matala ja joka on riippuvainen ohjelmaa suorittavan tietokoneen erityispiirteistä ¶ Matalan tason kieliksi sanotaan yleensä lähinnä konekieliä. Matalan tason kielillä voi myös ohjelmoida, ja näin voidaan saavuttaa parempi suoritustehokkuus, mutta korkean tason kielet ovat moneen tarkoitukseen paljon käytännöllisempiä.
merkkijono
string peräkkäisten merkkien jono, jossa kullakin merkillä on oma sijaintinsa ¶ Esimerkiksi merkkijonossa laama on viisi merkkiä tietyssä järjestyksessä. Merkkijonot ovat eräs yleisimmistä tietokoneohjelmissa käytetyistä tietotyypeistä. Scalassa merkkijonoja kuvaa ennen muuta String-tietotyyppi (luku 1.3), mutta myös vaihtoehtoisia esitystapoja merkkijonoille on olemassa (ks. esim. luku 7.5). Monien ohjelmointikielten peruskirjastoissa on paljon merkkijonojen käsittelemiseen sopivia aliohjelmia (ks. esim. luku 4.4). Merkkijonot voidaan lukea indeksoiduksi kokoelmatyypiksi, jossa kokoelman alkiot ovat yksittäisiä merkkejä (luku 5.4).
merkkijonoupotus
string interpolation lausekkeiden kirjoittaminen merkkijonoliteraalin sisään siten, että syntyvän merkkijonon osiksi tulevat upotettujen lausekkeiden arvoja kuvaavat merkit ¶ Ks. luku 4.4.
metodi
method olioon liitetty funktio ¶ Olion metodit määrittävät, millaisiin viesteihin olio osaa reagoida ja miten se niihin reagoi; ks. luku 2.1. Scala-ohjelmakoodissa kukin metodin määrittely kirjoitetaan osaksi joko yksittäisolion tai luokan määrittelyä. Scalassa myös operaattorit ovat metodeita; ks. luku 4.4. Keskustelufoorumeita lukiessa on hyvä tietää, että kaikki Scala-ohjelmoijat eivät käytä sanaa aivan samalla tavalla kuin me ja virallinen Scala-sanasto.
metodikutsu
method call funktiokutsu, jossa kutsuttu funktio on metodi ¶ Ks. luku 2.1. Scalassa metodikutsulausekkeen voi kirjoittaa joko pistenotaatiolla tai operaattorinotaatiolla.
metodin runko
method body ks. funktion runkoMetoditkin ovat funktioita.
modulo-operaattori
modulo operator operaattori jakojäännöksen laskemiseen ¶ Scalassa ja monessa muussa ohjelmointikielessä modulo-operaattori on %; ks. luku 1.3.
monikko
tuple usean keskenään mahdollisesti erityyppisen alkion yhdistelmä, jossa alkioita on vakiomäärä ja jossa ne ovat määrätyssä järjestyksessä ¶ Monikoiden voidaan ajatella olevan eräs kokoelmatyyppi. Kaksialkioista monikkoa sanotaan pariksi. Esimerkiksi Scala-kielessä monikot eroavat muista kokoelmatyypeistä eritoten siten, että kullakin monikon osalla on oma staattinen tyyppinsä, kun esimerkiksi vektorin alkioille määrätään jokin yhteinen staattinen tyyppi.
moniperintä
multiple inheritance periytyminen useasta välittömästä yliluokasta ¶ Scalassa ei ole varsinaista moniperintää useasta yliluokasta, mutta piirreluokkien avulla voi käytännössä täyttää samat tarpeet.
muisti
memory tietokoneen osa tai oheislaite, johon voidaan varastoida tietoa hetkellisesti tai pysyvämmin muistityypistä riippuen ¶ Ohjelmien käsittelemää tietoa pidetään tallessa muistissa, yleensä bitteinä. Kullakin muistin kohdalla on oma osoitteensa, eräänlainen järjestysnumero, joka identifioi kyseisen muistipaikan. Ohjelmien ajonaikaista muistinkäyttöä kuvataan tällä kurssilla abstrakteilla, animoiduilla diagrammeilla luvusta 1.3 alkaen.
muistivuoto
memory leak haitallinen ohjelman toimintatapa, jossa ohjelma ei vapauta kaikkea varaamaansa muistia muuhun käyttöön sittenkään, kun ei tuota muistitilaa enää tarvitse ¶ Muistia vuotava ohjelma varaa käyttöönsä (kenties vähitellen) yhä enemmän muistia, mikä voi mm. johtaa ohjelman kaatumiseen, kun tarjolla olevat muistiresurssit ehtyvät. Muistivuotoja syntyy esimerkiksi silloin, jos roskien viemää muistitilaa ei vapauteta.
muodollinen parametri
formal parameter sama kuin parametrimuuttuja
muuttuja
variable nimetty varastointipaikka yhdelle arvolle tietokoneen muistissa ¶ Ks. luvut 1.4 ja 2.5.
muuttujan rooli
role of a variable eräänlainen muuttujan käyttötavan kuvaus; yksi useasta tyypillisestä muuttujan käyttötavasta ¶ Ks. esim. luvut 2.5, 5.3. Rooleja ovat mm. kiintoarvo, tilapäissäilö, kokooja, tuoreimman säilyttäjä, säiliö, sopivimman säilyttäjä ja yksisuuntainen lippu. Rooleilla ei ole teknistä merkitystä, vaan ne ovat ihmisille tarkoitettuja kuvauksia muuttujien käytöstä ohjelmissa.
muuttumaton
immutable (kokoelmasta tai muusta oliosta tai tietorakenteesta:) sellainen, jonka tila ei missään tapauksessa vaihdu toiseksi ohjelma-ajon aikana ¶ Esimerkiksi vektorit ovat muuttumattomia kokoelmia, koska kerran luodussa vektorissa on pysyvästi samat alkiot; puskuri taas on muuttuvatilainen. Ks. luku 7.5.
muuttuvatilainen
mutable (kokoelmasta tai muusta oliosta tai tietorakenteesta:) sellainen, jonka tila voi vaihtua toiseksi ohjelma-ajon aikana ¶ Esimerkiksi puskurit ovat muuttuvatilaisia kokoelmia, koska samassa puskurissa voi olla eri hetkinä eri sisältö; vektori taas on muuttumaton. Ks. luku 7.5.
myöhäinen sidonta
late binding sama kuin dynaaminen sidonta
nimetön funktio
anonymous function funktioliteraalin määrittelemä ja siis nimeämätön funktio ¶ Ks. luku 7.4.
nimetön parametri
alaviivalla merkitty nimeämätön parametrimuuttuja Scalan lyhennetyissä funktioliteraaleissa ¶ Ks. luku 7.4.
nimiö
label yksinkertainen GUI-komponentti, jonka tehtävänä on näyttää käyttäjälle jokin teksti ja/tai kuva ¶ Myös esim. “labeli”, “lappu”. Ks. luku 11.2.
None
None Option-tyyppinen yksittäisolio, joka ei sisällä yhtään tietoalkiota ¶ Ks. luku 3.3 ja vrt. Some. Toisin kuin null-viittauksen, viittausta None-olioon ei voi sijoittaa mielivaltaisen tyyppiseen muuttujaan; Option-tyyppiseen muuttujaan kuitenkin voi.
notaatio
notation merkintätapa ¶ Ks. pistenotaatio ja operaattorinotaatio.
null-viittaus
null reference olemattoman tiedon merkkinä käytetty arvo; viittaus, joka ei osoita mihinkään kohtaan tietokoneen muistissa ¶ Esimerkiksi Scalassa null-arvo on tyyppiyhteensopiva lähes minkä tahansa tietotyypin kanssa (vrt. Option, joka ei ole). Null-viittausten käyttö on omiaan aiheuttamaan bugeja, ja niiden käyttöä usein vältetään Scala-ohjelmoinnissa; ks. luvut 3.2, 3.3 ja 11.3.
NullPointerException
NullPointerException sellaisten ajonaikaisten virheiden tyyppi, jotka syntyvät yritettäessä käyttää null-viittauksen osoittamaa tietoa (jota ei ole) ¶ Esimerkiksi jos Scala-ohjelmassa yritetään kutsua metodia muuttujalle, johon on tallennettu null-viittaus eikä viittausta olemassa olevaan olioon, syntyy NullPointerException; ks. luku 3.2. Tämä virhetyyppi esiintyy samalla nimellä myös mm. Java-ohjelmointikielessä. Monissa muissa kielissä on vastaavia virhetyyppejä eri nimillä.
näennäissatunnaisluku
pseudorandom number luku, jonka on tuottanut aitoa satunnaisuutta jäljittelevä algoritmi ¶ Ks. luku 7.2 ja satunnaislukujen siemen.
näkyvyys
visibility ohjelman osan ominaisuus, joka kuvaa sen käyttöalueen ¶ Voidaan esimerkiksi sanoa, että private on “näkyvyysmääre” ja että luokkaan yksityiseksi määritelty muuttuja “näkyy” vain kyseisen luokan sisällä.
Object
Object (Scala-näkökulmasta:) toinen nimi luokalle AnyRef sellaisissa yhteyksissä, joissa Scala-ohjelmaa ajetaan JVM-alustalla
ohjelma
program 1) tietokoneen suoritettavaksi tarkoitettu toimintaohje; 2) tällaisen ohjeistuksen suorittamisesta syntyvä dynaaminen prosessi ¶ Ohjelmia ovat mm. sovellukset, käyttöjärjestelmät ja ajurit; ks. luku 1.2. Kun ohjelma on kokonaisuus, johon kuuluu oheistiedostoja tai erillisiä pienempiä ohjelmia, voidaan siitä käyttää myös termiä ohjelmisto.
ohjelmakirjasto
software library ks. kirjasto
ohjelmakoodi
program code 1) ohjelmateksti, lähdekoodi; 2) ohjelma konekielisessä muodossa ¶ Kurssillamme ohjelmakoodi käytännössä tarkoittaa Scala-kielistä lähdekoodia; konekielisistä ohjelmista ei puhuta kuin hitunen luvussa 5.2.
ohjelmisto
software ohjelma tai ohjelmien yhdistelmä, joka muodostuu useasta ohjelmasta tai johon liittyy oheistiedostoja varsinaisen suoritettavan ohjelman lisäksi ¶ Käytetään erityisen usein laajemmista kokonaisuuksista.
ohjelmointi
programming tietokoneohjelmien laatiminen: niiden suunnitteleminen ja toteuttaminen ¶ Ks. luku 1.2.
ohjelmointikieli
programming language keinotekoinen ohjelmien kirjoittamiseen tai muuten ilmaisemiseen tarkoitettu kieli
ohjelmointiparadigma
programming paradigm ohjelmoinnin suuntaus; tapa lähestyä ja ratkaista ohjelmointiongelmia ¶ Ks. luvut 2.1 ja 7.5. Kurssilla puhetta on olio-ohjelmoinnista, imperatiivisesta ohjelmoinnista, funktionaalisesta ohjelmoinnista ja hieman myös proseduraalisesta ohjelmoinnista.
ohjelmointityyli
programming style ohjelmien laatimiseen liittyvät (kenties kirjoittamattomat) säännöt, toimintatavat tai periaatteet; erityisesti: säännöt, toimintatavat tai periaatteet, jotka liittyvät lähdekoodin muotoilemiseen ¶ Hyvällä ohjelmointityylillä pyritään auttamaa ohjelmaa lukevia ja sitä muokkaavia ihmisiä; ks. kurssin tyyliopas.
olio
object eräänlainen yksittäistä asiaa mallintava abstraktio; ohjelman osa, joka osaa vastaanottaa viestejä ja reagoida niihin ohjelmoijan määrittelemällä tavalla ¶ Oliot ovat olio-ohjelmoinnin perusta; ks. luku 2.1. Olioiden toiminnallisuus toteutetaan määrittelemällä niille funktioita, joita kutsutaan metodeiksi. Oliolla voi olla muuttuva tila. Ks. myös yksittäisolio ja luokka.
olio-ohjelmointi
object-oriented programming yleinen ohjelmointiparadigma, jossa ohjelmat rakennetaan kuvaamalla ongelmakenttä olioina ja niiden välisenä viestintänä ¶ Ks. esim. luvut 2.1 ja 7.5. Scala on puhdas olio-ohjelmointikieli: kaikki tieto esitetään olioina (ks. luvut 4.4 ja 4.5). Olio-ohjelmointiin liitetään usein myös esimerkiksi luokan ja periytymisen käsitteet, mutta ne eivät oikeastaan ole olio-ohjelmoinnin kannalta välttämättömiä.
olion muuttuja
ilmentymämuuttuja tai yksittäisolion jäsenmuuttuja ¶ Kurssilla käytetty “epävirallinen” ilmaisu. Olioiden tiedot varastoidaan olioiden muuttujiin.
OOP
OOP object-oriented programming eli olio-ohjelmointi
operaattori
operator kirjoitusmerkki tai merkkien yhdistelmä, joka lähdekoodiin kirjoitettuna määrää tietyn toimenpiteen suoritettavaksi ohjelmointikielen sääntöjen mukaisesti ¶ Esimerkiksi + on monessa ohjelmointikielessä yhteenlaskuoperaattori ja <= eräs vertailuoperaattori. Kuten operaattoritkin, myös funktiokutsut määräävät toimenpideitä suoritettaviksi, ja ero operaattorien ja funktiokutsujen välillä voi olla häilyvä. Operaattoreiksi sanotaan yleensä sellaisia merkkejä tai merkkiyhdistelmiä, joita käytetään hyvin yksinkertaisella ja tyypillisistä funktiokutsuista poikkeavalla syntaksilla. Scalassa ei varsinaisesti ole erillistä operaattorin käsitettä ollenkaan, vaan metodeita on mahdollista käyttää joko operaattorinotaatiolla tai pistenotaatiolla (luku 4.4). Metodeita kuten +, joita käytetään yleensä operaattorinotaatiolla, voidaan Scalassakin nimittää operaattoreiksi.
operaattorinotaatio
(infix) operator notation metodien kutsumiseen käytetty merkintätapa, jolle on ominaista välimerkkien puuttuminen metodikutsulausekkeesta ¶ Esim. olio metodi parametriarvo tai 1 + 1. Scalassa operaattorinotaatiota voi käyttää tietyissä yhteyksissä pistenotaation sijaan; ks. luku 4.4 ja kurssin tyyliopas. Ks. myös operaattori.
operandi
operand 1) lauseke, johon operaattori kohdistetaan; 2) tällaisen lausekkeen arvo ¶ Esimerkiksi laskutoimituksessa 2 * (1 + 10) ovat kertolaskuoperaattorin operandeina literaali 2 ja aritmeettinen lauseke (1 + 10).
Option
Option luokka, jonka avulla voidaan kuvata tietoa, joka saattaa puuttua ¶ Kukin Option-tyyppinen arvo on olio, joka joko sisältää yhden tietoalkion (Some) tai on tyhjä (None); ks. luku 3.3. Option-luokan käyttö tekee arvojen mahdollisesta puuttumisesta eksplisiittisen osan ohjelmakoodia ja mahdollistaa käännösaikaiset virheilmoitukset sellaisissa tilanteissa, joissa null-viittauksia käyttämällä syntyisi ajonaikaisia virheitä. Option on yksinkertainen alkiokokoelmatyyppi; ks. luku 8.2.
paikallinen muuttuja
local variable funktion sisään määritelty muuttuja ¶ Ohjelmoija voi määritellä funktion rungossa paikallisia muuttujia (ks. esim. luvut 1.7 ja 5.3), minkä lisäksi parametrimuuttujia voidaan sanoa paikallisiksi muuttujiksi. Paikalliset muuttujat pidetään tallessa kutsupinon kehyksissä, joten ne ovat olemassa vain väliaikaisesti funktiokutsun aikana; ks. kuitenkin sulkeuma. Ks. myös käyttöalue.
pakkaus
package eräissä ohjelmointikielissä käytetty tapa ryhmitellä ohjelmien osia nimettyihin kokonaisuuksiin ¶ Esimerkiksi Scala-luokat sijoitetaan johonkin pakkaukseen; ks. luku 1.2. Yhdessä Eclipse-projektissa voi olla yhteen tai useampaan pakkaukseen kuuluvia osia. Saman pakkauksen jäseninä ei voi olla keskenään samannimisiä luokkia tai yksittäisolioita, mutta eri pakkauksissa voi. Useimpien pakkausten sisältö tulee erikseen ottaa käyttöön ennen kuin sitä voi hyödyntää tuon pakkauksen ulkopuolelta käyttämättä täydellisiä nimiä; ks. luvut 1.5 ja 2.6. Ks. myös pakkausolio.
pakkausolio
package object itsenäinen yksittäisolio, joka kuvaa pakkauksen ja jonka jäsenet muodostavat tuon pakkauksen sisällön ¶ Ks. luku 4.4.
palauttaa
return välittää palautusarvo ¶ Palauttaminen päättää funktiokutsun.
palautusarvo
return value arvo, joka välitetään funktiokutsun päättyessä funktion kutsujalle ja josta tulee funktiokutsulausekkeen arvo ¶ Funktio voi välittää palautusarvollaan esimerkiksi laskutoimituksen lopputuloksen tai tietoa toiminnon onnistumisesta tai epäonnistumisesta. Joillakin funktioilla ei ole merkityksellistä palautusarvoa lainkaan; Scala-ohjelmissa tällaiset funktiot (eli proseduurit) palauttavat Unit-arvon merkkinä siitä, ettei merkityksellistä palautusarvoa ole. Scala-funktion palautusarvo on sen lausekkeen arvo, joka funktiokutsun aikana evaluoidaan viimeiseksi. Ks. myös return.
paluuarvo
return value sama kuin palautusarvo
paneeli
panel GUI-komponentti, joka voi sisältää useita muita komponentteja ja jota käytetään muiden komponenttien ryhmittelemiseen ja asemointiin ¶ Ks. luku 11.2.
parametri
parameter/argument ohjelman osalle välitettävä tieto; erityisesti: funktiolle välitettävä lisätieto, joka tarkentaa sitä, mitä funktiokutsun tulisi tehdä ¶ Ks. luvut 1.6, 1.7 ja 2.1. Funktion vastaanottamien parametrien määrä (nolla tai useampia) kirjataan funktion määrittelyyn. Parametreihin liittyvä termistö vaihtelee eri yhteyksissä. Tällä kurssilla sanomme, että funktiokutsuun kirjataan parametrilausekkeita. Kun funktiokutsu suoritetaan, parametrilausekkeet evaluoidaan ja saadaan parametriarvoja, jotka välitetään funktiokutsua varten luotuun kehykseen, jossa ne tallentuvat parametrimuuttujiin. Ks. myös parametriluettelo, tyyppiparametri ja argumentti.
parametriarvo
argument arvo, joka saadaan evaluoimalla parametrilauseke ¶ Parametriarvoja välitetään funktiokutsua vastaavaan kehykseen parametrimuuttujiin; ks. luku 1.4. Myös termiä “argumentti” käytetään samasta asiasta.
parametrilauseke
argument lauseke, joka kirjoitetaan funktiokutsulausekkeeseen ja joka evaluoimalla tuotetaan parametriarvo ¶ Ks. luvut 1.3 ja 1.4. Myös termiä “argumentti” käytetään samasta asiasta.
parametriluettelo
parameter list 1) parametrimuuttujia sisältävä luettelo funktion määrittelyssä; 2) parametrilausekkeita sisältävä luettelo funktiokutsulausekkeessa ¶ Parametriluettelot kirjoitetaan Scalassa kaarisulkeisiin. Luetteloja voi olla yksi (ks. luvut 1.6 ja 1.7), nolla (ks. luvut 1.6, 1.7 ja 2.6), tai useampia (ks. luku 7.3).
parametrimuuttuja
parameter (variable) paikallinen muuttuja, joka on määritelty puumerkissä ja jonka arvoksi tallentuu parametriarvo funktiokutsun alkaessa ¶ Ks. luku 1.7. Scalassa parametrimuuttujat ovat aina val-muuttujia. (Scala-kielen virallisessa terminologiassa parametrimuuttujat on itse asiassa erotettu paikallisista muuttujista rinnakkaiseksi käsitteeksi, mutta kurssilla käytämme näitä termejä tässä kuvattuun tapaan.)
pari
pair monikko, johon sisältyy tasan kaksi alkiota ¶ Kurssilla pareja käytetään lähinnä avain–arvo pareina.Eräs toinen yleinen käyttötarkoitus pareille on kahden arvon palauttaminen funktiosta: vaikka (Scala-)funktio voikin palauttaa vain yhden arvon, voi tämä arvo olla esimerkiksi pari.
perintä
inheritance sama kuin periytyminen
periytyminen
inheritance olio-ohjelmointiin liittyvä tekniikka, jossa suhdetta ylä- ja alakäsitteen välillä kuvataan määrittelemällä luokalle (tai yksittäisoliolle) yliluokka ¶ Ks. luku 6.4. Määritelmästä riippuen piirreluokat mielletään joko periytymiselle rinnakkaiseksi tavaksi kuvata ylä- ja alakäsitesuhteita ohjelmissa tai yhdeksi periytymisen muodoksi.
perustapaus
base case rekursiivisen algoritmin tai ohjelman osa, jossa (osa)ongelman ratkaisu selviää ilman rekursiivista kutsua ¶ Ks. luku 11.3.
pikseli
pixel kuvapiste ¶ Tietokoneen näytölle piirtyvä näkymä koostuu pikseleistä. Erivärisiä pikseleitä käyttämällä saadaan näkyviin mm. kuvia, kirjoitusmerkkejä eri kirjasinlajeilla jne. Sana on lyhennys englannin sanoista picture element.
piirre
trait 1) sama kuin piirreluokka; 2) (kuten yleiskielessä:) ominaisuus, seikka ¶ Sekaannusten välttämiseksi kurssilla käytetään yleensä pidempää sanaa “piirreluokka”, kun halutaan viitata nimenomaan piirreluokkiin.
piirreluokka
trait luokka, jolle pätee: 1) siinä voi olla (myös) abstrakteja metodeja; 2) se voidaan liittää alakäsitettä kuvaavaan luokkaan (tai yksittäisolioon); 3) siitä ei voi luoda ilmentymiä kuin alakäsitteittensä kautta; 4) sillä ei voi olla konstruktoriparametreja ¶ Ks. luvut 6.2 ja 6.4 ja vrt. abstrakti luokka ja yliluokka. Piirreluokat määritellään Scalassa sanaa trait sanan class sijaan käyttäen. (Huom. kurssin materiaalissa piirreluokatkin luetaan eräänlaisiksi luokiksi, toisin kuin englanninkielisessä Scala-kirjallisuudessa, jossa trait ja class ovat usein keskenään rinnakkaiset termit.)
pino
stack 1) eräänlainen LIFO-periaatetta noudattava alkiokokoelma; 2) kutsupino ¶ Pinotyyppisiä alkiokokoelmia on (esim. Scalassa) sekä muuttuvatilaisia että muuttumattomia.
pistenotaatio
dot notation metodien kutsumiseen käytetty merkintätapa, jolle on ominaista kutsun vastaanottavan olion ja metodin nimen väliin kirjoitettava pistemerkki ¶ Esim. olio.metodi(parametri). Pistenotaatiota käytetään monissa ohjelmointikielissä, mm. Scalassa. Ks. luvut 2.1, 4.4 sekä kurssin tyyliopas, ja vrt. operaattorinotaatio.
poikkeus
exception eräistä ajonaikaisista virheistä käytetty nimitys
poikkeustenkäsittely
exception handling ajonaikaisten virheiden havaitseminen ja niihin reagoiminen ¶ Ks. luku 9.4 sekä try, catch ja finally.
projekti
project kokonaisuus, jollaisiin ohjelmointihankkeeseen liittyviä tiedostoja voi ryhmitellä, jotta niitä olisi helpompi hallita ¶ Ks. luku 1.2. Esimerkiksi Eclipsessä ohjelmia voi jaotella projekteiksi kutsutuiksi kokonaisuuksiksi. Huom. projekti on apuohjelmaan kuten sovelluskehittimeen liittyvä käsite, kun taas pakkaus on ohjelmointikielen käsite.
proseduraalinen ohjelmointi
procedural programming yleinen ohjelmointiparadigma, jossa ohjelmat rakennetaan kuvaamalla ongelmakenttä aliohjelmina, jotka kutsuvat edelleen toisia aliohjelmia suorittaakseen osatehtäviä ¶ Ks. luku 7.5 ja vrt. olio-ohjelmointi, jossa ongelma jäsennetään olioina ja aliohjelmat (metodit) liitetään niihin. Proseduraalinen ohjelmointi on keskeinen imperatiivisen ohjelmoinnin muoto.
proseduuri
procedure funktio, joka ei palauta arvoa tai palauttaa vain sisällöttömän yksikkötyyppisen arvon ¶ Proseduurit ovat mielekkäitä lähinnä silloin, jos ne ovat tilaa muuttavia.
pseudokoodi
pseudocode ihmislukijalle tarkoitettu ainakin jossain määrin ohjelmointikieltä muistuttava tekstimuotoinen kuvaus algoritmista tai ohjelmasta ¶ Ks. esim. luku 2.6. Pseudokoodi on yleensä epätäsmällisempää kuin konkreettinen ohjelmakoodi. Se ei yleisesti ottaen kelpaa tietokoneen käsiteltäväksi. Pseudokoodia käytetään esimerkiksi ohjelmia suunnitellessa ja dokumentoidessa.
pseudosatunnaisluku
pseudorandom number sama kuin näennäissatunnaisluku
puhdas funktio
pure function tilaa muuttamaton ja tilasta muutenkin riippumaton funktio ¶ Puhdas funktio tuottaa aina saman palautusarvon jokaisella kutsukerralla, jos sille annetaan samat parametriarvot.
puskuri
buffer eräänlainen muuttuvatilainen kokoelma, jonka alkiot ovat indeksien mukaisessa järjestyksessä ja joita voi lisätä ja poistaa ¶ Ks. luku 1.5. Vrt. esim. taulukko ja vektori.
puumerkki
signature 1) funktion määrittelyn se osa, joka määrittelee, miten funktiota kutsutaan; 2) vastaava määrittely jostakin muusta ohjelman osasta kuin funktiosta ¶ Scala-funktion puumerkin muodostavat sen nimi, parametrimuuttujat tyyppeineen sekä palautusarvon tyyppi. (Paitsi nimettömien funktioiden tapauksessa, jolloin nimeä ei ole.) Funktion runko ei kuulu sen puumerkkiin. Puumerkin tunteminen riittää funktion kutsumiseen teknisessä mielessä; lisäksi on tietysti syytä tuntea funktion tarkoitus ja semantiikka. Englanninkielisellä sanalla “signature” ei ole vakiintunutta suomennosta, ja puumerkkien lisäksi puhutaan myös “signatuureista”, “kutsumuodoista”, ym. Muissa ohjelmointikielissä on Scalasta osin poikkeavia määrittelyjä puumerkille, mutta perusajatus on sama. Ks. myös kuormittaminen.
pöytätestaus
desk checking ohjelman tai algoritmin toimivuuden tarkastaminen manuaalisesti, ohjelmaa ajamatta ¶ Pöytätestaava ihminen voi esimerkiksi lukea ohjelmakoodia näytöltä tai paperilta ja käydä mielessään läpi sen suorituksen vaiheita.
rajapinta
interface 1) “julkisivu”, jonka kautta tiettyä ohjelman osaa tai muuta palvelua käytetään; 2) (eräissä ohjelmointikielissä:) rajapintaluokka ¶ Scala-kielisen kurssimme kannalta vain 1. merkitys on tärkeä. Esimerkiksi luokalla on rajapinta, johon sisältyvät sen julkiset osat. Rajapinnan tunteminen on välttämätöntä luokan käyttämiseksi, kun taas toteutuksen tunteminen ei ole. Ks. luku 2.6 ja vrt. käyttöliittymä.
rajapintaluokka
interface eräs abstrakteja luokkia ja erityisesti piirreluokkia muistuttava rakenne ¶ Ei esiinny Scalassa vaan eräissä muissa ohjelmointikielissä, joista tunnetuimpana Javassa. Javan rajapintaluokat eroavat Scalan piirreluokista eritoten siten, että rajapintaluokassa voi määritellä kyseisen tyyppisille olioille ainoastaan abstrakteja metodeja, kun taas piirreluokilla ei ole tällaista rajoitusta.
rakenteellinen rekursio
structural recursion rekursion muoto, jossa tietorakenteen (kuten luokan) määrittelystä viitataan tuohon määrittelyyn itseensä ¶ Ks. luvut 3.1 ja 11.3. Esimerkiksi henkilöluokan määrittelyyn voidaan kirjata henkilön vanhemmat, jotka myös ovat henkilöitä. Rekursiivisen rakenteen käsittelyyn sopivat usein hyvin sellaiset rekursiiviset kutsut, jotka kohdistetaan vähitellen pienenevään osaan olemassa olevasta rakenteesta (vrt. generoiva rekursio).
refaktoroida
refactor muokata ohjelmaa tai ohjelman osaa muuttamatta sen olemassa olevaa toiminnallisuutta ¶ Ks. luvut 7.1 ja 10.1. Refaktoroinnilla pyritään ohjelman laadun parantamiseen, esimerkiksi ohjelman jatkokehityksen helpottamiseen.
rekursiivinen kutsu
recursive call funktiokutsu, jossa tietystä funktiosta käsin kutsutaan tuota samaa funktiota ¶ Ks. rekursio ja luku 11.3.
rekursio
recursion 1) asian itsensä käyttäminen sen omassa määrittelyssä, kuvauksessa tai toteutuksessa; erityisesti: funktion määritteleminen siten, että se kutsuu itseään; 2) sellaisiin funktioihin perustuva ohjelmien toteutustapa ¶ Rekursiivinen ohjelma palauttaa ratkaistavan ongelman kohti perustapausta ratkaisemalla siitä osan rekursiivisella kutsulla; ks. luku 11.3 ja vrt. iteraatio. Rekursion muotoja ovat mm. rakenteellinen ja generoiva rekursio.
REPL
REPL ohjelmointiympäristö, jossa käyttäjän kirjoittamat ohjelmointikieliset käskyt suoritetaan välittömästi niiden kirjoittamisen jälkeen, yksitellen, ja syötettyjen lausekkeiden arvot tulostuvat samoin välittömästi näytölle ¶ REPL on lyhenne ilmaisusta read–eval–print loop. REPLiä käytetään esimerkiksi Scala-ohjelmoinnin yhteydessä runsaasti; ks. luku 1.3. REPListä voidaan puhua myös tulkkina tai “interaktiivisena tulkkina”; Scala-REPL tunnetaan myös nimellä Scala Interpreter.
return
return käsky, joka katkaisee funktiokutsun ja palauttaa arvon välittömästi, kun se suoritetaan ¶ Scalassa return-käskyä ei käytetä usein; ks. luku 6.1. Joissakin muissa ohjelmointikielissä vastaavaa käskyä tulee käyttää kaikissa sellaisissa funktioissa, jotka palauttavat arvon.
rooli
role ks. muuttujan rooli
roska
garbage tietokoneen muistiin varastoitu tieto, johon ohjelmasta ei pääse käsiksi ¶ Roskaa on esimerkiksi olio, johon ei ole yhtään viittausta. Hyvin laaditussa ohjelmassa roskaksi saisi jäädä vain sellaisia tietoja, joita ohjelma ei (enää) tarvitse, jotta varattu muisti voidaan vapauttaa roskankeruulla.
roskankeruu
garbage collection toimenpide, jolla roskien viemä muistitila vapautetaan muuhun käyttöön ¶ Roskankeruu voidaan tehdä automaattisesti, ja näin esimerkiksi Java-virtuaalikoneessa tehdäänkin. Tämä osaltaan ehkäisee muistivuotoja.
runko
body ks. funktion runko, luokan runko
rutiini
(sub)routine aliohjelma; Scalassa ja tällä kurssilla vastaava termi on funktio
sanakirja
map/dictionary sama kuin hakurakenne
satunnaislukujen siemen
random seed näennäissatunnaislukuja tuottavalle algoritmille välitetty parametri, joka alustaa algoritmin tilan ¶ Tietty näennäissatunnaisalgoritmi tuottaa samalla siemenellä aina saman satunnaislukujen sarjan. Ks. luku 7.2.
Scala
Scala eräs ohjelmointikieli ¶ Scala-on suunniteltu kieleksi, jolla voi ohjelmoida usean eri ohjelmointiparadigman puitteissa ja paradigmoja yhdistellen. Kieli painottaa olio-ohjelmointiparadigmaa, johon ohjelmoija voi yhdistää imperatiivista ja funktionaalista ohjelmointia. Näistä viimeksi mainittuun usein kannustetaan Scala-kielen yhteydessä. Scalan valintaa tälle kurssille on selostettu kurssin ukk -sivulla.
Scala API
Scala API Scala-ohjelmoinnissa käytetty laaja, yleishyödyllinen sovelluskirjasto ¶ Koko nimeltään Scala Standard Library API. Jakautuu pakkauksiin, joilla on scala-alkuiset nimet. Nämä pakkaukset sisältöineen on kuvattu Scaladoc-dokumentein; ks. luku 2.6. Osa Scala API:sta — pakkaus nimeltä vain scala — liittyy lähtemättömästi Scala-kieleen; ks. luku 1.5.
Scala IDE
Scala IDE Eclipse-sovelluskehittimen lisäosa (plugin), joka mahdollistaa Scala-ohjelmoinnin Eclipsessä ¶ Ks. luvut 1.2, 1.3 ja 5.2.
Scaladoc
Scaladoc 1) apuohjelma, jolla voi tuottaa Scala-lähdekoodista ja siihen upotetuista dokumentaatiokommenteista dokumentaatiota; 2) tällä työkalulla tuotettu dokumentaatio ¶ Ks. luku 2.6. Scaladoc-dokumenteissa kuvataan eritoten ohjelman osien julkiset rajapinnat. Scala API on kuvattu Scaladoc-dokumentein. Monille muillekin ohjelmointikielille on vastaava työkalu, esim. Javadoc (Java) ja Pydoc (Python).
semantiikka
semantiikka ilmaisujen merkitys ¶ Erotetaan usein syntaksista. Esimerkiksi Scala-kielen käskyt x = x + 1 ja x += 1 ovat syntaktisesti erilaiset, mutta niillä on sama semantiikka: kasvatetaan muuttujan x arvoa yhdellä.
siemen
seed ks. satunnaislukujen siemen
signatuuri
signature sama kuin puumerkki
sijoittaa
assign asettaa muuttujalle (uusi) arvo ¶ Esimerkiksi Scala-kielistä käskyä muuttujanNimi = 10 sanotaan sijoituslauseeksi. Se sijoittaa (var-)muuttujan uudeksi arvoksi luvun kymmenen, korvaten muuttujan vanhan arvon. Ks. luku 1.4.
silmukka
loop 1) ohjelman osa, jonka suorittamista toistetaan useita kertoja; 2) toistokäsky, jolla tällainen ohjelman osa voidaan määritellä ohjelmakoodiin ¶ Ks. luvut 5.3, 5.4 ja 6.1. Scala-kielessä silmukoita voi määritellä for-, do- ja while-käskyillä. Yleisesti ottaen silmukan luomiseen ei välttämättä tarvita nimenomaista toistokäskyä, vaan kielestä riippuen voi olla mahdollista käyttää hyppykäskyä kuten goto (ks. luku 12.1). Silmukoiden avulla voidaan toteuttaa iteratiivisia algoritmeja.
sisentää
indent aloittaa tekstirivi reunaa sisemmältä ¶ Johdonmukainen sisentäminen on keskeinen osa hyvää ohjelmointityyliä; ks. luvut 1.7, 2.9 ja kurssin tyyliopas.
sivuvaikutus
side effect tilaa muuttava toimenpide ¶ Ilmaisua käytetään erityisesti funktionaalisen ohjelmoinnin yhteydessä, jossa tilanmuutoksia pyritään välttämään.
skooppi
scope sama kuin käyttöalue
skripti
script korkean tason kielellä laadittu ohjelma, jolle pätee yksi tai useampia seuraavista: 1) se on on koodiltaan lyhyehkö; 2) sen koodi muodostuu peräkkäisten komentojen sarjasta; 3) se tulkataan eikä käännetä; 4) sen päätehtävä on muodostaa annetun syötteen perusteella jokin tulos; 5) se käsittelee jotakin olemassa olevaa ohjelmaa tai muuta järjestelmää “ulkoapäin”; 6) sitä käytetään manuaalisestikin suoritettavissa olevien työvaiheiden automatisointiin; 7) se on kirjoitettu skriptikielellä ¶ Termillä on useita osin toisiinsa liittyviä merkityksiä, jotka ovat eläneet aikojen saatossa. Se on nykyään niin moniselitteinen, että sen käyttöä kannattaa välttää, ellei yhteydestä tule selväksi, mitä sanalla tarkoitetaan.
skriptikieli
scripting language korkean tason ohjelmointikieli, joka sopii skriptien laatimiseen ¶ Esimerkiksi PHP:ta, Pythonia ja Luaa sanotaan melko usein skriptikieliksi. Myös Scalaa voi käyttää skriptikielenä.
Some
Some Option-tyyppinen olio, joka sisältää yhden tietoalkion ¶ Ks. luku 3.3 ja vrt. None. Some on Optionin aliluokka; ks. luku 6.4.
sopivimman säilyttäjä
most-wanted holder muuttuja, jota käytetään pitämään kirjaa sellaisesta arvosta, jonka kohdalla tietty kriteeri parhaiten toteutuu ¶ Yksi muuttujien rooleista. Ks. luvut 3.2 ja 5.3.
sovellus(ohjelma)
application (program) tietokoneohjelma, joka on tarkoitettu loppukäyttäjän käytettäväksi ja sopii tiettyyn tarkoitukseen ¶ Ks. luvut 1.1 ja 1.2.
sovelluskehitin
integrated development environment ohjelmoijan avuksi laadittu apuohjelma, joka kokoaa yhteen erilaisia ohjelmoijan työkaluja kuten editorin, kääntäjän, virtuaalikoneen tms. ¶ Ks. luvut 1.2 ja 5.2. Esimerkiksi kurssilla käytetty Eclipse on sovelluskehitin. Nimensä mukaisesti sovelluskehittimen avulla voi laatia uusia ohjelmia, esimerkiksi sovelluksia.
sovelluskirjasto
application programming interface kirjasto, jota voi käyttää apuna erilaisten sovellusohjelmien laatimisessa ¶ Monien ohjelmointikielten yhteyteen on määritelty kieleen enemmän tai vähemmän kiinteästi liittyvä sovelluskirjasto, jota voi hyödyntää laajasti erilaisissa kyseisellä ohjelmointikielillä laadituissa ohjelmissa. Scalan tapauksessa tällainen sovelluskirjasto on Scala API.
staattinen
static 1) ohjelmakoodiin kiinteästi liittyvä, ohjelmakoodista sitä ajamatta määrittyvä, ohjelman ajamiseen liittymätön; ei-dynaaminen, muuttumaton, kiinteä; 2) luokkaan itseensä eikä sen ilmentymiin liittyvä ¶ Tietokoneohjelmalla voidaan sanoa olevan kaksi “olomuotoa”, staattinen ja dynaaminen; ks. esim. luvut 1.2 ja 2.1. Ohjelman staattisiin piirteisiin ei voi vaikuttaa esimerkiksi ohjelman käyttäjän antama syöte. Ks. myös staattinen tyyppi.
staattinen tyyppi
(static) type ohjelmakoodin osan tietotyyppi, joka voidaan määrittää staattisesti eli ohjelmaa ajamatta ¶ Staattisesti tyypitetyissä kielissä kuten Scala lausekkeilla ja muuttujilla on staattiset tyypit. Esimerkiksi Scala-muuttujan staattinen tyyppi rajaa sitä, millaisia sijoituksia muuttujaan voi tehdä, ja staattiselta tyypiltään yhteensopimattoman lausekkeen käyttö sijoituksessa tuottaa käännösaikaisen virheilmoituksen. Ks. luvut 6.2 ja 6.4 ja vrt. dynaaminen tyyppi.
staattisesti tyypitetty
statically typed (ohjelmointikielestä:) tyyppijärjestelmältään sellainen, että kullakin lähdekoodin osalla (eli ohjelman staattisen “olomuodon” osalla, erityisesti lausekkeilla ja muuttujilla) on tietotyyppi, joka voidaan määrittää staattisesti ¶ Scala on (normaalikäytössä) staattisesti tyypitetty: esimerkiksi muuttujilla ja lausekkeilla on staattiset tietotyypit (sen lisäksi, että niiden arvoilla on dynaamiset tyypit). Scala on myös tyyppiturvallinen, ja niinpä yritys sijoittaa vaikkapa Int-tyyppiseen muuttujaan String-tyyppinen arvo tuottaa käännösaikaisen virheilmoituksen. Muita staattisesti tyypitettyjä kieliä ovat esimerkiksi Java, C# ja Haskell. Vrt. dynaamisesti tyypitetty.
stack trace
stack trace ajonaikaisen virheen seurauksena muodostettu raportti siitä, mitä kutsuja oli käynnissä virhetilanteen syntyessä ¶ Käytetään debuggauksessa apuna; ks. luku 3.2.
sulautettu järjestelmä
embedded system tietotekninen järjestelmä, jolla on rajattu, suhteellisen suppea-alainen tarkoitus ¶ Esimerkiksi pankkiautomaatit ja monet robotit ovat sulautettuja järjestelmiä. Vrt. yleiskäyttöinen tietokone ja ks. luku 1.1.
sulkeuma
(lexical) closure rakenne, johon sisältyy funktion määrittely sekä pääsy tiettyihin tuon funktion ulkopuolella määriteltyihin muuttujiin ¶ Ks. luku 8.1.
suorittaa
execute toimia ohjelman määräämällä tavalla; ajaa
Swing
Swing eräänlainen graafisten käyttöliittymien ohjelmoimiseen tarkoitettu kirjasto ¶ Swingejä on useita: tämänniminen kirjasto kehitettiin alun perin Java-kieleen yhteyteen, mutta myös Scalassa on samanniminen kirjasto (joka rakentuu Java-version varaan). Ks. luku 11.2.
symbolinen konekieli
assembly (language) ohjelmointikieli, jossa konekielisiä käskyjä suoraan vastaavat käskyt on esitetty symbolisessa muodossa, yleensä tekstinä
syntaksi
syntaksi ohjelmointikielen ilmaisujen muodostamissäännöstö ¶ Syntaksi määrää, mitä ilmaisuja ohjelmointikielessä voi käyttää ja miten niitä voi yhdistellä. Syntaksi erotetaan usein semantiikasta eli siitä, mitä ilmaisut merkitsevät.
syntaksivirhe
syntax error virhe, joka johtuu siitä, että lähdekoodi on ohjelmointikielen syntaksin vastainen ¶ Ks. luvut 1.8 ja 3.1. Syntaksivirheitä syntyy, jos lähdekoodi ei vastaa ohjelmointikielen sääntöjä. Syntaksivirheet ovat usein käännösaikaisia.
syntaktinen sokeri
syntactic sugar sellainen osa syntaksia, joka ei kasvata ohjelmointikielen ilmaisuvoimaa eikä ole sikäli välttämätön, vaan jonka tarkoitus on kätevöittää ohjelmakoodin kirjoittamista tai lukemista ¶ Ks. luku 4.3. Esimerkkejä syntaktisesta sokerista Scalassa ovat mm. ilmentymämuuttujien määritteleminen konstruktoriparametrien yhteyteen (luku 2.4), laskutoimituksia ja sijoituksia yhdistelevät operaattorit kuten += (luku 4.3), erilaiset funktioliteraalit (luku 7.4) ja for-silmukat (luku 5.3).
syöte
input ohjelman käsiteltäväksi jostakin lähteestä noudettu tieto; erityisesti: ohjelman käyttäjän ohjelmalle (esim. näppäimistöllä) välittämä tieto ¶ Ks. luvut 2.7 ja 9.4 ja ks. myös input/output.
säiliö
container muuttuja, jota käytetään kokoelman muokkaamiseen ¶ Yksi muuttujien rooleista. Ks. luku 3.2.
tapahtuma
event toiminto tai sattumus, johon ohjelma voi reagoida ¶ Ohjelmia voidaan laatia tapahtumavetoisesti, jolloin havaituista tapahtumista välitetään tieto kyseisenlaisiin tapahtumiin liittyville tapahtumankuuntelijoille. Näin tehdään usein esimerkiksi graafisia käyttöliittymiä laadittaessa; ks. myös käyttöliittymätapahtuma.
tapahtumankuuntelija
event listener ohjelman osa, esimerkiksi olio, joka on määritelty vastaanottamaan tieto tietynlaisista tapahtumista ¶ Tapahtumankuuntelija yleensä reagoi tapahtumiin suorittamalla tapahtumankäsittelijän. Ks. luku 11.2.
tapahtumankäsittelijä
event handler ohjelman osa, esimerkiksi funktio, joka määrittelee, mitä tietynlaisen tapahtuman sattuessa tulee kyseisessä ohjelmassa tehdä ¶ Tapahtumankäsittelijä kytketään yleensä tapahtumankuuntelijaan; ks. luku 11.2. Tapahtumankäsittelijä voi esimerkiksi sisältää sen ohjelmakoodin, joka suoritetaan, kun käyttäjä painaa tiettyä nappulaa ohjelman käyttöliittymässä.
taulukko
array eräänlainen muuttuvatilainen mutta kooltaan muuttumaton kokoelma, jonka alkiot ovat indeksien mukaisessa järjestyksessä ¶ Ks. luku 5.6 ja vrt. esim. vektori ja puskuri. Taulukko on monissa ohjelmointikielissä, mm. Scalassa, eräänlainen “peruskokoelmatyyppi”, jonka avulla on toteutettu monia muita kokoelmatyyppejä.
tavu
byte kahdeksan bitin muodostama kokonaisuus ¶ Ks. luku 5.2.
tavukoodi
bytecode eräistä välikieliksi sopivista kielistä käytetty nimitys ¶ Ks. luku 5.2. Mm. sitä välikieltä, jolle Scala-ohjelmia yleensä käännetään ja jota Java-virtuaalikone suorittaa, sanotaan tavukoodiksi.
tehdasmetodi
factory method metodi, jonka ainoa tehtävä on luoda uusi olio ja palauttaa se (tai viittaus siihen) ¶ Ks. luku 4.5.
tehokkuus
efficiency ohjelman resurssienkäytön määrää kuvaava suure ¶ Tehokkuudella viitataan erityisesti ohjelman vaatimaan suoritusaikaan ja myös sen vaatimaan muistitilaan. Tehokkuutta käsitellään lähinnä muilla ohjelmointikursseilla; ks. kuitenkin esim. luvut 5.3 ja 11.3.
tekstialue
text area tekstin syöttämisen ja muokkaamisen mahdollistava GUI-komponentti; erityisesti: tällainen komponentti, jossa on useita rivejä ¶ Vrt. tekstikenttä.
tekstikenttä
text field tekstin syöttämisen ja muokkaamisen mahdollistava GUI-komponentti; erityisesti: tällainen komponentti, jossa on vain yksi rivi ¶ Vrt. tekstialue.
tekstitiedosto
(plain) text file tiedosto, jonka sisältämä data on tarkoitettu tulkittavaksi (vain) kirjoitusmerkeiksi ¶ Ks. luvut 5.2 ja 9.4.
this
this (mm. Scalassa:) erityinen parametrimuuttuja, joka on kaikilla metodeilla ilman erillistä määrittelyä ja joka viittaa siihen olioon, jonka metodia on kutsuttu ¶ Ks. luku 2.2.
tiedon piilottaminen
information hiding ohjelmien suunnitteluun liittyvä periaate, jonka mukaan rajapinnat tulee erottaa toteutuksista ¶ “Piilottamisella” tarkoitetaan sitä, ettei ohjelman osan (esim. luokan) käyttäjän tarvitse olla riippuvainen kuin siitä rajapinnasta, jonka hän “näkee”. Käyttäjä voi “unohtaa” toteutuksen tai olla siitä kokonaan tietämätön. Kun toteutustekniset seikat on piilotettu rajapinnan taakse, niin niitä voi vapaasti muokata ohjelman kehittyessä (esimerkiksi tehokkuuden parantamiseksi): kunhan rajapinta pysyy samana, niin muutoksia ei tarvita muualle ohjelmaan, josta tätä osaa käytetään. Ks. luku 2.6.
tiedosto
file tietokoneen varastoima tietoresurssi; erityisesti: kiintolevylle tai muuhun pysyväismuistiin tallennettu tietoresurssi ¶ Ks. myös tekstitiedosto.
tietokone
computer laite, joka käsittelee tietoa suorittamalla ohjelmiaTietotekniset järjestelmät perustuvat tietokoneisiin. Tietokone ei välttämättä ole elektroninen mutta yleensä on.
tietorakenne
data structure jollakin tietyllä tavalla jäsennetty kokonaisuus, johon tietokone varastoi tietoa ¶ Sanaa käytetään erityisen usein (ja joskus ainoastaan) kokonaisuuksista, jotka on suunniteltu suurienkin tietomäärien tehokkaaseen käsittelyyn, kuten alkiokokoelmien toteutuksista. Myös tiedostoilla on oma sisäinen tietorakenteensa. Tällä kurssilla käytämme sanaa hyvin laajassa mielessä ja viittaamme sillä suhteellisen yksinkertaisiinkin rakenteisiin: joissakin yhteyksissä sanomme esimerkiksi oliota muuttujineen eräänlaiseksi tietorakenteeksi.
tietotekninen järjestelmä
computer system tietokonelaitteiston ja ohjelmien yhdistelmä ¶ Tietoteknisiä järjestelmiä ovat eritoten yleiskäyttöiset tietokonejärjestelmät ja sulautetut järjestelmät.
tietotyyppi
data type määritelmä tietynlaisesta tiedosta ja erityisesti siitä, mitä tuollaisella tiedolla voi tehdä ¶ Ks. esim. luvut 1.3 ja 2.3. Hyvin usein puhutaan “tietotyyppien” sijaan vain “tyypeistä”. Ohjelmointikieliin on yleensä määritelty valmiita tietotyyppejä yleisiin tarpeisiin; esimerkiksi Scalan tietotyyppi Int kuvaa kokonaislukuja ja määrittelee mm. sen, että kokonaislukuja voi laskea yhteen. On myös yleistä, että ohjelmoija voi itse määritellä uusia tietotyyppejä. Ks. myös tyyppiparametri, staattinen tyyppi, dynaaminen tyyppi ja luokka.
tila
state tietyllä ajanhetkellä varastoituna olevan tiedon muodostama kokonaisuus ¶ Ohjelmoinnissa “tila” viittaa eritoten tietokoneen muistiin tallennettuun tietoon, jota ohjelma käsittelee. Ohjelma-ajolla kokonaisuutena on tila; esimerkiksi sijoitukset var-muuttujiin muuttavat tilaa, jolloin ohjelman tila voi vaihdella ajanhetkestä toiseen ohjelman suorittamisen aikana. Myös ulkoisen maailman kanssa näkyvästi vuorovaikuttaminen luetaan yleensä tilanmuutokseksi (esim. näytölle tulostaminen). Toisaalta esimerkiksi pelkkää lausekkeiden evaluoimista, ajan kulumista laskentaan, tai kutsupinon käyttöä ei lueta tilan muuttamiseksi. Funktiot voidaan luokitella tilaa muuttaviin ja muuttamattomiin. Olio-ohjelmassa olioilla on kullakin oma tila (ks. esim. luku 2.1), ja olioiden tiloista muodostuu koko ohjelman tila; oliotkin voivat olla muuttuvatilaisia tai muuttumattomia. Jotkin ohjelmointiparadigmat eroavat toisistaan ratkaisevasti siinä suhteessa, miten ne suhtautuvat tilanmuutoksiin.
tilaa muuttamaton funktio
stateless function funktio, joka ei kutsuttaessa koskaan muuta ohjelman tilaa ¶ Ks. luvut 1.6, 1.7 ja 7.5 ja vrt. tilaa muuttava funktio. Tällaisia funktioita sanotaan myös “sivuvaikutuksettomiksi”. Tilaa muuttamattomia funktioita kutsutaan niiden palautusarvon määrittämiseksi. Ne muistuttavat koulumatematiikasta tuttuja funktioita.
tilaa muuttava funktio
stateful function funktio, joka kutsuttaessa muuttaa ohjelman tilaa ainakin joissakin tapauksissa ¶ Ks. luvut 1.6, 1.7 ja 7.5, ja vrt. tilaa muuttamaton funktio. Esimerkiksi sellaiset funktiot, jotka muuttavat puskurin sisältöä, jonkin olion ilmentymämuuttujan arvoa tai tulostavat merkkejä tietokoneen ruudulle luetaan tilaa muuttaviksi. Tällaisia funktioita sanotaan myös “sivuvaikutuksellisiksi”. Tilaa muuttavat funktiot voivat olla hyödyllisiä, vaikka eivät palauttaisikaan merkityksellistä arvoa.
tilapäissäilö
temporary muuttuja, jota käytetään väliaikaisesti apuna tietyn algoritmin toteutuksessa ¶ Yksi muuttujien rooleista; ks. luku 2.5.
toString
toString (Scala-kielessä:) metodi, jonka tehtävänä on palauttaa merkkijonomuotoinen kuvaus oliosta ¶ Ks. luku 3.1. Jonkinlainen toString-metodi on määritelty kaikille Scala-olioille, ja esimerkiksi “oliontulostamiskäsky” println(olio) tulostaa merkkijonokuvauksen oliosta eli kutsuu oliolle toString-metodia ja tulostaa sen palauttaman merkkijonon (kuten println(olio.toString)). toString-metodit ovat avuksi mm. REPLissä ja ohjelmaa debugatessa, ja niiden palauttamia merkkijonoja voi muutenkin käyttää ohjelman toteutuksessa apuna.
toteutus
implementation 1) tapa, jolla jokin abstraktimpi malli, suunnitelma tai algoritmi käytännössä toimii; 2) se osa jostakin kokonaisuudesta, jonka tunteminen ei ole välttämätöntä tuon kokonaisuuden käyttämiseksi ¶ Sanaa käytetään ohjelmoinnin yhteydessä usealla erillisellä mutta toisiinsa liittyvällä tavalla. Esimerkkejä: 1) ohjelma tai aliohjelma voi olla jonkin yleisemmän algoritmin toteutus; 2) ohjelman osalla kuten luokalla voi olla julkinen rajapinta, joka määrää, miten tuota osaa käytetään, sekä piilotettu toteutus, joka määrää, miten tietokone osaa käytettäessä toimii; 3) funktiolla on puumerkki, joka kuvaa sen käyttötapaa, ja runko, joka toimii funktion toteutuksena ja jota funktion käyttäjän ei tarvitse tuntea. Tällä yleisellä sanalla on tietenkin myös muita merkityksiä, jotka sopivat ohjelmointiinkin (esim. “suunnitella ohjelma ja sitten toteuttaa suunnitelma”).
totuusarvo
truth value arvo, joka kertoo jonkin väittämän paikkansapitävyydestä; erityisesti: arvo, joka kertoo, onko väittämä tosi vai epätosi ¶ Ohjelmoinnissa usein käytetään Boolen logiikkaa, jossa väittämät ovat yksiselitteisesti joko tosia tai epätosia; ks. luku 2.8 ja Boolean.
try
try (Scala-kielessä:) poikkeustenkäsittelyssä käytetty varattu sana, jolla aloitetaan lohko, jonka suorittaminen voi epäonnistua ajonaikaisen virheen vuoksi
tulkki
interpreter apuohjelma, joka suorittaa annettua ohjelmaa muuntaen sen tarvittaessa konekieleksi ¶ Esimerkiksi Java-virtuaalikoneen keskeinen osa on tavukooditulkki. Ks. luku 5.2 ja vrt. kääntäjä.
tulostaa
print (tietokoneesta:) kirjoittaa kirjoitusmerkkejä ¶ Ohjelmoinnin yhteydessä tulostamisella ei useinkaan tarkoiteta tulostimen eli printterin käyttöä. Esimerkiksi tietokoneen näytölle tai tekstitiedostoon voi tulostaa.
tunnus
identifier ohjelman osalle annettu nimi ¶ Esimerkiksi muuttujien, funktioiden ja luokkien nimiä sanotaan joskus tunnuksiksi.
tuoreimman säilyttäjä
most-recent holder muuttuja, jota käytetään pitämään kirjaa viimeisimmästä arvosta jossakin arvojen sarjassa ¶ Yksi muuttujien rooleista. Tuoreimman säilyttäjässä voidaan esimerkiksi pitää kirjaa viimeisimmästä arvosta, joka on asetettu olion ominaisuudelle (luku 2.5), tai viimeisimmästä alkiosta, joka on käyty läpi alkiokokoelmassa (luku 5.3).
tyyppi
type (ohjelmoinnin yhteydessä yleensä:) sama kuin tietotyyppi
tyyppiannotaatio
type annotation sama kuin tyyppimäärittely
tyyppijärjestelmä
type system säännöstö, joka määrää miten tietotyyppejä käytetään jossakin ohjelmointikielessä ¶ Ks. staattinen ja dynaaminen sekä tyyppiturvallisuus.
tyyppimäärittely
type annotation lähdekoodiin kirjoitettu merkintä ohjelman osan staattisesta tietotyypistä ¶ Tyyppimäärittelyt voivat selkeyttää ohjelmaa ja välillisesti parantaa ohjelman suoritustehokkuutta; toisaalta tyyppimäärittelyt voivat myös tarpeettomasti hankaloittaa ohjelmoijan työtä. Joissakin staattisesti tyypitetyissä ohjelmointikielissä (esim. Java) esimerkiksi muuttujien ja palautusarvojen tyypit on aina kirjoitettava ohjelmakoodiin tyyppimäärittelyin. Täysin dynaamisesti tyypitetyissä kielissä (esim. Python) tyyppimäärittelyjä ei kirjoiteta lainkaan. Scalassa tyyppimäärittelyjä on aina luvallista kirjata koodiin, mutta tyyppipäättelyn vuoksi se ei usein ole tarpeen; ks. luku 1.8. Kuitenkin esimerkiksi tyhjää alkiokokoelmaa luodessa (luku 1.5), funktion parametrimuuttujia määritellessä sekä kuormitettujen ja rekursiivisten funktioiden yhteydessä tyyppimäärittelyjen käyttö voi Scalassakin olla välttämätöntä.
tyyppiparametri
type parameter eräiden luokkien vaatima lisämääre, jolla täsmennetään, millaisesta tietotyypistä on kyse luokkaa käytettäessä ¶ Esimerkiksi Scala-ohjelmassa monia alkiokokoelmia luodessa on välitettävä tyyppiparametri, joka kertoo kokoelman alkioiden tietotyypin; ks. esim. luvut 1.5 ja 8.3. Luokkien lisäksi myös Scala-funktiolla voi olla tyyppiparametreja, mutta kurssilla käsite esiintyy vain luokkien yhteydessä. Scalassa tyyppiparametrit ovat muiden tyyppitietojen tapaan usein pääteltävissä automaattisesti.
tyyppipäättely
type inference automaattinen lausekkeiden ja muuttujien tietotyyppien määrittäminen staattisesti ¶ Esimerkiksi Scala-kieleen tyyppipäättely liittyy kiinteästi. Ks. luku 1.8. Aihetta sivutaan myös mm. luvuissa 2.9 ja 6.2.
tyyppiturvallisuus
type safety ohjelmointikieltä kuvaileva ominaisuus, joka kertoo siitä, kuinka voimakkaasti kieli valvoo tietotyyppeihin liittyvien rajoitusten noudattamista ¶ Ks. luku 1.8. Tyyppiturvallisessa kielessä tietyntyyppisellä arvolla ei voi tehdä kuin sellaisia asioita, joita arvon tietotyyppi nimenomaisesti sallii. Scala on huomattavan tyyppiturvallinen kieli, ja Scala-työkalut varoittavat ns. tyyppivirheistä yleensä käännösaikaisilla virheilmoituksilla. Ks. staattinen tyypitys.
tyyppiyhteensopiva
conformant/type compatible (tietotyypistä:) sellainen, että kyseisentyyppisiä arvoja voi käyttää toisentyyppisten arvojen paikalla ¶ Esimerkki: Jos Scala-ohjelman Opiskelija-luokka on Ihminen-luokan aliluokka, niin sen määrittelemä Opiskelija-tyyppi on tyyppiyhteensopiva Ihminen-tyypin kanssa, ja Ihminen-tyyppiseen muuttujaan on laillista sijoittaa viittaus mihin tahansa Opiskelija-luokan ilmentymään. Kaikki Scala-tyypit ovat tyyppiyhteensopivia Any-tyypin kanssa. Ks. myös Liskovin periaate.
täsmäkieli
domain-specific language ohjelmointikieli, joka ei ole yleiskäyttöinen vaan sopii käytettäväksi nimenomaisen aihealueen yhteydessä ¶ Ks. luku 12.1.
täydellinen nimi
fully qualified name ohjelman osan koko nimi, joka sisältää myös pakkauksen nimen ¶ Esimerkiksi Scalassa Int-tietotyypin täydellinen nimi on scala.Int ja funktion sqrt täydellinen nimi on scala.math.sqrt.
Unicode
Unicode eräs merkistöstandardi ¶ Ks. luvut 5.2 ja 5.4. Unicode-standardi määrittelee tavan, jolla kutakin laajaan merkistöön kuuluvaa merkkiä vastaa yksiselitteisesti tietty luku. Sitä käytetään mm. Scalassa ja laajasti muutenkin.
Unit
Unit 1) yksikkötyypin nimi mm. Scalassa; 2) yksikkötyypin ainoaa arvoa merkitsevä Scala-kielinen literaali ¶ Ks. luvut 1.6 ja 3.3. Unit-arvoa käytetään mm. merkkinä siitä, ettei funktiolla ole merkityksellistä palautusarvoa. Scalan Unit-literaalin voi kirjoittaa tyhjinä kaarisulkeina: ().
vakio
constant muuttuja, jonka arvo on tiedossa jo ennen ohjelma-ajoa ja joka edustaa ohjelmassa pysyvästi tätä arvoa ¶ Ks. luku 6.2 ja kurssin tyyliopas. Vakiot ovat aina myös kiintoarvoja. Scalassa ne ovat käytännössä aina val-muuttujia.
val-muuttuja
val(ue variable) (Scala-kielessä:) muuttuja, jonka arvoa ei voi vaihtaa toiseksi ¶ Ks. luku 1.4 ja vrt. var-muuttuja. val-muuttujat määritellään yleensä val-sanaa käyttäen, mutta myös eräät erikoismuuttujat kuten parametrimuuttujat ja foreach-silmukassa käytetyt tuoreimman säilyttäjät ovat Scalassa val-muuttujia.
var-muuttuja
var(iable) (Scala-kielessä:) muuttuja, joka määritellään var-sanalla ja jonka arvon voi vaihtaa sijoittamalla vanhan arvon tilalle uuden ¶ Ks. luku 1.4 ja vrt. val-muuttuja.
varattu sana
reserved word ohjelmointikieleen kuuluva sana, jolla on kielessä erityismerkitys tai jota ei muusta syystä voi käyttää tunnuksena ¶ Scala-kielessä on noin 50 varattua sanaa, joista esimerkkejä ovat val, def, import, true, this, object, class, new, private, if ja for. Perustietotyyppien nimet kuten Int ja String eivät varsinaisesti ole varattuja sanoja, mutta niitäkin on sekaannusten välttämiseksi parempi olla käyttämättä tunnuksina.
varoitus
warning ohjelmointityökalun antama ilmoitus, joka kertoo epäillystä ongelmasta ohjelmassa muttei kuitenkaan välttämättä virheestä ¶ Ks. luku 3.1.
vektori
vector eräänlainen muuttumaton kokoelma, jonka alkiot ovat indeksien mukaisessa järjestyksessä ¶ Ks. luku 5.5. Vrt. esim. taulukko ja puskuri.
vertailuoperaattori
comparison operator operaattori, jolla voidaan verrata kahta arvoa ja muodostaa vertailun tulosta kuvaava totuusarvo ¶ Esimerkiksi vertailuoperaattorilla < voidaan muodostaa lauseke 10 < 100, jonka arvo on true. Ks. luku 2.8 ja ks. myös logiikkaoperaattori.
viesti
message olion komentamiseen käytetty käsky, olion metodin kutsu ¶ Olio-ohjelmointi perustuu ajatukseen, että olioille voi lähettää niiden vastuualueeseen liittyviä viestejä joihin ne reagoivat; oliot voivat myös lähettää vastaavia viestejä toisilleen reagoidessaan vastaanottamiinsa viesteihin. Ks. luku 2.1.
viittaus
reference arvo, joka ilmaisee, mistä tietokoneen muistissa jokin tieto löytyy ¶ Ks. esim. luvut 1.5, 2.3 ja 5.2. Scala-ohjelmissa viittaukset osoittavat muistiin tallennettuihin olioihin.
virhe
error 1) ohjelmointikielen sääntöjen vastainen tai muuten ohjelmoijan tarkoituksesta poikkeava piirre ohjelmassa, bugi; 2) sama kuin ajonaikainen virhe ¶ Virheitä voidaan luokitella esimerkiksi käännösaikaisiin, ajonaikaisiin ja loogisiin. Joissain teknisissä yhteyksissä sanalla “virhe” tarkoitetaan vain ajonaikaisia virheitä.
virtuaalikone
virtual machine tietokoneen kaltaisesti toimiva ohjelma, jonka avulla voidaan ajaa (tietynlaisia) toisia ohjelmia ¶ Ks. luvut 5.2 ja 12.1. Virtuaalikone osaa vastaanottaa tietyn kielisiä ohjelmia; voidaan sanoa, että sen vastaanottama kieli on virtuaalikoneen simuloiman tietokoneen konekieltä. Virtuaalikone sisältää tulkin (tai on tulkki, näkökulmasta riippuen), jonka avulla se muuntaa annetun ohjelman todelliseksi konekieleksi.
välikieli
intermediate language kieli, jolle lähdekoodia käännetään mutta joka ei ole konekieltä; erityisesti: virtuaalikoneen “konekielenä” toimiva kieli ¶ Ks. luku 5.2.
välitön aliluokka
immediate/direct subclass suoraan toiselta perivä luokka; luokkahierarkiassa heti yhtä alemmassa “polvessa” oleva aliluokka ¶ Vrt. välillinen aliluokka eli jokin välittömän aliluokan omista aliluokista.
välitön yliluokka
immediate/direct superclass suoraan peritty luokka; luokkahierarkiassa yhtä ylemmässä “polvessa” oleva yliluokka ¶ Vrt. välillinen yliluokka eli jokin välittömän yliluokan omista yliluokista.
while-silmukka
while loop silmukka, joka on muodostettu while-avainsanaa silmukan alussa käyttäen ja joka toistaa toimenpidettä nolla tai useampia kertoja ¶ Ks. luku 6.1 ja vrt. do-silmukka.
WETWET
WETWET DRY-periaatteen rikkominen ¶ Sanoista write everything twice write everything twice.
yksikkötyyppi
unit type tietotyyppi, jolla on vain yksi arvo ja jolla ei siksi voi ilmaista informaatiota ¶ Ks. luku 1.6. Yksikkötyyppisiä arvoja on vain yksi. Mm. Scalassa tämä arvo on nimeltään Unit.
yksisuuntainen lippu
one-way flag muuttuja, jolla on yksi kahdesta arvosta ja jonka arvoa ei vaihdeta, kun se on kerran vaihdettu alkuarvosta toiseksi ¶ Yksi muuttujien rooleista, eräänlainen lippu. Ks. luku 6.3.
yksittäisolio
singleton object 1) olio, joka on määritelty ohjelmakoodissa yksittäistapauksena eikä luokan kautta; 2) tällaisen olion määrittely ohjelmakoodissa ¶ Ks. luvut 2.1, 2.2 ja 4.5 ja vrt. ilmentymä. Scalassa yksittäisoliot voivat olla luokan kumppaniolioita tai itsenäisiä.
yksityinen
private ulospäin näkymätön; rajapintaan kuulumaton; vain sisäiseen käyttöön tarkoitettu; toteutukseen kuuluva ¶ Ks. luku 2.6 ja vrt. julkinen.
yleiskäyttöinen tietokone
general-purpose computer tietokone, jolla ei ole tiettyä sovelluskohdetta vaan jota voidaan käyttää moniin erilaisiin tarkoituksiin ¶ Esimerkiksi tyypilliset kotitietokoneet ovat yleiskäyttöisiä. Tällaista tietokonetta voidaan hyödyntää eri tavoin ajamalla siinä erilaisia sovellusohjelmia. Vrt. sulautetut järjestelmät ja ks. luku 1.1.
ylikuormittaa
overload sama kuin kuormittaa
yliluokka
superclass/base class luokka, jolta toinen luokka perii ominaisuuksia ja joka edustaa aliluokkiensa kuvaamien käsitteiden yläkäsitettä ¶ Yliluokan ominaisuudet periytyvät sen aliluokille; ks. luku 6.4. Luokalla voi olla lukuisia välittömiä aliluokkia. Vrt. piirreluokka.