Tämä kurssi on jo päättynyt.

Kurssin viimeisimmän version löydät täältä: O1: 2024

Sanasto

Tämä sivu selittää joidenkin ohjelmointiin liittyvien termien merkityksiä lyhyesti ja Ohjelmointi 1 -kurssin näkökulmaa painottaen.

Selittelyjä

Useilla sanastossa esiintyvistä termeistä on muitakin merkityksiä sekä ohjelmoinnin ulkopuolella että muissa ohjelmointiyhteyksissä. Tällä sivulla on keskitytty kurssin kannalta oleellisimpiin merkityksiin. Osa 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. Tästä sivusta on myös englanninkielinen versio.

Voit katsoa myös Scala-kielen virallisen sanaston, jota emme tosin kurssilla noudata 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 ja muuttujia; 2) siitä ei voi luoda ilmentymiä kuin aliluokkiensa kautta; 3) sille voidaan määritellä konstruktoriparametreja ¶ Ks. luku 7.3 ja vrt. piirreluokka.
abstrakti metodi
abstract method metodi, jolle on määritelty puumerkki muttei runkoa ¶ Ks. luvut 7.2 ja 7.3. Abstrakteja metodeita voi olla piirreluokissa ja abstrakteissa luokissa eli sellaisissa luokissa, joista ei suoraan luoda ilmentymiä.
abstrakti muuttuja
abstract variable ilmentymämuuttuja, jolle on määritelty tietotyyppi muttei arvoa ¶ Ks. luku 7.2. Abstrakteja muuttujia 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, 3.1, 5.5, 6.2, 6.3, 7.2, 7.3 ja 9.1. Abstraktioita on erilaisia. Esimerkiksi parametrin lisääminen funktiolle tai luokalle abstrahoi pois ratkaistavan ongelman yksittäiset käyttötapaukset ja tekee ratkaisusta yleisemmän. Rajapinta voi taas abstrahoida pois ongelman ratkaisutavan eli toteutuksen; ks. abstraktiotaso.
abstraktiotaso
level of abstraction (tällä kurssilla erityisesti:) ratkaisun riippumattomuusaste toteutustavasta ¶ Yleiskäyttöiset ohjelmointityökalut kuten do-silmukka ja foldLeft-metodi ovat abstrakteja siinä mielessä, että niillä voi ratkaista monia erilaisia ongelmia; ne ovat on abstraktimpia käyttötapausten suhteen kuin vaikkapa nimenomaisesti kokoelman koon palauttava size-metodi. Kuitenkin käyttäjänsä näkökulmasta size on korkeammalla abstraktiotasolla. Sen kutsujan ei tarvitse tietää miten se on toteutettu (silmukalla, foldLeftillä vai jotenkin muuten); se on abstraktimpi toteutustavan suhteen kuin mainitut yleiskäyttöisemmät työkalut. Termiä käytetään näin mm. luvuissa 6.2, 6.4 ja 8.3. Ks. myös korkean tason kieli ja matalan tason kieli.
AI
AI artificial intelligence eli tekoäly
aihealue
domain ongelmakenttä tai aihepiiri, jota ohjelma käsittelee ¶ Esimerkiksi tietokonepelin aihealueeseen kuuluu pelimaailma sääntöineen. Ks. myös malli.
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, yleensä siksi, että jonkin toimenpiteen suorittaminen epäonnistuu ¶ Ks. luvut 1.8, 4.1 ja 4.2 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 7.3. 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
ankkuri
anchor (O1Libraryssä:) kuvan kohta, josta se kiinnitetään asemoitaessa kuvia suhteessa toisiinsa ¶ Kuvan ankkurina voi olla esimerkiksi sen keskikohta tai jokin kulmista. Näin voidaan vaikkapa asemoida "tämän kuvan ankkuri tuon kuvan yläreunan keskelle". O1Library-kirjastossa ankkureita kuvaa luokka Anchor. Ks. luku 2.5 ja tuon luokan dokumentaatio.
Any
Any kaikkien Scala-luokkien yliluokka ¶ Ks. luku 7.3.
AnyRef
AnyRef useimpien Scala-luokkien yliluokka ¶ Ks. luku 7.3. Scala-ohjelmaa suorittava virtuaalikone käsittelee AnyRef-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 7.3 (ja 3.4). 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 (Scala-kielessä:) nimi, joka voidaan antaa metodille, jotta tuota metodia voisi kutsua mainitsematta metodin nimeä laisinkaan ¶ Ks. luvut 5.1 ja 6.1. 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. 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). Termiä "arvo" käytetään tällä kurssilla hieman 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.8 ja 5.3. Askeltaja voi esimerkiksi pitää kirjaa kasvavasta järjestysnumerosta: 0, 1, 2, jne.
avain
key tieto, jonka perusteella voidaan paikantaa tai selvittää toinen tieto; erityisesti: tieto, jonka perusteella hakurakenteesta voidaan hakea arvo ¶ Ks. luku 8.4 ja vrt. indeksi.
avain–arvo-pari
key–value pair avaimen ja arvon muodostama pari ¶ Käytetään erityisesti hakurakenteiden alkioina; ks. luku 8.4.
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 tietotyyppi ¶ Boolean-tyyppisiä arvoja on vain kaksi: tosi ja epätosi, joita kuvaavat Scalassa literaalit true ja false. Ks. luku 3.2; 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ä.
by name -parametri
by-name parameter parametri, jota ei evaluoida ennen välittämistä funktiolle vaan aina kun tai jos sen arvoa funktion suorituksen eikana tarvitaan ¶ Ks. luku 7.1. Jos by name -parametrin arvoa ei funktion suorituksen aikana kaikissa tapauksissa käytetä lainkaan, voi parametria sanoa väljästi evaluoiduksi. By name -parametrin evaluointi ei ole laiskaa, vaan parametrilauseke evaluoidaan aina käytettäessä uudestaan. Vrt. by value -parametri.
by value -parametri
by-value parameter parametri, joka evaluoidaan tiukasti ja saa arvon ennen funktiokutsun alkua ¶ Mm. Scalassa "tavalliset parametrit" ovat by value -parametreja. Vrt. by name -parametri.
catch
catch (Scala-kielessä:) poikkeustenkäsittelyssä käytetty varattu sana, jolla aloitetaan try-lohkon jälkeinen toinen lohko, siinä tapauksessa, että try-lohkoa suoritettaessa tapahtui virhe ¶ catch-lohko suoritetaan try-lohkon jälkeen mutta mahdollista finally-lohkoa ennen.
debugata
debug etsiä ja korjata 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ä. Aiheesta on kurssimateriaalissa erillinen sivu.
deklaratiivinen ohjelmointi
declarative programming yleinen ohjelmointiparadigma, jossa ohjelman mielletään muodostuvan ongelman ratkaisemiseen tarvittavista määritelmistä, säännöistä, rajoitteista (tms.) eikä peräkkäisten käskyjen sarjoista kuten imperatiivisessa ohjelmoinnissa ¶ Ks. luku 10.2. 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 12.3. 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 8.3 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. luvut 3.1 ja 3.4. Ks. myös Scaladoc.
dokumentaatiokommentti
doc(umentation) comment erityisellä tavalla muotoiltu kommentti, jota voi käyttää dokumentaation tuottamiseen osittain automaattisesti ¶ Ks. luku 3.1. Scala-ohjelman ja siihen upotettujen dokumentaatiokommentien perusteella voidaan luoda dokumentaatiota Scaladoc-työkalulla.
domain
domain sama kuin aihealue ¶ Sanalla viitataan muissa yhteyksissä usein myös verkkotunnuksiin kuten aalto.fi, mikä on ihan eri asia.
Double
Double (mm. 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, 4.4, 7.2 ja 9.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.2. Sanalla "dynaaminen" ei ole tässä yhteydessä aivan samanlaista merkitystä kuin muissa kurssilla esiintyvissä yhteyksissä. Sana on valittu tämän tekniikan nimeen osin siksi, että se kuulostaa hienolta.
dynaaminen sidonta
dynamic binding, dynamic 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 käynnistettäessä 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 7.2 ja 7.3.
dynaaminen tyyppi
runtime type, 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 7.2 ja 7.3.
dynaamisesti tyypitetty
dynamically typed (ohjelmointikielestä:) tyyppijärjestelmältään sellainen, että lähdekoodin osille ei määritetä eri tyyppejä staattisesti, ja ainoastaan arvojen dynaamiset tyypit tarkastetaan (ohjelma-ajon aikana) ¶ Esimerkiksi muuttujilla ei siis dynaamisesti tyypitetyssä kielessä ole eri 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 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 4.4. Ehdollisen operaattorin evaluointi on siis väljää.
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. Evaluointi voi olla tiukkaa tai väljää.
evaluoimaton parametri
by-name parameter ks. by name -parametri
evaluointialue
evaluation area 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. Se on graafinen abstraktio virtuaalikoneen toiminnasta.
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 ¶ Ohjelmointi 1 -kurssilla esiintyvät for-silmukat ovat ns. foreach-silmukoita eli käyvät läpi annetun kokoelman ja toistavat tiettyä toimenpidettä kunkin tuon kokoelman alkion kohdalla; ks. luvut 5.3 ja 5.4. Monesti for-silmukoilla käydään läpi tiukasti evaluoituja kokoelmia, jolloin toistokertojen lukumäärä ja läpikäytävät alkiot ovat tunnetut toiston alkaessa; kuitenkin on mahdollista käydä läpi samoin myös väljästi evaluoituja kokoelmia. Scalan for-käsky on monipuolinen; 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 vaikutuksellisia tai vaikutuksettomia. Metodit ovat olioihin liitettyjä funktioita.
funktiokutsu
function call 1) lauseke, joka evaluoidaan suorittamalla tietyn funktion ohjelmakoodi; 2) tällaisen lausekkeen evaluoimisesta syntyvä toiminta; funktion koodin suorittaminen ¶ 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 6.1. Tunnetaan myös nimellä lambdafunktio.
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 vaikutuksettomiin funktioihin ja muuttumattomaan tietoon ja johon tyypillisesti yhdistyy runsas korkeamman asteen funktioiden käyttäminen ¶ Ks. luku 10.2 ja vrt. imperatiivinen ohjelmointi. Funktionaalinen ohjelmointi on keskeinen deklaratiivisen ohjelmoinnin muoto.
graafinen käyttöliittymä
graphical user interface käyttöliittymä, joka perustuu pelkkien kirjoitusmerkkien sijaan myös graafisiin elementteihin kuten ikkunoihin ja nappuloihin ¶ Ks. luvut 2.7, 2.8 ja 12.3. Graafisiin käyttöliittymiin viitataan suomeksikin hyvin usein lyhenteellä GUI. Graafiset käyttöliittymät ovat nykyään hyvin yleisiä, ja aivan erityisen yleisiä ne ovat 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 8.4 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".
heikko tekoäly
weak AI tekoäly, joka toimii kapeaksi rajatulla erikoisalueella ¶ Tarkoittaa melkein samaa kuin suppea tekoäly; termillä saatetaan lisäksi korostaa eroa vahvaan tekoälyyn, jolla on tietoisuus.
hierarkia
hierarchy ks. luokkahierarkia
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 3.3. Ks. myös match.
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.
imperatiivinen ohjelmointi
imperative programming yleinen ohjelmointiparadigma, joka perustuu muuttuvatilaisen tiedon käsittelyyn peräkkäin järjestetyillä käskyillä (lauseilla) ja vaikutuksellisilla aliohjelmilla ja johon tyypillisesti yhdistyy runsas silmukoiden käyttö toiston välineenä ¶ Ks. luku 10.2 ja vrt. funktionaalinen ohjelmointi.
implisiittinen
implicit kätketty; (vain) epäsuorasti pääteltävissä oleva; ei eksplisiittinen
implisiittinen riippuvuus
implicit coupling 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. Implisiittiset riippuvuudet huonontavat ohjelmakoodin muokattavuutta ja kasvattavat bugien riskiä.
indeksi
index alkion järjestysnumero sellaisessa kokoelmassa, jonka alkiot ovat numeroidussa järjestyksessä ¶ Esimerkiksi vektorit, puskurit ja taulukot 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 12.2), 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.
I/O
I/O lyhenne termille input/output
iteraatio
iteration 1) toistaminen siten, että kukin toistokerta jatkaa siitä, mihin edellinen jäi; 2) sellaiseen toistoon perustuva ohjelmien toteutustapa; erityisesti: käskyjen toistaminen silmukalla ¶ Vrt. rekursio ja ks. luku 11.2.
iteraattori
iterator olio, joka tarjoaa palvelun tietyn kokoelman sisällön läpikäymiseen väljästi tietyssä järjestyksessä ¶ Ks. luku 12.2.
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, 12.2 ja 12.3.
JavaScript
JavaScript eräs ohjelmointikieli ¶ JavaScriptillä on ohjelmointikielien joukossa de facto -erityisasema sikäli, että nykyiset web-selaimet osaavat suorittaa JavaScript-ohjelmia. Sitä käytetäänkin laajasti web-sivuilla. Muunkielisten ohjelmien kääntäminen JavaScriptiksi on yleistymään päin, ja Scala-kielisiäkin ohjelmia voi kääntää JVM-tavukoodin sijaan myös JavaScriptiksi käyttämällä Scala.js-välineistöä. Nimestään huolimatta JavaScript on aivan eri asia kuin Java; nimien samankaltaisuus johtuu kaiketi markkinointisyistä.
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 3.1 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ä kokoelma 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
(con)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 kutsuttu ja mihin siis tulee palata funktiokutsun päättyessä. Kukin kehys pidetään varattuna niin kauan kuin funktiokutsu kestää. Kehykset muodostavat kutsupinon.
keinoäly
artificial intelligence (AI) tekoäly
kenttä
field sama kuin jäsenmuuttuja
keskeytyskohta
breakpoint debuggerissa asetus, joka saa ohjelman suorituksen pysähtymään, kun tarkasteltavan ohjelman suorituksessa saavutaan tiettyyn vaiheeseen ¶ Ks. debuggeria esittelevä sivu.
kiintoarvo
fixed value muuttuja, jonka arvoa ei vaihdeta sen jälkeen, kun muuttuja on kerran alustettu sopivalla arvolla ¶ Yksi muuttujien rooleista. Ks. luku 2.6 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 ¶ Sanalla voidaan korostaa, että kyseessä ei ole ohjelmoijan itsensä tiettyyn sovellukseen laatima funktio vaan yleiskäyttöisemmän kirjaston osa.
kirjoittaa
write, print 1) välittää tietoa ohjelmasta sen ulkopuolelle (osa I/O:ta) teksti tai binaarilukuina; 2) sijoittaa ¶ Ks. luku 12.2; 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 9.1.
kokoelma
collection tietorakenne, jonka tehtävänä on pitää kirjaa useasta tietyntyyppisestä arvosta ¶ Scala-ohjelmissa kokoelmia kuvataan olioina. Kokoelman sisältämiä arvoja sanotaan alkioiksi. Kokoelmia on eri tyyppisiä; erilaiset kokoelmat eroavat toisistaan mm. tehokkuuden osalta. Joissakin kokoelmissa alkiot ovat hyvin määritellyssä järjestyksessä esimerkiksi indeksien perusteella. Jotkin kokoelmat ovat muuttumattomia, toiset muuttuvatilaisia. Monet kokoelmat ovat tiukkoja mutta toiset väljiä. Kokoelmatyypit ovat usein tyyppiparametrillisia. Kurssilla esiin tuleviin kokoelmatyyppeihin lukeutuvat mm. puskurit, merkkijonot, vektorit, taulukot, virrat, listat, hakurakenteet ja pinot. Vrt. monikko.
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.6 ja 5.3.
komentorivi
command line tekstipohjainen ympäristö tietokoneen käyttämiseksi ¶ Komentoriviä käyttävä ihminen käynnistää ohjelmia kirjoittamalla ohjelman nimen (tarvittavine lisätietoineen). Tyypillisesti ohjelman tuloste tulee tällöin näkyviin, sekin tekstimuodossa. Komentorivi voi olla vaihtoehto graafiselle käyttöliittymälle; toisaalta komentorivi voi olla myös osa graafista käyttöliittymää. Esimerkkejä komentoriviympäristöistä ovat Windowsin Command Prompt ja Linuxien Terminal-ohjelmat. Luvussa 5.2 on esimerkkejä Scala-työkalujen käytöstä komentorivillä.
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, machine 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ä.
koneoppiminen
machine learning tietojenkäsittelyn osa-alue, jossa ohjelmisto tai järjestelmä oppii sille annetun datan perusteella tekemään päätöksiä, ennustuksia tai muita arvioita sellaisistakin tapauksista, jotka vain muistuttavat datassa esiintyviä (mutteivät ole niiden kanssa identtisiä) ja joita ohjelmoija ei ole erikseen koodiksi kirjannut ¶ Koska monet koneoppimisen sovellukset tekevät ihmisiin vaikutuksen, niihin usein viitataan trendikkäästi tekoälynä. Ks. luku 7.1.
konkatenoida
concatenate sama kuin katenoida
konkreettinen luokka
concrete class luokka, joka ei ole abstrakti eikä piirreluokka ¶ "Tavallinen luokka". Konkreettisessa luokassa ei voi olla abstrakteja jäseniä, mutta myös konkreettinen luokka voi toimia yliluokkana kuten abstrakti luokkakin; ks. luku 7.3.
konsoli
console tekstikonsoli
konstruktori
(instance) constructor aliohjelma, joka suoritetaan ilmentymää luodessa ¶ Sanalla "konstruktori" viitataan ohjelmakoodiin, joka suoritetaan instantioinnin yhteydessä, kun olion tiedoille on varattu muistitilaa. 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. Scala-ohjelmiin ei tarvitse kirjoittaa konstruktoria mihinkään erilliseen paikkaan (kuten joissakin muissa kielissä), vaan konstruktori muodostuu luokan runkoon kirjoitetuista käskyistä; ks. luku 2.4. Kuitenkin myös Scalassa on mahdollista kirjoittaa erillinenkin konstruktori, jos halutaan kuormittaa ilmentymien luomiskäskyä; ks. esim. luku 3.6.
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 5.5. 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 jo määritelty jäsen (metodi tai muuttuja) toisin yleisemmän määrittelyn käyttämisen sijaan ¶ Aliluokassa voidaan korvata yliluokan määrittelemä metoditoteutus toteutuksella, joka sopii juuri tuon aliluokan ilmentymille; ks. esim. luku 7.3. Korvaaminen onnistuu myös yksittäisessä luokan ilmentymässä, jonka toiminnan halutaan poikkeavan luokalle yleisesti määritellystä toiminnasta; ks. esim. luku 2.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 5.1. 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. luvut 1.6 ja 3.6.
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
command tietokonetta ohjeistava määräys ¶ "Käsky"-sanaa käytetään kurssilla epämuodollisesti mistä tahansa tietokoneen komentamisesta. Esimerkiksi tilan muuttamiseen käytettävät lauseet ovat käskyjä, samoin vaikutuksettomat lausekkeet.
käynnistysolio
app 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. Ks. myös luku 6.3.
käyttöjärjestelmä
operating system ohjelmisto, joka hallinnoi laitteiston käyttöä ja tarjoaa ohjelmoijalle palveluita ohjelmien laatimisen tueksi ja loppukäyttäjälle sovellusten käynnistämiseksi ¶ Käyttöjärjestelmä mm. huolehtii laitteistoresurssien (muisti, prosessori, tiedostot, tietoverkko, oheislaitteet ym.) käytöstä ja tarjoaa ohjelmoijan käyttöön abstraktioita, joiden kautta näitä resursseja voi hyödyntää.
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. Ks. myös näkymä ja vrt. malli.
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. luvut 2.8 ja 12.3.
käännösaikainen virhe
compile-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, 3.4 ja 7.2 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.
laama
llama ohjelmointiin pitkälti liittymätön nisäkäslaji
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. Nimen taustaa on selitetty luvussa 6.1.
lambdalauseke
lambda expression sama kuin funktioliteraali ¶ Erityisesti kielissä, joissa funktioliteraaleissa käytetään sanaa "lambda" tai vastaavaa kreikkalaista aakkosta. Nimen taustaa on selitetty luvussa 6.1.
laiska
lazy väljä ja lausekkeiden toistuvaa evaluointia välttävä ¶ Ks. luku 7.1. Tämä adjektiivi kuvaa erästä tapaa, jolla lausekkeita voidaan evaluoida. Laiska muuttuja saa arvon siihen sijoitettavasta lausekkeesta väljästi eli vain kun tai jos tuon muuttujan arvoa käytetään; tämän jälkeen arvo on tallessa muuttujassa, josta se saadaan lauseketta uudelleen evaluoimatta. Scalassa laiskan muuttujan voi määritellä ilmaisulla lazy val. Laiskan kokoelman kuten virran alkioista muodostetaan vain ne, joita käytetään; nuo alkiot varastoidaan tällöin muistiin.
lause
statement käsky, joka määrää tietokoneen suorittamaan jonkin toimenpiteen ¶ Esimerkiksi Scalan tulostuskäskyä println(1 + 1) ja sijoituskäskyä a = 10 voi sanoa lauseeksi. 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. Yksi lausekekin voi muodostaa lauseen. Lauseita voi kirjoittaa ohjelmakoodiin peräkkäin, ja näin voidaan määrätä toimenpiteitä suoritettaviksi peräkkäisessä järjestyksessä. 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 yleensä riittää. Ohjelmointi 1 -kurssin materiaalissa tämä termi ei ole aktiivisessa käytössä.
lauseke
expression ohjelmointikielen ilmaisu, jolle voidaan määrittää arvo ¶ Ks. esim. luku 1.3. Esimerkiksi literaalit, aritmeettiset lausekkeet kuten 1 + 1, muuttujien nimet ja ohjelmakoodiin kirjoitetut funktiokutsut ovat lausekkeita. Arvon määrittämistä sanotaan lausekkeen evaluoimiseksi. Vrt. lause.
LIFO
LIFO pinojen noudattama periaate, jonka mukaan alkiota poistettaessa poistetaan aina viimeksi lisätty alkio ¶ Sanoista last in, first out. Ks. luku 11.3.
liittää (piirre)
mix in (a trait) määritellä luokka (tai yksittäisolio) piirreluokan alakäsitteeksi ¶ Ks. luku 7.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 5.4 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 7.3.
lista
list 1) luettelo; 2) (Scalassa ja useassa muussa kielessä:) eräänlainen muuttumaton alkiokokoelma, jonka toteutus perustuu alkioiden ketjuun ja joka sopii käytäväksi läpi järjestyksessä ¶ Scalassa listoja kuvaa luokka List; ks. luku 11.3 ja jatkokurssit. Virrat ovat laiskoja listoja. Eri ohjelmointikielet käyttävät sanaa "lista" erilaisista kokoelmatyypeistä.
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 4.4.
lohko
block (Scalassa:) aaltosulkeiden sisään kirjoitettujen peräkkäisten käskyjen yhdistelmän muodostama lauseke ¶ Esimerkiksi funktion runko määritellään lohkoksi, kun runkoon kuuluu useita peräkkäisiä käskyjä. Samoin valintakäskyjen 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 ilmenee 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 12.2; 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 aaltosuluilla. Suoraan Scala-luokan runkoon, metodien ulkopuolelle, kirjoitetut käskyt 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 7.3 sekä yli- ja aliluokka.
luokkakirjasto
class library kirjasto, joka sisältää luokkia
luokkapolku
classpath ohjelmointityökalujen (mm. JVM:n) asetus, joka kertoo, mistä kansioista ja/tai pakkauksista ohjelman osat löytyvät ¶ Eclipsessä luokkapolkua voi muokata projektikohtaisesti valitsemalla Project ‣ Properties ‣ Java Build Path. Näin voi esimerkiksi määritellä yhden projektin hyödyntämään toista; ks. luku 10.1.
luokkatiedosto
class file eräänlainen Java-virtuaalikoneelle tarkoitettu tiedosto, joka sisältää virtuaalikoneelle 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, magic constant literaali, jonka tarkoitus ohjelmassa ei ole ohjelmakoodista ilmeinen ¶ Maagiset luvut voivat hankaloittaa ohjelman lukemista, ja maagisen luvun toistuessa voi syntyä implisiittisiä riippuvuuksia. Maagisia lukuja voi välttää esimerkiksi määrittelemällä vakioita niiden sijaan; ks. esim. luku 2.6.
malli
model 1) kuvaus jostakin asiasta tai kokonaisuudesta; erityisesti: kuvaus siitä aihealueesta, jota ohjelma käsittelee; 2) se sovellusohjelman osa, joka kuvaa aihealueen käsitteet (käyttöliittymästä riippumattomasti) ¶ Malleja voidaan muodostaa ohjelmointikielen rakenteita, esimerkiksi luokkia, käyttäen. Tätä sanaa käytetään usein korostettaessa eroa aihealuetta kuvaavan mallin ja tuon mallin käsittelemiseen tarkoitetun käyttöliittymän (eli näkymän) välillä; ks. luvut 1.2, 2.7, 2.8 ja 9.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ä.
match
match valintakäsky, jolla voidaan määrätä tietokone valitsemaan kahdesta tai useammasta vaihtoehdosta tutkimalla, mikä koodiin kirjatuista tapauksista vastaa tietyn lausekkeen arvoa ¶ Kukin match-käskyn tapauksista kuvaa ns. hahmon, johon tutkittavan lausekkeen arvo sovitetaan mikäli mahdollista. Hahmonsovitus perustuu arvon dynaamiseen tyyppiin. Ks. luvut 4.2 ja 4.3 ja vrt. if.
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 10.2). Monien ohjelmointikielten peruskirjastoissa on paljon merkkijonojen käsittelemiseen sopivia aliohjelmia (ks. esim. luku 4.5 ja Scalaa kootusti). 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.5.
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.5. 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 runko ¶ Metoditkin ovat funktioita.
MIDI
MIDI Musical Instrument Digital Interface, eräs sähköisten musiikkilaitteiden ohjelmoimiseen ja niiden väliseen viestintään määritelty standardi ¶ Ks. luku 1.4.
modulo-operaattori
modulo operator operaattori jakojäännöksen laskemiseen ¶ Scalassa ja monessa muussa ohjelmointikielessä modulo-operaattori on %. Ks. luku 1.7.
monikko
tuple usean keskenään mahdollisesti erityyppisen jäsenen yhdistelmä, jossa jäseniä on vakiomäärä ja jossa ne ovat määrätyssä järjestyksessä ¶ Kaksialkioista monikkoa sanotaan pariksi. Mm. tämän kurssin terminologiassa monikot eivät ole kokoelmia, mutta joskus niitä eräänlaisiksi kokoelmiksikin sanotaan. Monikon kullekin jäsenelle on määritellään staattinen tyyppi erikseen, toisin kuin kokoelmassa, jonka alkioilla on yhteinen tyyppi. Monikon sisältöä ei voi käydä läpi samalla tavoin kuin kokoelman ilman erillisiä muuntotoimenpiteitä. Scalassa→ monikot ovat muuttumattomia. Ks. luku 8.4.
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 toiminta, jonka seurauksena 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 roskan 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.6.
muuttujan rooli
role of a variable tyypillinen muuttujan käyttötapa; eräänlainen kuvaus tavasta, jolla muuttujaa käytetään ohjelmassa ¶ Ks. esim. luvut 2.6 ja 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. luvut 4.1 ja 10.2.
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. luvut 4.1 ja 10.2.
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 6.1. Tunnetaan myös nimellä lambdafunktio.
nimetön parametri
anonymous parameter alaviivalla merkitty nimeämätön parametrimuuttuja Scalan lyhennetyissä funktioliteraaleissa ¶ Ks. luku 6.1.
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 12.3.
None
None Option-tyyppinen yksittäisolio, joka ei sisällä yhtään tietoalkiota ¶ Ks. luku 4.2 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. Niiden käyttöä usein vältetään Scala-ohjelmoinnissa. Ks. luvut 4.1, 4.2 ja 11.2.
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. luvut 4.1 ja 4.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 3.5 ja satunnaislukujen siemen.
näkymä
view 1) sovelluksen osa, joka näkyy käyttäjälle; käyttöliittymä; 2) (erityisesti:) käyttöliittymän se osa, joka esittää aihealueen mallin käyttäjälle ¶ Jälkimmäisessä, suppeammassa merkityksessä näkymä erotetaan sekä aihealueen mallista että niistä käyttöliittymän osista, jotka reagoivat käyttäjän toimiin ja päivittävät mallia; ks. Model–View–Controller Wikipediassa. Ks. myös View.
näkyvyys
visibility ohjelman osan ominaisuus, joka kuvaa sen käyttöaluetta ¶ Voidaan esimerkiksi sanoa, että private on "näkyvyysmääre" ja että luokkaan yksityiseksi määritelty muuttuja "näkyy" vain kyseisen luokan sisällä.
O1Library
O1Library tämän kurssin tarpeisiin laadittu ohjelmakirjasto ¶ Monet kurssin esimerkkiohjelmat hyödyntävät tätä kirjastoa. Se sisältää työkaluja, joilla voi mm. laatia yksinkertaisia kuviin perustuvia graafisia käyttöliittymiä sekä tuottaa MIDI-ääntä kätevästi. Valittuja osia O1Librarystä esitellään tämän oppimateriaalin luvuissa. Kirjastosta on myös dokumentaatio, ja Scalaa kootusti -sivulla on lyhyt johdanto sen graafisiin työkaluihin.
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ä, johon voi lisäksi liittyä 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 muulla tavoin ilmaisemiseen tarkoitettu kieli ¶ Ohjelmointikieliä usein kirjoitetaan tekstimuotoon, mutta esim. ns. visuaalisessa ohjelmoinnissa ohjelma esitetään ainakin osin diagrammeina tai kuvina.
ohjelmointiparadigma
programming paradigm ohjelmoinnin suuntaus; tapa lähestyä ja ratkaista ohjelmointiongelmia ¶ Ks. luvut 2.1 ja 10.2. Tällä 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. Ohjeita ohjelmointityylistä kirjataan tyylikäytännöiksi.
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 10.2. Scala on puhdas olio-ohjelmointikieli: kaikki tieto esitetään olioina (ks. luvut 4.5 ja 5.1). 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 toimenpiteitä 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.5). 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 parametri tai 1 + 1. Scalassa operaattorinotaatiota voi käyttää tietyissä yhteyksissä pistenotaation sijaan; ks. luku 4.5 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 4.2. 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 funktio
local function funktio, joka on määritelty toisen funktion rungossa ja jota voi käyttää vain tuon ulomman funktion sisältä ¶ Ks. esim. luvut 6.3 ja 11.2 ja vrt. paikallinen muuttuja. Ks. myös sulkeuma.
paikallinen muuttuja
local variable funktion sisään vain tuon funktion omaa käyttöä varten 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 nimetty kokonaisuus, joka sisältää joukon ohjelman osia ¶ Esimerkiksi Scala-ohjelman osat ryhmitellään yhteen tai useampaan 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.3 ja 1.5. Ks. myös Scala API ja pakkausolio.
pakkausolio
package object itsenäinen yksittäisolio, joka kuvaa pakkauksen ja jonka jäsenet muodostavat tuon pakkauksen sisällön ¶ Ks. luku 4.5.
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 palauttavat Unit-arvon merkkinä siitä, ettei merkityksellistä palautusarvoa ole. Scala-funktion palautusarvo on sen lausekkeen arvo, joka funktiokutsun aikana evaluoidaan viimeiseksi (ellei funktion suoritus keskeytynyt ajonaikaiseen virheeseen, jolloin palautusarvoa ei synny). 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 12.3.
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.3, 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. (Äskeinen pätee tavallisesti, kun evaluointi on tiukkaa, mutta väljässä evaluoinnissa paramerilausekkeiden evaluointia lykätään.) Ks. myös parametriluettelo, tyyppiparametri ja argumentti.
parametriarvo
argument arvo, joka saadaan evaluoimalla parametrilauseke ¶ Parametriarvoja välitetään funktiokutsua vastaavaan kehykseen parametrimuuttujiin; ks. luvut 1.3, 1.6 ja 1.7. Myös termiä "argumentti" käytetään samasta asiasta.
parametrilauseke
argument lauseke, joka kirjoitetaan funktiokutsulausekkeeseen ja joka evaluoimalla tuotetaan parametriarvo ¶ Ks. luvut 1.3, 1.6, 1.7 ja 7.1. 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 5.5).
parametrimuuttuja
parameter (variable) paikallinen muuttuja, joka on määritelty puumerkissä ¶ Ks. luku 1.7. Parametrimuuttujan arvoksi tallentuu parametriarvo funktiokutsun alkaessa (ainakin tavallisesti; ks. kuitenkin by name-parametri). Scalassa parametrimuuttujat ovat aina val-muuttujia. (Scala-kielen virallisessa termistössä 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, jossa on tasan kaksi jäsentä ¶ Pareja voi käyttää esimerkiksi hakurakenteissa 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. Ks. luku 1.8 ja erityisesti luku 8.4.
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 7.3. 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.2.
Pic
Pic O1Library-kirjastossa kuvien esittämiseen määritelty luokka ¶ Ks. esim. luvut 1.3, 2.3, ja 2.5 sekä luokan dokumentaatio.
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 ja muuttujia; 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 7.2 ja 7.3 ja vrt. abstrakti luokka ja yliluokka. Piirreluokat määritellään Scalassa sanaa trait sanan class sijaan käyttäen. Tämän 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.
pinokehys
stack frame ks. kehys
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 ja 4.5 sekä kurssin tyyliopas. Vrt. operaattorinotaatio.
poikkeus
exception eräistä ajonaikaisista virheistä käytetty nimitys
poikkeustenkäsittely
exception handling ajonaikaisten virheiden havaitseminen ja niihin reagoiminen ¶ Ks. luku 12.2 sekä try, catch ja finally.
Pos
Pos O1Library-kirjastossa kaksiulotteisten koordinaattien kuvaamiseen määritelty luokka ¶ Ks. esim. luvut 2.5 ja 2.8 sekä luokan dokumentaatio.
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; joissakin muissa sovelluskehittimissä samantapaisesta asiasta käytetään muuta termiä. Projekti on ohjelmointiympäristöön 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 10.2 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 1) vaikutuksellinen funktio; 2) (joskus nimenomaan:) sellainen vaikutuksellinen funktio, joka ei palauta arvoa tai palauttaa vain sisällöttömän yksikkötyyppisen arvon
pseudokoodi
pseudocode ihmislukijalle tarkoitettu ainakin jossain määrin ohjelmointikieltä muistuttava tekstimuotoinen kuvaus algoritmista tai ohjelmasta ¶ Ks. esim. luku 2.5. 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 funktio, joka on paitsi vaikutukseton myös riippumaton ohjelman tilasta ja palauttaa jokaisella kutsukerralla saman arvon, kunhan parametriarvot ovat samat ¶ Esimerkiksi muuttuvatilaisen olion metodi voi olla vaikutukseton (jos se ei muuta olion tilaa) muttei silti puhdas (jos sen palautusarvo riippuu olion muuttuvasta tilasta). Puhdasta funktiota kutsuva lauseke on referentiltään läpinäkyvä.
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. 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. Puumerkin tunteminen riittää funktion kutsumiseen teknisessä mielessä; lisäksi on tietysti syytä tuntea funktion tarkoitus ja semantiikka. 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 3.1 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.
rakentaja
constructor sama kuin konstruktori
rakenteellinen rekursio
structural recursion rekursion muoto, jossa tietorakenteen (kuten luokan) määrittelystä viitataan tuohon määrittelyyn itseensä ¶ Ks. luvut 2.6 ja 11.2. Esimerkiksi henkilöluokan määrittelyyn voidaan kirjata henkilön vanhemmat, jotka myös ovat henkilöitä. Rekursiivisen rakenteen käsittelyyn sopivat usein sellaiset rekursiiviset kutsut, jotka kohdistetaan vähitellen pienenevään osaan olemassa olevasta rakenteesta.
refaktoroida
refactor muokata ohjelmaa tai ohjelman osaa muuttamatta sen olemassa olevaa toiminnallisuutta ¶ Ks. esim. luvut 2.8, 7.4 ja 9.1. Refaktoroinnilla pyritään ohjelman laadun parantamiseen, esimerkiksi ohjelman jatkokehityksen helpottamiseen.
referentin läpinäkyvyys
referential transparency lausekkeen ominaisuus, jolla tarkoitetaan, että lausekkeen voi yhtä hyvin korvata sen arvolla muuttamatta ohjelman merkitystä ¶ Ei siis ole ohjelman tuottaman tuloksen kannalta merkityksellistä, evaluoidaanko referentiltään läpinäkyvä lauseke kerran, useasti vai ei kertaakaan, kunhan lausekkeen arvo saadaan selville. Referentin läpinäkyvyys edellyttää, että lausekkeessa kutsutaan vain vaikutuksettomia ja muutenkin puhtaita funktioita. Tämä ominaisuus voi tehdä ohjelmista helpommin luettavia, muokattavia ja tehokkaita ja on keskeinen erityisesti funktionaalisessa ohjelmoinnin. Ks. luku 10.2.
rekursiivinen kutsu
recursive call funktiokutsu, jossa tietystä funktiosta käsin kutsutaan tuota samaa funktiota ¶ Ks. rekursio ja luku 11.2.
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.2 ja vrt. iteraatio. Ks. myös rakenteellinen 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", ja 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 8.3. Joissakin muissa ohjelmointikielissä vastaavaa käskyä tulee käyttää kaikissa sellaisissa funktioissa, jotka palauttavat arvon.
RGB
RGB värien esitysmuoto, jossa kukin väri kuvataan punaisen (R), vihreän (G) ja sinisen (B) valon yhdistelmänä ¶ Kukin kolmesta komponentista on luku, joka kertoo, paljonko yhdistelmässä on tuota väriä. Ks. luku 5.2.
rooli
role ks. muuttujan rooli
roska
garbage tietokoneen muistiin varastoitu tieto, johon sen varastoinut ohjelma 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 roskan 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; Scalan ja tämän kurssin termistöllä siis 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 3.5.
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 Usein kysyttyjä kysymyksiä -sivulla. Scala-kielisiä ohjelmia ajetaan usein JVM-virtuaalikoneessa mutta kääntäminen JavaScriptiksi on myös mahdollista.
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 3.1. 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. luvut 3.1 ja 3.4. Scaladoc-dokumenteissa kuvataan eritoten ohjelman osien julkiset rajapinnat. Scala API on kuvattu Scaladoc-dokumentein. Monille muillekin ohjelmointikielille on vastaava työkalu kuten 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 sijoituskäskyksi. 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 8.3. 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 11.3). 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 ja 3.3 ja kurssin tyyliopas.
sivuvaikutus
side effect tilaa muuttava toimenpide, vaikutus ohjelman tilaan ¶ Ilmaisua käytetään erityisesti funktionaalisen ohjelmoinnin yhteydessä, jossa vaikutuksellisia funktioita 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 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 luokka, joka kuvaa sellaisia Option-tyyppisiä olioita, jotka sisältävät yhden tietoalkion ¶ Ks. luku 4.2 ja vrt. None. Some on Optionin aliluokka; ks. luku 7.3.
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 4.1 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ää ja tarkastaa 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 7.2 ja 7.3 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 tarkastaa 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 4.1.
sulautettu järjestelmä
embedded system tietotekninen järjestelmä, jolla on rajattu, suhteellisen suppea-alainen tarkoitus ¶ Esimerkiksi pankkiautomaatit ja monet robotit ovat sulautettuja järjestelmiä, samoin modernit autot. Vrt. yleiskäyttöinen tietokone ja ks. luku 1.1.
suljettu luokka
sealed class (or trait) luokka, jolle ei voi määritellä alityyppejä muualla kuin sen kanssa samassa kooditiedostossa ¶ Scalassa luokka suljetaan sanalla sealed. Ks. luvut 7.2 ja 7.3.
sulkeuma
(lexical) closure rakenne, johon sisältyy funktion määrittely sekä pääsy tiettyihin tuota funktiota ympäröivässä kontekstissa määriteltyihin muuttujiin ¶ Ks. luku 6.3.
suodin
filter (kuvankäsittelyssä:) toiminto, joka suorittaa tietyn muunnoksen kuvalle tai kuvan osalle ¶ Esimerkiksi harmaasävysuodin tuottaa annetusta värikuvasta version, jossa kaikki pikselien värit ovat enemmän tai vähemmän kirkkaita harmaan sävyjä. Sanoilla "suodin" ja "filter" on tietotekniikassa muitakin merkityksiä; esimerkiksi Scalassa on kokoelmia käsittelevä korkeamman asteen metodi nimeltä filter.
suorittaa
execute toimia ohjelman määräämällä tavalla; ajaa
suppea tekoäly
narrow AI tekoäly, joka toimii kapeaksi rajatulla erikoisalueella ¶ Suppea tekoäly voi olla erikoistunut esimerkiksi kielen kääntämiseen, hakutulosten parantamiseen, auton ajamiseen tai kasvojen tunnistamiseen kuvista. Vastakohta: yleinen tekoäly. Heikko tekoäly tarkoittaa suunnilleen samaa.
Swing
Swing eräänlainen graafisten käyttöliittymien ohjelmoimiseen tarkoitettu kirjasto ¶ Swingejä on useita: tämänniminen kirjasto kehitettiin alun perin Java-kielen yhteyteen, mutta myös Scalassa on samanniminen kirjasto (joka rakentuu Java-version varaan). Ks. luku 12.3. Ks. myös O1Library.
symbolinen konekieli
assembly (language) ohjelmointikieli, jossa konekielisiä käskyjä suoraan vastaavat käskyt on esitetty symbolisessa muodossa, yleensä tekstinä
syntaksi
syntax 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.4. 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 3.6. Esimerkkejä syntaktisesta sokerista Scalassa ovat mm. ilmentymämuuttujien määritteleminen konstruktoriparametrien yhteyteen (luku 2.4), laskutoimituksia ja sijoituksia yhdistelevät operaattorit kuten += (luku 3.6), erilaiset funktioliteraalit (luku 6.1) ja for-silmukat (luvut 5.3 ja 6.2).
syöte
input ohjelman käsiteltäväksi jostakin lähteestä välitetty tieto ¶ Ks. luvut 2.7 ja 12.2 ja ks. myös input/output. Syötettä on esimerkiksi sovelluksen käyttäjän näppäimistöllään ohjelmalle välittämä tieto. Jotkin ohjelmat vastaanottavat syötettä tiedostoina; ks. esim. luku 4.5. Myös käyttäjän toimista seuraavat käyttöliittymätapahtumat voidaan lukea eräänlaiseksi syötteeksi.
säiliö
container muuttuja, jota käytetään kokoelman muokkaamiseen ¶ Yksi muuttujien rooleista. Ks. luku 4.1.
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 graafisissa käyttöliittymissä. 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. luvut 2.8 ja 12.3.
tapahtumankäsittelijä
event handler ohjelman osa, esimerkiksi funktio, joka määrittelee, mitä tietynlaisen tapahtuman sattuessa tulee kyseisessä ohjelmassa tapahtua ¶ Tapahtumankäsittelijä voi esimerkiksi sisältää sen ohjelmakoodin, joka suoritetaan, kun käyttäjä painaa tiettyä nappulaa ohjelman käyttöliittymässä.Tapahtumankäsittelijä kytketään yleensä tapahtumankuuntelijaan; ks. luvut 2.8 ja 12.3.
tapausluokka
case class Scala-ohjelmaan case-sanaa käyttäen määritelty luokka, jolle tulee implisiittisesti määritellyksi eräitä ominaisuuksia ¶ Tapausluokissa ei sinänsä ole mitään sellaista, mitä ei voisi luokalle muutoinkin määritellä, mutta case-sana on helppo tapa lisätä luokkaan tietyt ominaisuudet. Näihin ominaisuuksiin kuuluvat mm.: 1) tapausluokan ilmentymän voi "purkaa osiinsa" kätevästi match-käskyyn kirjatussa tapauksessa (luku 4.3); 2) tapausluokasta voi luoda ilmentymän ilman new-sanaa (koska luokalla on automaattisesti kumppaniolio ja sillä apply-tehdasmetodi); 3) tapausluokkien toString-metodi on muiden olioiden oletusarvoista toString-toteutusta havainnollisempi.
taulukko
array eräänlainen muuttuvatilainen mutta kooltaan muuttumaton kokoelma, jonka alkiot ovat indeksien mukaisessa järjestyksessä ¶ Ks. luku 11.1 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 5.1.
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.2.
tekoäly
artificial intelligence (AI) 1) (perinteisesti:) mm. tietojenkäsittelytiedettä ja psykologiaa yhdistelevä tutkimusalue, joka pyrkii mallintamaan ihmismieltä ja keinotekoisesti jäljittelemään sitä esimerkiksi tietokoneohjelmissa; 2) (nykyään arkikielessä ja muutenkin:) lähes mikä tahansa sovellus, jonka toiminta luo (nyky)ihmiselle vaikutelman älykkyydestä tai sälyttää koneelle tehtäviä, jotka perinteisesti on hoitanut ihminen ¶ Jälkimmäisessä merkityksessä tekoälykäs ohjelma ei monesti lainkaan pyri ihmismäiseen ajatteluun. Monet nykyään tekoälyksi kutsutut ohjelmat perustuvat koneoppimiseen. Tekoäly jaotellaan monesti suppeaan ja yleiseen tai heikkoon ja vahvaan. Ks. luku 7.1.
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.
tekstikonsoli
text console ympäristö, johon ohjelman tuloste ilmestyy näkyviin tekstimuodossa ja josta jotkin ohjelmat myös lukevat näppäimistösyötettä ¶ Moneen ohjelmointiympäristöön sisältyy tekstikonsoli; esimerkiksi Eclipsessä on sellainen. Scala-ohjelman println-käskyt tyypillisesti tulostavat tekstikonsoliin. Joidenkin ohjelmien käyttöliittymä toimii kokonaan tekstikonsolissa eikä ole graafinen; ks. esim. luku 2.7.
tekstitiedosto
(plain) text file tiedosto, jonka sisältämä data on tarkoitettu tulkittavaksi (vain) kirjoitusmerkeiksi ¶ Ks. luvut 4.5, 5.2 ja 12.2.
testaus
testing ohjelman tutkiminen virheiden ja muiden ongelmien havaitsemiseksi; erityisesti: ohjelman tai sen osien suorittaminen ajonaikaisten ja loogisten virheiden havaitsemiseksi ¶ Yksinkertaisimmillaan ohjelmaa, funktiota tai luokkaa voi testata koekäyttämällä sitä valituilla parametriarvoilla tai syötteillä. Määrätietoisemmassa ohjelmistokehityksessä laaditaan usein ns. yksikkötestejä, joilla ohjelman eri osia voi testata järjestelmällise, toistuvaan ja ainakin osin automatisoituun testaukseen; tähän on olemassa aputyökaluja, joita käsitellään jatkokursseilla.
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 3.1.
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 ohjelmia ¶ Tietotekniset 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. Funktiot voidaan luokitella vaikutuksellisiin ja vaikutuksettomiin sen perusteella, vaikuttavatko ne ohjelman tilaan. Olio-ohjelmassa olioilla on kullakin oma tila (ks. esim. luku 2.1), ja olio voi olla joko muuttuvatilainen tai tilaltaan muuttumaton; olioiden tilat ovat osa koko ohjelma tilaa; Jotkin ohjelmointiparadigmat eroavat toisistaan ratkaisevasti siinä suhteessa, miten tilaa ja tilanmuutoksia mallinnetaan.
tilapäissäilö
temporary muuttuja, jota käytetään väliaikaisesti apuna tietyn algoritmin toteutuksessa ¶ Yksi muuttujien rooleista; ks. luku 2.6.
tiukka
strict lausekkeet vähintään kerran evaluoiva ¶ Ks. luku 7.1. Tämä adjektiivi kuvaa erästä tapaa, jolla lausekkeita voidaan evaluoida. Tiukasti evaluoitu parametri on parametri, jonka arvon määräävä lauseke evaluoidaan vähintään kerran riippumatta siitä, käytetäänkö tuota arvoa funktion suorituksen aikana todella. Tiukasti evaluoitu kokoelma on kokoelma, jonka kaikki alkiot kerätään talteen muistiin riippumatta siitä, tullaanko jokaista niistä käyttämään. Useimmissa ohjelmointikielissä evaluointi on tiukkaa. Näin on lähtökohtaisesti myös Scalassa: parametrit ovat tiukasti evaluoituja by value -parametreja sikäli kun ei toisin määritellä, ja yleisimmät kokoelmat (vektorit, listat, hakurakenteet ym.) ovat tiukkoja. Vastakohta: väljä.
toString
toString (Scala-kielessä:) metodi, jonka tehtävänä on palauttaa merkkijonomuotoinen kuvaus oliosta ¶ Ks. luku 2.5. 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 kutsujan 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 3.2 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.6), tai viimeisimmästä kokoelman alkiosta, joka on käyty läpi (luku 5.3).
tyhje
whitespace character whitespace-merkki
tyhjä merkkijono
empty string merkkijono, jossa ei ole yhtään merkkiä eli jonka pituus on nolla ¶ Tyhjä merkkijonokin on kuitenkin olemassa oleva merkkijono (Scalassa String-tyyppinen olio) toisin kuin null-viittaus. Ks. luku 3.6.
tyylikäytäntö
style convention ohjeisto siitä, millaista ohjelmointityyliä suositaan ¶ Tyylikäytännöillä pyritään mm. parantamaan ohjelmien luettavuutta. Eri ohjelmointikielille on yleensä omat tyylikäytäntönsä, ja samallekin kielelle on yleensä useita vaihtoehtoisia; esimerkiksi eri yrityksillä voi olla omat suosituksensa tai -määräyksensä. Ohjelmointi 1:n tyyliopas kuvaa erään tyylikäytännön.
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 tyypitys 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ä. Monissa staattisesti tyypitetyissä ohjelmointikielissä (esim. Java) esimerkiksi muuttujien ja palautusarvojen tyypit on aina kirjoitettava ohjelmakoodiin tyyppimäärittelyin. Dynaamisesti tyypitetyissä kielissä (esim. Python) tyyppimäärittelyjä ei (tavallisesti) kirjoiteta lainkaan. Scalassa tyyppimäärittelyjä on aina luvallista kirjata koodiin eksplisiittisesti, 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ä. Tapauksesta riippuen tyyppimäärittelyjen vapaaehtoinen kirjaaminen Scala-koodiin auttaa kääntäjää tuottamaan selkeämpiä virheilmoituksia tai parantaa koodin luettavuutta. Monissa yhteyksissä on hyvä ajatus merkitä tyypit ainakin Scala-luokkien julkisille jäsenille.
tyyppiparametri
type parameter eräiden luokkien ja metodien vaatima lisämääre, jolla täsmennetään, millaisesta tietotyypistä on kyse ¶ Esimerkiksi Scala-ohjelmassa monia alkiokokoelmia luodessa on välitettävä tyyppiparametri, joka kertoo kokoelman alkioiden staattisen tietotyypin; ks. esim. luvut 1.5, 4.2 ja 7.4. 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 3.4 ja 7.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. myös staattinen tyypitys.
tyyppiyhteensopiva
conformant, type compatible (tietotyypeistä:) yhteensopiva siten, että yhden tyyppisiä 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 11.3.
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 4.2. Unit-arvoa käytetään mm. merkkinä siitä, ettei funktiolla ole merkityksellistä palautusarvoa. Scalan Unit-literaalin voi kirjoittaa tyhjinä kaarisulkeina: ().
vahva tekoäly
strong AI tekoäly, joka käsittelee ja yhdistelee laajoja kokonaisuuksia eikä ole sidottu tiettyyn sovellusalueeseen kuten heikko tekoäly ¶ Tarkoittaa melkein samaa kuin yleinen tekoäly, minkä lisäksi vahvaan tekoälyyn saatetaan liittää jonkinasteinen ihmismäinen tietoisuus ja ehkä tunteitakin. Vahva tekoäly on satumaisen kunnianhimoinen tavoite; kuitenkin ne nykyään olemassa olevat käytännön sovellutukset, joita tekoälyksi kutsutaan, edustavat heikkoa tekoälyä.
vaikutuksellinen funktio
effectful function funktio, joka kutsuttaessa muuttaa ohjelman tilaa ainakin joissakin tapauksissa ¶ Ks. luvut 1.6, 1.7 ja 10.2, ja vrt. vaikutukseton funktio. Luemme vaikutuksellisiksi esimerkiksi sellaiset funktiot, jotka muuttavat puskurin sisältöä, jonkin olion ilmentymämuuttujan arvoa tai tulostavat merkkejä tietokoneen ruudulle. Toisaalta esimerkiksi pelkkää lausekkeiden evaluoimista, ajan kulumista laskentaan, tai kutsupinon käyttöä ei tavallisesti lueta vaikutukseksi. Yleisemmin sanoen vaikutuksellisiksi luetaan sellaiset funktiot, joiden suorittaminen on ohjelman oikean toiminnan kannalta merkityksellistä, vaikka palautusarvo jo tiedettäisiinkin (luku 10.2). Vaikutukselliset funktiot voivat olla hyödyllisiä, vaikka eivät palauttaisikaan merkityksellistä arvoa; toisaalta ne eivät ole referentiltään läpinäkyviä. Vaikutuksellisia funktioita sanotaan myös "sivuvaikutuksellisiksi".
vaikutukseton funktio
effect-free function funktio, joka ei kutsuttaessa koskaan vaikuta ohjelman tilaan ¶ Ks. luvut 1.6, 1.7 ja 10.2 ja vrt. vaikutuksellinen funktio. Tällaisia funktioita sanotaan myös "sivuvaikutuksettomiksi". Vaikutuksettomia funktioita kutsutaan niiden palautusarvon määrittämiseksi. Ne muistuttavat koulumatematiikasta tuttuja funktioita. Osa vaikutuksettomista funktioista on puhtaita. Ks. myös referentin läpinäkyvyys.
vakio
constant muuttuja, jonka arvo on tiedossa jo ennen ohjelma-ajoa ja joka edustaa ohjelmassa pysyvästi tätä arvoa ¶ Ks. luku 2.6 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 for-silmukassa käytetyt tuoreimman säilyttäjät ovat Scalassa val-muuttujia. Kaikki val-muuttujat eivät ole vakioita, mutta vakiot ovat kyllä yksi val-muuttujien käyttötarkoitus.
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, match, case ja for; koko luettelo löytyy Scala-koosteemme lopusta. 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.4.
vektori
vector eräänlainen muuttumaton kokoelma, jonka alkiot ovat indeksien mukaisessa järjestyksessä ¶ Ks. luku 4.1. 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 3.2 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.
View
View O1Library-kirjaston tarjoama luokka graafisten käyttöliittymien kuvaamiseen ¶ View-olio tarjoaa näkymän johonkin aihealueen mallina toimivaan olioon. Sille voi määritellä tapahtumankäsittelijöitä. Ks. luvut 2.7, 2.8 ja 3.5 sekä luokan dokumentaatio; Scalaa kootusti -sivulla on myös esimerkki.
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, defect 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ä.
virta
stream eräänlainen muuttumaton, laiska alkiokokoelma, joka sopii käytäväksi läpi järjestyksessä ¶ Virrat ovat käytännössä laiskasti evaluoituja listoja. Scalassa niitä kuvaa luokka Stream. Koska virtoja ei evaluoida tiukasti, ne voivat olla päättymättömiä eikä niitä läpikäyvän korkeamman asteen metodin tai silmukan toistokertojen määrää ole välttämätöntä määrittää ennalta. Ks. luvut 7.1 ja 8.3. Sanalla "virta" on tietojenkäsittelyssä myös useita muita enemmän tai vähemmän samankaltaisia merkityksiä.
virtuaalikone
virtual machine virtuaalinen tietokone; tietokoneen kaltaisesti toimiva ohjelma, jonka avulla voidaan ajaa (tietynlaisia) toisia ohjelmia ¶ Ks. luvut 5.2 ja 11.3. 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.
virtuaalinen
virtual keinotekoinen, matkittu, simuloitu, todellista muistuttava tai jokin näiden yhdistelmä; ikään kuin — vaikkei varsinaisesti tai virallisesti — tietynlainen ¶ Ks. myös virtuaalikone.
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 subclass, 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 superclass, 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.
väljä
non-strict lausekkeita valikoivasti evaluoiva ¶ Ks. luku 7.1. Tämä adjektiivi kuvaa erästä tapaa, jolla lausekkeita voidaan evaluoida. Väljästi evaluoitu parametri on parametri, jonka arvon määräävä lauseke evaluoidaan ainoastaan, mikäli tuota arvoa todella tarvitaan ohjelma-ajon aikana; by name -parametrit voivat olla väljiä. Väljästi evaluoitu kokoelma puolestaan on kokoelma, jonka alkioista ei muodosteta kuin ne, joita käytetään; tällaisia kokoelmia ovat Scalassa esimerkiksi virrat. Vastakohta: tiukka. Ks. myös laiska evaluointi.
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 8.3 ja vrt. do-silmukka.
WETWET
WETWET DRY-periaatteen rikkominen ¶ Sanoista write everything twice write everything twice.
whitespace
whitespace tyhjää vaaka- tai pystytilaa kuvaavat, "näkymättömät" kirjoitusmerkit ¶ Esimerkiksi välilyöntejä ja rivinvaihtomerkkejä sanotaan whitespaceksi. Mm. suomennosta "tyhje" on ehdotettu, mutta vakiintunutta suomenkielistä termiä ei ole.
yhtenäisen osoituksen periaate
uniform access principle eräiden ohjelmointikielten syntaksin suunnittelussa käytetty periaate, jonka mukaan tiettyä ohjelman osaa hyödyntävän ohjelmoijan on voitava käyttää yhtä ja samaa merkintätapaa kaikkien tuon osan tarjoamien palveluiden käyttämiseen noiden palvelujen mahdollisesti erilaisista toteutustavoista riippumatta ¶ Erityisesti: olion käyttäjän on voitava kutsua parametritonta metodia ja selvittää jäsenmuuttujan arvo keskenään samanlaisella merkinnällä. Ks. luvut 2.6 ja 7.3.
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 5.4.
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 5.1 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 3.1 ja vrt. julkinen.
yleinen tekoäly
general(-purpose) AI tekoäly, joka käsittelee ja yhdistelee laajoja kokonaisuuksia eikä ole sidottu tiettyyn sovellusalueeseen kuten suppea tekoäly ¶ Vahva tekoäly tarkoittaa melkein samaa. Yleinen tekoäly on satumaisen kunnianhimoinen tavoite; kuitenkin ne nykyään olemassa olevat käytännön sovellutukset, joita tekoälyksi kutsutaan, edustavat suppeaa tekoälyä.
yleiskäyttöinen tietokone
general-purpose computer tietokone, jolla ei ole tiettyä sovelluskohdetta vaan joka on suunniteltu käytettäväksi moniin erilaisiin tarkoituksiin ¶ Esimerkiksi tyypilliset pöytätietokoneet ja kannettavat tietokoneet 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 7.3. Luokalla voi olla lukuisia välittömiä aliluokkia mutta (Scalassa) vain yksi välitön yliluokka. Vrt. piirreluokka.

