viikon 3 kotitehtävät - mluukkai/OTM2012 GitHub Wiki
Viikon 3 laskarit pidetään salissa B221.
Tässä olevat tehtävät tehdään etukäteen. Laskareissa tehdään lisäksi paikanpäällä ryhmissä täällä oleva tehtävä
Tehtävät 1-3 liittyvät olio- ja luokkakaavioihin eli toisen luennon kalvoihin sekä kolmannen luennon kalvoihin 4-15. Tehtävät 4 ja 5 liittyvät liittyvät sekvenssikaavioihin, eli luennon 3 kalvoihin 39-59.
Monopoli ks. esim. http://fi.wikipedia.org/wiki/Monopoli_ on varmasti kaikkien tuntema lautapeli. Tehdään alustava luokkakaavio, joka kuvaa peliä. Kaaviota tarkennetaan ehkä myöhemmin. Tässä vaiheessa kyseessä voisi olla oikeastaan minkä tahansa nopalla pelattavan lautapelin karkean tason luokkakaavio. Oikeassa monopolissahan on rahaa, taloja, hotelleja ym, mutta unohdetaan ne nyt.
Pelin kuvaus siinä tarkkuudessa, mikä meitä nyt kiinnostaa, on seuraavassa:
Monopolia pelataan käyttäen kahta noppaa. Pelaajia on vähintään 2 ja enintään 8. Peliä pelataan pelilaudalla joita on yksi. Pelilauta sisältää 40 ruutua. kukin ruutu tietää, mikä on sitä seuraava ruutu pelilaudalla. Kullakin pelaajalla on yksi pelinappula. Pelinappula sijaitsee aina yhdessä ruudussa. (Pelinappula siis etenee ruudusta toiseen pelin kuluessa.)
Voit olettaa, että luokat ovat pelilauta, ruutu, pelinappula, pelaaja, noppa ja itse kokonaisuutta mallintava monopoliPeli.
Huomaa että isompia luokkamalleja kannattaa tehdä pala kerrallaan. Piirrä ensin vaikkapa kaikki luokat paperille. Mieti yhteyksiä esim. kahden luokan välillä kerral laan. Jos aikaansaannos ei ole hyvä, heitä paperi roskiin ja aloita alusta. Älä vaivu epätoivoon.
Tarkastellaan seuraavaa yliopiston kursseihin, niiden esitietovaatimuksiin, kurssitoteutuksiin sekä opettajiin liittyvä tilannetta.
Kurssilla voi olla esitietovaatimuksina useampi muu kurssi. Välttämättä esitietovaatimuksia ei ole. Kurssilla on opintopistemäärä ja nimi. Kurssin (esim. Ohjelmoinnin jatkokurssi) tiettyä luennointikertaa (esim. otm-syksy11, otm-syksy12, . . . ) sanotaan kurssitoteutukseksi. Kurssitoteutukseen kuuluu 1 tai 2 koetta, kokeilla on aika ja paikka. Kurssitoteutuksella on alkamis- ja päättymisaika, luentoajat ja luentopaikka. Kurssitoteutus sisältää harjoitusryhmiä. Harjoitusryhmällä on kokoontumisaika ja paikka. Jokaisella ryhmällä on ohjaajana yksi tai useampi henkilökunnan jäsen. Myös kurssitoteutuksen luennoijana on yksi henkilökunnan jäsen. Henkilökunnan jäsen voi olla usean ryhmän ohjaajana tai usean kurssitoteutuksen luennoijana.
Mallinna tilanne luokkakaaviona. Voit olettaa, että luokat ovat kurssi, kurssitoteutus, koe, laskariryhmä ja henkilökunnan jäsen. Muut tekstissä mainitut käsitteet eivät siis ole luokkia vaan yhteyksiä, yhteyden rooleja tai attribuutteja.
Piirrä edellisen tehtävän luokkakaavion mukainen oliokaavio, joka kuvaa tilanteen kurssien Ohjelmoinnin perusteet, Ohjelmistotekniikan menetelmät ja Johdatus tietojenkäsittelytieteeseen sekä niiden tämän syksyn toteutusten osalta. Kaikkia laskariryhmiä ei tarvitse oliokaaviossa huomioida.
Kuvaa sekvenssikaaviona viimeviikon laskarien tehtävän 5 main-metodin suoritus
Muista, että sekvenssikaaviossa tulee tulla ilmi kaikki mainin suorituksen aikaansaamat olioiden luomiset ja metodien kutsut!
Seuraavassa on annettu pieni huoneistojen lämpötilojen hallintaa simuloiva Java-ohjelma. Takaisinmallinnetaan ohjelmakoodi UML:ksi. Piirrä ohjelmaa kuvaava luokkakaavio sekä sen main-metodin suoritusta kuvaava sekvenssikaavio.
public class Simulator {
public static void main(String[] args) {
Room r = new Room();
Thermostat t = new Thermostat(r));
t.stabilizeAt(20);
}
}
public class Room {
private int temperature = 0;
public int getTemperature() {
return temperature;
}
public void addTemperature(int t) {
temperature = temperature + t;
}
}
public class Thermostat {
private Sensor sensor;
private Heater heaterA;
private Heater heaterB;
public Thermostat(Room r) {
sensor = new Sensor(r);
heaterA = new Heater(r);
heaterB = new Heater(r);
}
public void stabilizeAt(int degrees) {
int measured = sensor.getReading();
while ( measured < degrees ) {
heaterA.heatTheRoom();
heaterB.heatTheRoom();
measured = sensor.getReading();
}
}
}
public class Sensor {
private Room room;
public Sensor(Room r) {
room = r;
}
public int getReading() {
return room.getTemperature();
}
}
class Heater {
private Room room;
Heater(Room r) { room = r; }
void heatTheRoom() { room.addTemperature(5); }
}
Viime viikon laskareissa teimme luokkakaavion ohjelmoinnin jatkokurssin ensimmäisen viikon tehtävästä “Tavara, Matkalaukku ja Lastiruuma”. Jatketaan saman ohjelman mallintamista. Kuvaa sekvenssikaaviona alla olevan main-metodin suoritus:
public class Main {
public static void main(String[] args) {
Tavara kirja = new Tavara("Aapiskukko", 2);
Tavara puhelin = new Tavara("Nokia 3210", 1);
Tavara tiiliskivi = new Tavara("tiiliskivi", 4);
Matkalaukku matinLaukku = new Matkalaukku(10);
matinLaukku.lisaaTavara(kirja);
matinLaukku.lisaaTavara(puhelin);
Matkalaukku pekanLaukku = new Matkalaukku(10);
pekanLaukku.lisaaTavara(tiiliskivi);
Lastiruuma lastiruuma = new Lastiruuma(1000);
lastiruuma.lisaaMatkalaukku(matinLaukku);
lastiruuma.lisaaMatkalaukku(pekanLaukku);
System.out.println("Ruuman matkalaukuissa on seuraavat tavarat:");
lastiruuma.tulostaTavarat();
}
}