Ohjelmointitehtävät

Kurssiin kuuluu kuusi arviolta 25 tunnin ohjelmointitehtävää, jotka opettavat ohjelmoinnin ja Javan perusteita.

Sisällys

Ohjelmointiharjoitus 1: Javan perusrakenteet

Ensimmäisessä Javatehtävässä olin aika hukassa. Vanhat periaatteet tunkivat väkisin lauseohjelmoinnin syvälle haudatun arkun kannesta läpi ja haittasivat olio-ohjelmointiin orientoitumistani. Tätä suuremmaksi ongelmaksi tosin huomasin tehtävänannon lukemisen (ja noudattamisen!) vaikeuden. Muutama tehtävänannon metodi jäi toteuttamatta ja se vaikutti ilmeisen paljon arvosanaan. Myös joitain pienempiä huolimattomuusvirheitä jäi koodiin. Kiitosta sain Math-luokan käytöstä sekä taulukon käytöstä nimen arpomisessa useammasta vaihtoehdosta (tässä oli oikeasti hyötyä lauseohjelmointikokemuksesta!)

Tuotokseni

Arvosana: 3

Ohjelmointiharjoitus 2: Olennon liikkuminen maailmassa

Toisen Java-tehtävän alussa tuntui, että osasi jo kaiken mahdollisen Javan perusteista. Just. Noh, paluu maan pinnalle tapahtui nopeasti esimerkiksi iteroivan for-lauseen johdolla (minulla oli suuria vaikeuksia käsittää, kuinka helppo se on). Taulukot minulle olivat jo ennestään tuttuja, samoin switch-lauseet ja vakiot. Samoin olioiden väliset suhteet sekä this- ja super-notaatiot olivat tuttuja, syypäänä näiden tuntemiseen tosin oli ensimmäinen javatehtävä.

Plussaa sain toimivasta oikea käsi seinässä -reitinhausta ja hyvästä kommentoinnista. Miinusta tuli muutamasta (lähinnä huolimattomuus)virheestä, esimerkiksi siitä, että poistaOlento-metodi ei kutsunut asetaSijainti-metodia, kuten olisi ollu tarpeen. Lisäksi "suuntaMerkkijonona() metodin pitäisi palauttaa null "Kelaa sun laatuas" tekstin sijaan" (Jesse). Taas näkee, mitä seuraa toimimattomasta koodista äärettömästi frustroituneena koodaamisesta. :)

Tuotokseni

Arvosana: 4

Ohjelmointiharjoitus 3: Erilaiset olennot, poikkeukset, rajapinnat

Edellisen tehtävän arvosanasta uutta puhtia saaneena suuntasin kohti seuraavaa Java- tehtävää, jossa tarkoituksena oli laajentaa maailmaa uusilla olennoilla sekä tutustua hienoisesti poikkeuksiin ja rajapintoihin. Tässä tehtävässä pelkäsin eniten poikkeusten luomista ja heittämistä, jotka paljastuivat kuitenkin hyvin helpoiksi ja intuitiivisiksi toiminnoiksi.

Itse tehtävä meni minulla hienosti. Mitään erityisen hankalaa en onnistunut siitä löytämään. Muutama minulle niin tyypillinen huolimattomuusvirhe löytyi taas, esimerkiksi todennäköisyydessä yksi < väärinpäin.

Jarno kuvasi ratkaisuani seuraavasti: "Loistava suoritus. Virheitä olisi voinut vielä vähän karsia, mutta hyvä kommentointi pelasti pitkälti. Rivityksessä olisi myös hieman parantamista. Voisit myös siivota koodista ennen palautusta turhat tarkistusrivit, jotka on toki kommentoitu. Tällaisten rivien siivoaminen selkeyttäysi itse koodia ja tekisi siitä siistimmän näköisen. Huolellisuutta myös, ettei tule tuollaisia turhia virheitä."

Tuotokseni

Arvosana: 5

Pelaajan ohjaaminen, vuorotteleva peli

Neljännessä tehtävässä keskityttiin pelimoottorin tekoon ja ohjatun pelaajan lisäämiseen kehiin. Itse pelimoottori oli kohtuullisen yksinkertainen homma, piti lisätä olennot toteuttamaan Vuorollinen-rajapintaa ja pelimoottorin pitämään kirjaa olennoista ja antamalla näiden pelata vuoronsa peräkkäin.

