============================================================================ 1. ============================================================================ Tarkastaja: Olli Lahti Selkeä ja ytimekäs selitys tuo kaksi pistettä jokaisesta kohdasta. Yhden pisteen on saanut, kun on kertonut käsitteen keskeisimmän merkityksen kohtuullisen ymmärrettävästi. Tähdellä (*) merkittyjen lisätietojen muistamista ei ole vaadittu, mutta niiden mainitseminen on toki luettu ansioksi. === luokan lataaminen === Kun suoritetettava ohjelma viittaa ensimmäisen kerran johonkin luokkaan, kyseessä oleva luokka ladataan muistiin. Tällöin luokan staattinen kalusto asetetaan alkutilaan: luokkamuuttujat saavat alkuarvonsa [* ja mahdolliset staattiset alustuslohkot suoritetaan]. === olion luonti === Aina kun suoritettava ohjelma luo olion eli luokan ilmentymän new- operaatiolla, kyseessä olevan olion oma kalusto asetetaan alkutilaan: ensin ilmentymän muuttujat saavat alkuarvonsa ja sitten suoritetaan jokin konstruktori. // Muistin varaaminen tapahtuu siis hyvän aikaa ennen konstruktorin // suorittamista, mikä oli jäänyt joillekin hieman epäselväksi! // Muistinhallinta ei Javassa kuitenkaan ole niinkään ohjelmoijan vastuulla. === metodin kuormittaminen (overloading) === Metodilla ei voi olla vaihtelevaa määrää vaihtelevan tyyppisiä parametreja, mutta samannimisiä ja eri otsikolla varustettuja metodeita saa määritellä yksitellen 'käsin'. Kuormittaminen on saman metodinimen käyttöä samassa nimiavaruudessa siten, että metodit eroavat toisistaan parametriensa lukumäärän ja/tai tyyppien suhteen. Kääntäjä tunnistaa todellisista parametrista, mitä metodia missäkin kutsussa tarkoitetaan. === metodin korvaaminen (overriding) === Metodin korvaaminen (eli syrjäyttäminen) tarkoittaa uuden toteutuksen antamista peritylle metodille aliluokassa. Korvaavan metodin on oltava samantyyppinen, samanniminen ja samaparametrinen. [* Ilmentymämetodi voi korvata vain ilmentymämetodin, luokkametodi voi korvata vain luokkametodin. Korvattua medodia pystyy edelleenkin käyttämään ilmauksen super avulla.] === pakkaus (package) === Pakkaus on käytännön ohjelmistotuotannon väline erilaisten ohjelmatiedostojen hallintaan (eikä sinänsä liity olio-ohjelmointiin). Javassa ohjelmatiedostot eli class-tiedostot kerätään pakkauksiin, jotka voidaan edelleen järjestää puumaiseen tiedostorakenteeseen. Yhteen pakkaukseen on tapana kerätä luokkia (ja rajapintaluokkia), jotka jollakin tavoin liittyvät toisiinsa. Pakkauksia voidaan tarvittaessa jäsennellä alipakkauksiksi. Pakkaus muodostaa "nimiavaruuden", jonka nimien näkyvyys pakkauksen ulkopuolelle voidaan sallia tai kieltää. Java-kielen valmiit välineet on toteutettu pakkauksina: esimerkiksi pakkaus java muodostuu alipakkauksista java.lang, java.util, java.io, ... === poikkeus (exception) === Poikkeus on virhetilanne tai muu epätavallinen tilanne ohjelman suorituksessa, kuten nollalla jako, tiedostovirhe tai viittaaminen taulukon alkioon, jota ei ole. Java sisältää valmiit työkalut näiden poikkeusten käsittelyyn ja virhetilanteista toipumiseen tai hallituun kaatumiseen. [* Poikkeukset ovat luonnollisesti luokkia, ja kaikkien poikkeusten yliluokka on Exception.] Poikkeuksia on kahta lajia: unchecked (esim. taulukon väärä indeksointi) ja checked (esim. tiedostonkäsittelyssä luokkakirjastoja käyttäen). Unchecked-poikkeus keskeyttää oletusarvoisesti ohjelman suorituksen, ellei ohjelmoija erityisesti halua käsitellä virhetilannetta jollakin tavoin. Checked-poikkeus vaatii ohjelmoijaa varautumaan poikkeukseen. [*Varautuminen tapahtuu joko delegoimalla virhe kutsuvalle ohjelmanosalle (throws-määre virheen delegoivan metodin otsikossa) tai käyttämällä try-catch -rakennetta, jossa try-lohkoon sijoitetaan 'riskialtis' toimenpide ja catch-lohko suoritetaan joss toimenpide synnytti poikkeuksen.]