Palaute

Tekijät

Tämän oppimateriaalin kehitystyössä on käytetty apuna tuhansilta opiskelijoilta kerättyä palautetta. Kiitos!

Kierrokset 1–13 ja niihin liittyvät tehtävät ja viikkokoosteet on laatinut Juha Sorva.

Kierrokset 14–20 on laatinut Otto Seppälä. Ne eivät ole julki syksyllä, mutta julkaistaan ennen kuin määräajat lähestyvät.

Liitesivut (sanasto, Scala-kooste, usein kysytyt kysymykset jne.) on kirjoittanut Juha Sorva sikäli kuin sivulla ei ole toisin mainittu.

Tehtävien automaattisen arvioinnin ovat toteuttaneet Riku Autio, Jaakko Kantojärvi, Teemu Lehtinen, Timi Seppälä, Teemu Sirkiä ja Aleksi Vartiainen.

Lukujen alkuja koristavat kuvat ja muut vastaavat kuvituskuvat on piirtänyt Christina Lassheikki.

Yksityiskohtaiset animaatiot Scala-ohjelmien suorituksen vaiheista ovat suunnitelleet Juha Sorva ja Teemu Sirkiä. Niiden teknisen toteutuksen ovat tehneet Teemu Sirkiä ja Riku Autio käyttäen Teemun toteuttamia Jsvee- ja Kelmu-työkaluja.

Muut diagrammit ja materiaaliin upotetut vuorovaikutteiset esitykset on laatinut Juha Sorva.

O1Library-ohjelmakirjaston ovat kehittäneet Aleksi Lukkarinen ja Juha Sorva. Useat sen keskeisistä osista tukeutuvat Aleksin SMCL-kirjastoon.

Opetustapa, jossa käytämme O1Libraryn työkaluja (kuten Pic) yksinkertaiseen graafiseen ohjelmointiin on saanut vaikutteita tekijöiden Flatt, Felleisen, Findler ja Krishnamurthi oppikirjasta How to Design Programs sekä Stephen Blochin oppikirjasta Picturing Programs.

Oppimisalusta A+ on luotu Aallon LeTech-tutkimusryhmässä pitkälti opiskelijavoimin. Pääkehittäjänä toimii tällä hetkellä Jaakko Kantojärvi, jonka lisäksi järjestelmää kehittävät useat tietotekniikan ja informaatioverkostojen opiskelijat.

Kurssin tämänhetkinen henkilökunta on kerrottu luvussa 1.1.

Joidenkin lukujen lopuissa on lukukohtaisia lisäyksiä tähän tekijäluetteloon.

../_images/imho15.png
Palautusta lähetetään...