- Ohj2, luennot 13-14, 1.4.-2.4.2005
- Ohjelman synty
- Esimerkit: äänestys, huone ja asunto
- Motivaatio: harjoitusta vaihe 5:een
- Pääteohjaukset poikkeuksellisesti aamulla, vastaukset käsitellään luennon yhteydessä aamupäivällä
- Äänestys
- ks. ohj4
- ongelma jaettu osiin: sovelluslogiikka eristetty Vaihtoehdot-luokkaan
- Huone ja Asunto
- ks. ohj6
- Esimerkki "luonnollisesta" koostamisesta
- Asunto3:ssa huoneet ovat taulukossa
- Javan taulukoista ja merkkijonoista
- Materiaali: moniste, luku 13
- Esimerkit: java-taul -hakemisto
- taulukon esittelyssä voidaan käyttää periaatteessa mitä tahansa lausekkeita, esim. luoda taulukkoon olioita new:lla
- muista: 2-ulotteinen matriisi on taulukko riveistä. indeksointi x[rivi][sarake]
- yleisemmin: 3-ulotteinen taulukko koostuu 2-ulotteisista taulukoista jne.
- kokeile esim. moniulotteisen taulukon tietyn elementin length-attribuuttia
- älä anna syntaksin hämätä: esittelyssä int[2][3] on int[3]-taulukoita 2 kappaletta! (voitaisiin ajatella siis esittelynä "(int[3])[2]"
- vastaavasti 3-ulotteinen taulukko int[1][2][3] voitaisiin tulkita muodossa "((int[3])[2])[1]" tai jopa "(int[2][3])[1]" (int-taulukon taulukon taulukko tai 2-ulotteisen int-taulukon taulukko. :-)
- jälkimmäisen alustus javalla esim: int[][][] i = {{{1,2,3},{4,5,6}}}
- Javassa taulukoiden käyttö on poikkeusten ja rajatarkistusten ansiosta helppoa ja turvallista (joskin C-koodia hitaampaa), C:ssä sai helposti aikaan muistin ylivuodon...
- C:ssä moniulotteinen taulukko oli tosiasiassa 1-ulotteinen, jolloin "ulottuvuumuunnokset" molempiin suuntiin mahdollisia, javassa tämä on piilotettu käyttäjältä (ei osoitinaritmetiikkaa)
- javassakin voidaan toki tarvittaessa luoda 1-ulotteinen taulukko, jolle kirjoitetaan moniulotteiset käsittelyfunktiot
- java.util.Arrays-luokassa hyödyllisiä apufunktioita
- Kertaus: crc, jäsenrekisterin runko
- Kuvasta toimivaksi ohjelmaksi
- Materiaali: moniste, luku 12
- Lähtökohta: toteutetaan luokkarungot CRC-kortteihin tehtyjen suunnitelmien mukaisesti, testataan osissa
- vinkkejä:
- ohjeet kerhon esimerkkihakemistossa
- Esim: "bottom-up": ensin Jäsen, sitten Jäsenet, sitten Kerho, sitten yhdistetään nykyiseen vaihe 3:n Näyttöön
- Käyttöliittymä voidaan pitää aluksi minimaalisena päätesyötön osalta (esim. Jäsenen tietoja ei kysytä, vaan tehdään automaattisesti yksinkertainen "testijäsen", jota lisätään
- Vaiheessa 5 ei vaadita eri tieto-yksiköiden yhteistyötä (esim. kirjasto-ohjelmassa toteutettaisiin erikseen lainaajat, kirjat ja lainat, mutta tietyn lainaajan lainoja ei tarvitse vielä osata hakea)
- Luokat on kuitenkin syytä rakentaa niin, että yhteistyön lisääminen myöhemmässä vaiheessa on mahdollisimman helppoa!
- Käytännössä relaatiomallia käytettäessä "kerho"-hallintaluokka vastaa yhteistyöstä, eli yksittäiset tietorakenteet eivät myöhemmässäkään vaiheessa "tiedä" toisistaan.
- Jos ei käytetä relaatiomallia, jää hieman enemmän itse mietittäväksi...
- Huom! Ei käyttöliittymätoimintoja (erityisesti näyttöön tulostamista tai tietojen kysymistä) "tietokantaluokkiin"! Pyri pitämään käyttöliittymä vain Näytössä (tai mahdollisissa menuluokissa)
- jos tietokantaluokka tulostaa, tulostetaan ainakin yleiseen virtaan, ei missään tapauksessa System.out:iin
- Vastaavasti: pidä tietorakenteiden käsittely Näyttöluokassa mahdollisimman "kevyenä": kaikki, minkä Kerho pystyy tekemään itse, delegoidaan Kerholle.
- Kerho-ohjelman rungon läpikäynti
- Jäsen
- Huom. kentät on syytä indeksoida jatkossa - vaihe 5:ssa yksittäisiä kenttiä ei juuri käytetä käyttöliittymästä
- Jäsenet
- itse toteutettu taulukkorakenne - jos on useampia tietorakenneluokkia, voidaan niissä käyttää myös valmiita rakenteita
- Tässä versiossa taulukko on staattinen (vaaditaan myöhemmissä vaiheissa)
- Muita mahdollisia (suht. helposti itse toteutettavia) rakennevaihtoehtoja: linkitetty lista tai M-M-suhteiden mallinnukseen puurakenne
- Huom. myös poisto vaaditaan vaihe 5:ssä (toteutustapoja useita)
- Mahd. useamman taulun yli menevät tarkistukset voi jättää vaihe 6:een
- Kerho
- Näyttö
- Vaiheessa 5 toimittava (oletus)jäsenen (ja muiden yksittäisten tietoyksiköiden) lisäys ja soveltuvin osin poisto (esim. id:n tai indeksin mukaan)
- hakutoiminnoista riittää koko tietokannan yksittäisten tietorakenteiden läpikäynti
- Esimerkki
- Kerho, vaihe 5 (koko kerho-ohjelma pakattuna materiaalihakemistossa)