CODEONLINE Monni Oo- ja Java-harjoituksia Version 1.0
Revision History Date Version Description Author 25.10.2000 1.0 Initial version Juha Johansson Inspection History Date Version Inspectors Approved by Public Monni 2000 Page 2 (5)
Table of Contents 1. JOHDANTO...4 2. TYÖKALUT JA MENETELMÄT...4 2.1 KEHITYSTYÖKALUT...4 2.2 JAVA API...4 3. TEHTÄVÄ: PIENI PELIHALLI...4 Public Monni 2000 Page 3 (5)
Oo- ja Java-harjoituksia 1. Johdanto Tähän dokumenttiin kerätään pienet ohjelmointitehtävät, vinkit ja linkit, joiden avulla Monniprojektissa voi opiskella tai kerrata Java-kieltä ja olio-ohjelmointia. 2. Työkalut ja menetelmät 2.1 Kehitystyökalut Koetetaan keksiä, mistä saisi koteihin tavallisia tekstieditoreita ja komentoriviltä kutsuttavaa javakääntäjää paremman kehitysympäristön. Codeonlinessä olevaa ryhmän käyttöön varattua konetta voi mennä käyttämään, kun Mikko tai Kimmo on paikalla. 2.2 Java API Monni-projektissa käytetään Java-kielen yleisen (ja vähän laajennetunkin) sovellusohjelmointirajapinnan versiota 1.3, joka sisältyy Java 2 Platformiin (mikä hitto se sitten onkin). Seuraavasta linkistä löytyy koko API; hyödyllinen niin sille joka tietää mitä luokkaa ja metodia etsii kuin toivottavasti myös sille, joka tietää vain millaiseen ongelmaan etsii valmista ratkaisua: http://java.sun.com/j2se/1.3/docs/api/index.html Muuta siihen liittyvää voi metsästää osoitteen http://java.sun.com/j2se/1.3/ alta. Vanhempi API, versio 1.2: http://java.sun.com/products/jdk/1.2/docs/api/index.html Enemmän linkkejä (eo. mukaan lukien) kerätään kotisivuille, lisäksi Juha pistää palvelimelle ainakin yhden kotiin vietävän ilmaisen Java-oppaan (HTML- tai PDF, englanniksi) ja kukaties Sunin tutorialeja. 3. Tehtävä: Pieni pelihalli Ohjelman toiminta: Ruudulle tulostetaan pelien 1 ja 2 nimet ja käyttäjä valitsee jomman kumman. Pelit ovat pieniä, yksinkertaisia (vaikka kivi-paperi-sakset, jätkänshakki, laivanupotus) eikä ikkunagrafiikkaa kaivata, mutta niissä on voitava kerätä pistesaldoa. Tutummaksi toivon mukaan tulevat näin mm. olioiden instantiointi, attribuutit ja niiden käsittely, metodit, rajapinnat, Javan perustietotyypit, syntaksin eroja C ja C++:aan nähden, java API, javadoc sekä poikkeuskäsittely. Työohje: 1. Tee pääohjelma luokkaan GameHall. Luokan alussa instantioidaan pelioliot kohdassa 3 määritellyistä peliluokista ja talletetaan ne indekseillä 1 ja 2 (tai A ja B) joko java.util.vector- tai java.util.hashtable-luokan olioon, joka tallettaa rajapinnan Game täyttäviä olioita. Ainakaan jos et tunne hajautustaulua (hash table), käytä vektoria. Tämän jälkeen mennään silmukkaan, jossa tulostetaan käyttäjälle pelien valintanumerot/kirjaimet ja niiden kuvaukset. Kuvaukset haetaan peliolioilta itseltään metodilla getdescription. Luokka java.lang.system auttaa näppis- ja ruutui/o:ssa. Kun käyttäjä valitsee pelin, pääsilmukka käynnistää sen metodista playgame. Pelin päättymisen jälkeen pääsilmukka hakee pelaajan pistesaldon pelioliosta metodilla getscore ja tulostaa sen ruudulle (vaikka kommenttien kera). Sitten silmukka alkaa alusta. Pelaaja voi aina valita pelin sijaan exit, jolloin ohjelma päättyy. 2. Tee rajapinta Game. Rajapinnassa pitää olla kolme metodia: void playgame(), String getdescription() ja int getscore(). Public Monni 2000 Page 4 (5)
Pelien 1 ja 2 pitää toteuttaa rajapinta Game, ts. niitä on voitava aina käyttää siellä missä viitataan Game-rajapintaan ja sen tarjoamiin toimintoihin (metodeihin). 2. Tee luokat CrissCrossGame ja BattleShipGame tai mitä pelejä vain haluat. Niiden täytyy toteuttaa rajapinta Game, joten niissä on oltava ainakin em. kolme luokan ulkopuolelle näkyvää metodia. Jotta Java-syntaksi tulee tutuksi, käytä molemmissa kontrollirakenteita (if else, case, while, jne.) eli syötteestä tai satunnaisuudesta riippuvia vaihtoehtoisia pelinkulkuja. Muuta: Kun playgame() kutsutaan pääohjelmasta (valintasilmukasta), peli käynnistyy, tekee mitä nyt haluatkin ja päätyttyään palaa pääohjelmaan ilman paluuarvoa. Attribuutissa score (tyyppi int) on tallessa päättyneen pelin pistesaalis. Käytä toisessa luokassa javan exceptionia. Poikkeus voidaan heittää vaikkapa käyttäjän antamasta sääntöjen vastaisesta syötteestä, ohjelman voi jossain vaiheessa peliä antaa vahingossa viitata taulukkoon yli sen määritellyn koon tms. Jos ei muuta, pelin pitää ainakin tässä virhetilanteessa keskeytyä siististi (graceful death) ja palata päävalikkoon. Kokeile omien luokkien määrittelyä ja perintää, jos viitsit/ehdit. Interfacet tulevat olemaan todella tärkeä javan piirre Monni-projektissa, koetetaan päästä yhtä harjoitusta tutummaksi niiden kanssa. Mikään kysymys ei ole liian yksinkertainen tai tyhmä kysyttäväksi vaikkapa Juhalta tai Kimmolta. Public Monni 2000 Page 5 (5)