Ohjatun pelaajan tekeminen oli huomattavasti aikaavievämpää: komentoja oli melkoinen läjä ja joidenkin teko vaati jopa hieman ajattelua. Huolimattomuus komentojen tulkitsemista tehdessä kostautui, eikä ohjelmani tykännyt kaikista virheellisistä komennoista. Tyhmä virhe, osa kuitenkin oli tarkastettu mallikkaasti ja tarkoitus oli kyllä tarkistaa kaikki. Niitä oli ilmeisesti vaan niin paljon, ettei koodaamisen jälkeen huomannut osan puuttuvan. Plussaa sain anteeksiantavasta komentojen tulkinnasta skandien ja isojen/pienien kirjaimien kanssa sekä muuttujien ja vakioiden käyttämisestä taikalukujen sijasta. Silti, arvosana pieni pettymys hyvän nousujohdanteisen käyrän jälkeen.

Tuotokseni

Arvosana: 4

Graafinen käyttöliittymä

Viidennessä tehtävässä päästiin graafisen käyttöliittymän maailmaan, tehtävänä oli Miinaharava-tyyppisen pelin toteutus. Tekniikkapuolelta tarvittavia taitoja olivat Swingin (ja kuuntelijoiden) käyttö.

Ratkaisussani sain kiitosta (kerrankin) täysin tehtävänannon mukaan toimimisesta (olkoonkin, että minulla miinojen maksimimäärä oli ruutujen määrä -1, kun tehtävänannossa kehoitettiin sallimaan maksimissaan 50% ruuduista miinoitetuksi), pelin speksien komentoriviltäantamismahdollisuudesta ja hienosta voittotarkastuksesta (onMiina == onAvattu). Miinuksia olivat miinojen asettelun hämäryys (ihan oikeasti, se oli mielestäni selkeä!) ja kuuntelijan älyttömän pitkästä elseif-putkesta. Kommentointini oli kuulemma myös hyvää, samoin taikaluvuttomuus.

Tuotokseni

Arvosana: 5

Tulosten tallentaminen

Viimeisessä javatehtävässä otsikon vastaisesti tehtiin paljon muutakin kuin pelkkä tuloksien tallentaminen, joka olisi ollut helposti muutaman tunnin juttu. Tehtävässä piti siis mm. mitata peliaikaa, kehittää tulosten näyttäminen JTable-komponentin avulla ja tehdä ensimmäinen klikkaus turvalliseksi (siten, ettei ensimmäisellä klikkauksella voi osua miinaan)

Plussaa sain tulosten erottelusta vaikeustason mukaan, staattisen, yhteisen SimpleDateFormatin käytöstä, tulostaulukon virheellisen tiedostosyötteen catchauksesta ja kommentoinnista. Miinusta ropisi tulostaulukon järjestämisestä "säätämällä", tulostaulun otsikoiden asettamisesta vasta esitysvaiheessa, ei TableModelissa sekä vaikeustason ilmaisemisesta Point-oliona. Viimeinen tosin oli loogista, vaikeustasoni muodostui kahdesta elementistä, ruudukon koosta ja miinaprosentista, ja vaikeustason arvo on "koordinaatit" tässä vaikeustasotaulukossa.

Tuotokseni

Arvosana: 6

Loppuhöpinöitä ohjelmointitehtävistä

Ohjelmointitehtävät olivat hienosti rakennettuja; jokaisessa tehtäväpalautteessa annoin tehtävän mielenkiintoisuudelle vähintään arvosanan 4. Pientä negatiivista palautetta voisin antaa tehtävänannoista ja etenkin niiden muuttumisesta kesken kaiken. On toki ymmärrettävää, että joku asia kaipaa parannusta, selvennystä tai jopa korjausta, mutta silti jo ko. osan suorittaneita kohtaan menettely ei ole erityisen reilu. Itsehän "ehtii sitä viimeisenä päivänäkin" -miehenä en näistä hirveästi kärsinyt, mutta ymmärrän hyvin muiden ärtymyksen.