Ohjelmointiharjoitus 1
Ohjelmointiharjoituksen tarkoituksena on soveltaa
kahden ensimmäisen tapauksen ja 1. esseen yhteydessä
opittuja tietoja.
Tämän ohjelmointiharjoituksen maksimipistemäärä on 100, vaikka
tehtävien yhteispistemäärä on tätä suurempi. Läpäisyraja on 50
pistettä.
Osatehtävä 1.1 (max 20 pistettä)
Tässä tehtävässä toteutetaan esineitä kuvaava luokka
Thing.
-
Kopioi itsellesi tiedosto Main1.java, joka sisältää
pääohjelmaluokan Main1. Huomaa, että luokkatiedoston
nimi kirjoitetaan isolla alkukirjaimella.
-
Kopioi itsellesi tiedosto Thing.java, joka sisältää
luokan Thing. Tiedosto sisältää luokan rungon,
jota tehtävässä pitää täydentää.
-
Kirjoita luokka Thing seuraavien ohjeiden mukaisesti:
Luokkaan kuuluvilla oliolla on muuttuja
- String name, esineen nimi merkkijonona
Luokalla on seuraavat metodit:
- Thing(String n), luontimetodi (constructor), jolle annetaan
parametrina olion nimi
- String getName(), esineen nimen palauttaminen
- void print(), esineen tietojen tulostaminen. Tässä riittää
pelkkä nimen tulostaminen (Vihje).
-
Käännä tiedostot Main1.java sekä Thing.java.
Suorita syntynyt ohjelma. Mitä ohjelma tulostaa?
Osatehtävä 1.2 (max 20 pistettä)
Tässä tehtävässä täydennetään edellistä luokkaa uudella toiminnalla.
-
Kirjoita Thing-luokkaan uusi metodi setName(String n), joka asettaa
esineelle uuden nimen vanhan nimen tilalle.
-
Täydennä Main1-luokkaa siten, että asetat main-metodin lopussa
kirja-esineelle uuden nimen "Java-oppikirja" ja tulostat
sen jälkeen kirjan nimen book.print()-metodin avulla.
-
Käännä tiedostot Main1.java sekä Thing.java.
Suorita syntynyt ohjelma. Mitä ohjelma nyt tulostaa?
Osatehtävä 1.3 (max 30 pistettä)
Tässä tehtävässä toteutetaan yksinkertainen radiota kuvaava
luokka Radio, joka on luokan Thing aliluokka.
Radiolla ei ole muuta toimintoja kuin virran kytkeminen päälle
ja pois sekä kuunneltavan kanavan asettaminen.
-
Kopioi itsellesi tiedosto Main2.java, joka sisältää
pääohjelmaluokan Main2 sekä tiedosto
Radio.java, joka sisältää
luokan Radio rungon.
-
Kirjoita luokan Thing aliluokka Radio.
Voit itse päättää, mitä muuttujia luokkaan laitat, mutta
luokalla on oltava seuraavat metodit:
- Radio: luontimetodi (constructor), jolle annetaan
parametrina olion nimi. Aseta aluksi radio pois päältä ja
kanavaksi 1. (Vihje).
- powerOn: laita radio päälle
- powerOff: laita radio pois päältä
- isOn: jos radio on päällä, palauta
true, muuten false.
- getChannel: tämän hetkisen kanavan palauttaminen.
- setChannel: aseta radio annetulle kanavalle.
- print: tulosta radion tila, eli millä kanavalla
se on, ja onko virta päällä. Muista tulostaa myös esineen
nimi.
-
Käännä tiedostot Main2.java sekä Radio.java.
Suorita syntynyt ohjelma. Mitä ohjelma tulostaa?
Osatehtävä 1.4 (max 50 pistettä)
Tässä tehtävässä käsitellään yksinkertaistettua peliskenaariota,
joka koostuu huoneista, henkilöistä ja esineistä. Tässä
skenaariossa kussakin huoneessa voi olla ainoastaan yksi esine
ja yksi henkilö. Tehtävässä käytetään valmista huoneita
kuvaavaa luokkaa Room sekä edellä tekemääsi luokkaa
Thing. Tarkoituksena on toteuttaa luokka
Person, joka kuvaa henkilöä.
Sinun ei tarvitse muuttaa kumpaakaan luokkaa Room
tai Thing. Tarkoituksena on, että käytät niiden
valmiita metodeja hyväksi.
-
Kopioi itsellesi tiedosto
Main3.java, joka sisältää
pääohjelmaluokan Main3 sekä tiedosto
Room.java, joka sisältää
huoneluokan Room.
-
Kirjoita uuteen tiedostoon Person.java luokka
Person. Luokkaan kuuluvilla oliolla on muuttujat
- name: henkilön nimi merkkijonona (String)
- room: huone, jossa henkilö on
- thing: esine, jota henkilö mahdollisesti kantaa tai
null
Luokalla tulee lisäksi olla seuraavat metodit:
- Person: luontimetodi (constructor), jolle annetaan
parametrina henkilön nimi ja huone, jossa henkilö aluksi on
- getName: palauttaa henkilön nimen
- getRoom: palauttaa huoneen, jossa henkilö on
- moveTo: henkilö siirtyy parametrina annettuun huoneeseen
- getThing: palauttaa henkilön mahdollisesti
kantaman esineen; mikäli henkilö ei kanna esinettä,
palautetaan null
- pickUp: henkilö nostaa huoneessa mahdollisesti
olevan esineen kannettavakseen
- putDown: henkilö jättää mahdollisesti kantamansa esineen
huoneeseen, mikäli huoneessa ei jo ole esinettä
- print: henkilön tietojen tulostaminen
Huomaa seuraavat seikat. Ennenkuin henkilö yrittää siirtyä
uuteen huoneeseen, tulee tarkistaa, ettei huoneessa ole jo joku.
Samoin ennen kuin henkilö yrittää laskea jonkin esineen, on
tarkistettava, ettei huoneessa jo ole esinettä.
Kun henkilö siirtyy uuteen huoneeseen,
on päivitettävä muuttujan room sisältö. Tämän lisäksi on
huolehdittava siitä, että huoneiden vastaavia muuttujia person
tulee päivitettyä. Vastaavasti kun henkilö nostaa tai jättää
esineen, on huoneen muuttujia päivitettävä.
-
Käännä tiedostot Main3.java sekä Person.java.
Suorita syntynyt ohjelma. Mitä ohjelma tulostaa?
Harjoituksen palautus
Harjoitukset palautetaan jar-apuohjelmalla luotuina
paketteina. Seuraava Unix-komento luo jar-tiedoston harj1.jar
Java-tiedostoista Luokka1.java ja Luokka2.java.
jar cf harj1.jar Luokka1.java Luokka2.java
Jar-tiedoston sisällön voi katsoa komennolla:
jar tf harj1.jar
Valmis jar-paketti, joka sisältää KAIKKI harjoituksessa käytettävät
luokat (myös valmiit luokat) lähetetään sähköpostitse liitetiedostona
oman ryhmän tutorille. Kaikkien eri osatehtävien luokat palautetaan
samassa paketissa, eli lähetä vain yksi viesti.
Palautus on tehtävä viimeistään keskiviikkona 10.10 klo 16.00. Jos
palautus myöhästyy, arvosana laskee 10 pistettä / myöhästymispäivä.