------------------------------------------------------------------------------- Ohjelmoinnin perusteet, 13.11.2002 tehtävä 3 / Jaakko Nenonen ------------------------------------------------------------------------------- 3: "Olio, mikä hemmetin olio? Ja mitä ihmeen kapselointia?", kysyy ystäväsi kuunneltuaan tarinoitasi Ohjelmoinnin perusteet -kurssilta. Ystäväsi on ohjelmoinut sen verran, että hän tuntee yksinkertaiset muuttujat, lausekkeet, lauseet, metodit ja parametrit, mutta olio-ohjelmoinnista hän ei tiedä yhtään mitään. Auta ystävääsi ymmärtämään, mitä oliot ovat, miten niitä ohjelmoidaan ja käytetään, mitä hyötyä ja iloa niistä voi olla. Laadi siis asiasta kirjallinen selitys (maksimipituus on 1 konseptiarkki). Muista että esimerkit ja kuvat auttavat oppimisessa. Vastauksen arvioinnissa otetaan huomioon selostuksen ajateltu lukija. Älä siis kirjoita tarkastajalle, joka jo osaa oliot, kirjoita tuolle ystävälle! (12 pistettä) ------------------------------------------------------------------------------- Pisteiden määräytyminen ------------------------------------------------------------------------------- 1) "Olio, mikä hemmetin olio?" Seuraavista asiosta jaettiin 1-2 pistettä kustakin kohdasta. Yksi piste tuli jos mainitsi asiasta, kaksi jos selvensi asiaa jollain esimerkillä: + Olio on kokonaisuus toisiinsa liittyvää tietoa ja toimintaa + Olioilla voidaan mallintaa reaalimaailman asioita + luokassa on olion piirustukset + olio on luokan ilmentymä; luokan tekeminen ei riitä vaan olio täytyy myös luoda + luokan toteutus ja luokan ilmentymien käyttö eristetään toisistaan + kuva luokasta (piirustuksista) ja luokan ilmentymistä + Olion kentät kuvaavat olion tilaa + konstruktori asettaa olion alkutilaan + aksessorimaininnat + staattinen/ei-staattinen selitys + näkyvyysalueiden public/private mainitseminen ja selittäminen + kukin olio saa omat kopiot luokan kentistä + olioiden 'yksityisyys', ts. oliot toimivat toisistaan riippumattomasti + 'älykäs tietotyyppi' + 'Olio roikkuu langanpäässä' ja ko. sanonnan hyvä selitys + Olion katoaminen viimeisen viitteen myötä (roskienkerääjä) + esimerkkikuva kahdesta edellisestä + lukematon määrä muita hyviä havaintoja tai ideoita, joita en enää muista Olio-ohjelmoinnin hyödyt. Myös näistä sai 1-2 pistettä riippuen oliko käyttänyt esimerkkiä tukena vai ei: + Kirjoitustyön väheneminen + olioiden uudelleenkäyttö + ohjelmoinnin hajautettavuus + suurten kokonaisuuksien hallinta Esimerkkikoodi kannatti vääntää. Siitä sai hyvin pisteitä (1p. per kohta): + privatemuuttujien esittely (jos private unohtui, ei saanut pistettä) + konstruktori + aksessorit (1-2 pistettä riippuen kuinka hyvin aksessori testaili arvoja) + Olion luonti: Oliotyyppi olio = new OlioTyyppi(...); + Olion metodin käyttö (pisteilmaisu) 2) "mitä ihmeen kapselointia?" Kapselointi oli tärkein asia tehtävässä. Jos unohti kertoa kapseloinnista, sai maksimissaan puolet tehtävän maksimipisteistä Kapseloinnista jaettiin pisteitä seuraavasti. + idea: olion tietorakenteet (kentät) ovat kapseloitu olion sisään, eikä niihin suoraan voi päästä käsiksi -> 2p + olion tietorakenteisiin pääsee käsiksi ainoastaan olion metodien (aksessorien) kautta -> 1p + olion vertaaminen koneeseen, vivut ja kahvat ovat aksessoreja -> 1p + erityisen hyvistä kone-esimerkeistä kuten kännykästä, autosta, radiosta ja televisiosta, joissa toiminta on piilossa kuoren sisäpuolella, sai 1-2 lisäpistettä + hyöty: "konetta voi käyttää ilman, että tietää kuinka se on toteutettu ja mitä kuoren alla tapahtuu" -> 1-2p + hyöty: luokan ilmentymiä (koneita) voidaan käyttää vain niin kuin luokan tekijä (koneen piirustusten tekijä) on tarkoitettanut, eikä käyttäjä voi rikkoa konetta (turvallisuus) 1-2p. Aika moni oli muistanut kapseloinnin idean, mutta unohtanut mainita sanaa kapselointi missään vaiheessa. Tällöin annoin maksimissaan 10 p. tehtävästä (tosin mitään pisteitä ei vähennetty jos ei saavuttanut 10 pistettä). Eihän kuviteltu ystävä osaisi tällöin yhdistää mitenkään kapselointia tietojen piilottamiseen ja kysymys "mitä ihmeen kapselointia?" jäisi hänelle täysin auki! ---------------------------------------------------------------------------------------- Pisteiden vähennykset ---------------------------------------------------------------------------------------- Virheistä ja ristiriitaisuuksista vähennettiin yksi piste. Kuitenkin niin ettei samanlaisesta virheestä sakotettu kuin kerran. Seuraavien kohtien unohtaminen aiheutti sen, että tehtävästä sai korkeintaan tietyn maksimimäärän pisteitä: - Ei mainintaa kentistä, konstruktoreista ja aksessoreista, max 8p - Ei esimerkkejä, max 10p - Ei mainittu kapselointia mutta sen idea (tiedon piilotus) esitelty kuitenkin, max 10p - Ei edes ideaa, max 7p. - Ei sanottu sanaakaan viittaustyypeistä, max 11p. - Pelkkä luettelo eri asioita, Max 8p. (Näitä oli onneksi vain muutama) Täysiin pisteisiin vaadittiin selkeä kokonaisuus, jonka olioista tietämätön ymmärtäisi. -------------------------------------------------------------------------------- Seuraavista asioista EI jaettu pisteitä: -------------------------------------------------------------------------------- - konstruktoreiden ja aksessoreiden kuormittaminen - Periminen. Tästä oli moni kirjoittanut, mutta aihe kuuluu vasta Java-kurssille vaikka olio-ohjelmointiin liittyykin. - Olio-ohjelmoinnin vertaaminen proseduraaliseen ohjelmointiin - "esimerkkiä luokasta voit katsoa tehtävästä 2", Minulla ei ollut tehtävän kaksi ratkaisuja, joten tästä ei ollut mitään hyötyä. - Taulukoista ja järjestysalgortimeista puhuminen sen varjolla että taulukot ovat olioita - String-metodien esittäminen siksi että String on olio - muodolliset ja todelliset parametrit - Lauseiden ja lausekkeiden väliset erot - Platoninen dialogi kirjoittajan ja kuvitellun ystävän välillä. Kaunokirjallisista ansoista ei valitettavasti jaettu pisteitä, vaikka ne piristivätkin tarkastustyötä! ;) - "Valitettavasti en osaa auttaa sinua ystäväiseni, mutta sen muistan, että Arto sanoi luennolla, että tentissä saa ainakin yhden pisteen jos muistaa että oliot ovat luokan ilmentymiä." Tästä yhden lauseen pituisesta vastauksesta ei saanut kaikesta huolimatta pistettäkään. - "olioista on se hyöty, että opiskelijan hiukset harmaantuvat ennenaikaisesti ja välillä itsestäkin tuntuu, että pistäisi roikkua langan päässä" ------------------------------------------------------------------------------- Pisteiden jakautuminen ------------------------------------------------------------------------------- Pisteet lukumäärä yht. 12 ***** ***** ***** * 16 11 ***** ***** ***** ***** ***** ***** * 31 10 ***** ***** ***** ***** ***** ***** * 31 9 ***** ***** ***** *** 18 8 ***** ***** ***** ***** ***** ***** ***** ***** ***** * 46 7 ***** ***** ***** ***** ***** ***** *** 33 6 ***** ***** ***** ***** **** 24 5 ***** ***** ***** ***** 20 4 ***** 5 3 ***** ***** **** 14 2 *** 3 1 ***** ** 7 0 ***** 5 vastanneita: 253 keskiarvo: 7.6