wiki:k2014/demot/demo11
Last modified 3 years ago Last modified on 2014-07-10 11:48:23

Demot » Demo 11, 31.3.2014

English version

Palautus NETTIDEMOWWW-ohjelmalla. Tähdellä (*) merkitty ne tehtävät, jotka ehdottomasti kannattaa tehdä.

Testaaminen

Kaikki "Järkevästi" testattavissa olevat ohjelmat testattava automaattitestillä (JUnit tai ComTest). Jos testaa GUI-ohjelmia esim Lift-kirjastolla saa merkitä yhden lisäbonuspisteen. NettiDemoWWW:hen tämä "tilitetään" palauttamalla tiedosto guitest.txt johon kirjoitetaan mitkä tehtävä on testattu ja vähän mielipiteitä testaamisesta.

Ville V1

Tee JAVA Villestä tehtävät 8. Aliohjelmat 3: Rekursio.
1.4 Ville-tehtävien palautus NettiDemoWWW:llä.

Tehtävä 1*2. Valuutat

Kirjoita tekstipohjainen rahanvaihto-ohjelma, jossa on vakiotaulukko

 val.   kur.
+-----+----------+
|mk   |  1.0     |
|$    |  5.7     |
|EUROA|  5.94573 |
|SKr  |  0.6     |
+-----+----------+ 

ja jonka toiminta näyttäisi seuraavalta:

Määrä ja valuutta>10 Skr[RET]
10.00 Skr on 6.00 mk.
Määrä ja valuutta>2 EUROA[RET]
2 EUROA on 11.89 mk.
Määrä ja valuutta>loppu[RET]
Kiitos!

Saa tehdä suoraan myös graafisen version jos haluaa.

Tehtävä 3. Valuutat tiedostosta

Muuta edellinen ohjelma sellaiseksi, että valuuttataulukko luetaan tiedostosta.

Tehtävä 4. Listaa kaikki

Esimerkissä ListaaKaikki.java tulostetaan yhden hakemiston kaikkien tiedostojen nimet. Muuta esimerkkiä niin, että tulostetaan myös kaikkien alihakemistojen kaikkien tiedostojen nimet.

Tehtävä 5. Kutsuhierarkia

Esimerkiksi vaiheen 5.1 KerhoGui:n "Lisää jäsen" napin klikkaamisesta piirtää seuraava kutsuhierarkia kun ei merkitä systeemikirjaston kutsuja (System.out.println, rand, Mjonot yms., GUI-luokan kutsujen sisälle ei ole menty):

KerhoGui - klikataan Uusi jäsen
  KerhoGui.ActionUusiJasen.actionPerformed
    KerhoSwing.uusiJasen()
      Jasen() - parametriton konstruktori
      Jasen.rekisteroi()
      Jasen.vastaaAkuAnkka()
         HetuTarkistus.arvohetu()
         Jasen.vastaaAkuAnkka(hetu)
      Kerho.lisaa(jasen)
         Jasenet.lisaa(jasen)
      KerhoSwing.hae(nro)
         ComboBoxChooser.getSelectedIndex()
         KerhoSwing.setVirhe()
         ListBoxChooser.clear()
         Kerho.getJasenia()
            Jasenet.getLkm()
         Kerho.annaJasen(i)
            Jasenet.anna(i)
         Jasen.getTunnusNro()
         ListBoxChooser.add(nimi,jasen)
         ListBoxChooser.setSelectedIndex(index)

Kirjoita vastaava jäsennys omalle ohjelmallesi (ht vaihe 6), "Lisää jäsen" vastaavalle toiminnalle. Vapaaehtoinen lisäosa: Piirrä sitten (vaikka ihan käsin paperille) puumainen kuva, jossa kukin luokka on vain kerran ja aina nuoli luokasta joka kutsuu, siihen luokkaan jota kutsutaan. Näin saat kuvan, missä nähdään mikä ohjelman osa kutsuu mitäkin luokan aliohjelmaa/metodia. Tällaisia ohjelman osien riippuvuuksia voidaan kartoittaa myös mekaanisesti, eli on ohjelmia jotka tekevät valmiiksi näitä riippuvuuksia. Jos saadaan käsiteltäväksi valmis"iso" ohjelma, jota pitää korjata, voi tällaisten riippuvuussuhteiden etsimen olla järkevää ennen muutostöiden aloittamista. Näin päästään perille mikä muutos vaikuttaa mihinkä ohjelman osiin.

Tehtävä 6*. Funktion minimi

Kirjoita funktio funMin, jolle viedään parametrina minimoitava funktio-olio ja x:n vaihteluväli. Funktio palauttaa funktion "minimin". Katso mallia Integroi2.java.

Tehtävä 7&8. Sinin piirtäminen

Ohjelma joka piirtää sin(x) :n kuvaajan seuraavasti (automaattinen skaalaus y-akselille, funktion vaihto helpoksi, ks. Integroi2.java ja tehtävä 6):

Piirrän funktion sin(x)
Anna väli ja tiheys jolla piirretään (-5.00  5.00  0.50) >[ret]
                                           *
                                           *
                                       *
                               *
                     *
            *
     *
    *
       *
              *
                       *
                                 *
                                        *
                                           *
                                          *
                                   *
                          *
                *
        *
    *
    *

Pääohjelma malliksi

  public static void main(String[] args)  {
    double x1=-5,x2=5,dx=0.5,y1,y2; String s;
    FunktioRR f = new SinFun();

    System.out.println("Piirrän funktion sin(x)");
    s = Syotto.kysy("Anna väli ja tiheys jolla piirretään",
                    Mjonot.fmt(x1,4,2) + " " + Mjonot.fmt(x2,4,2) + " "
                    +  Mjonot.fmt(dx,4,2));
    StringBuffer sb = new StringBuffer(s);
    x1 = Mjonot.erota(sb,' ',x1);
    x2 = Mjonot.erota(sb,' ',x2);
    dx = Mjonot.erota(sb,' ',dx);

    y1 = funMin(f,x1,x2,dx);
    y2 = funMax(f,x1,x2,dx);

    piirra(f,x1,x2,y1,y2,dx);

  }

Tehtävä B1-2. Kunnollinen piirtäminen

Tee piirtämisestä kunnon graafinen versio. Pohjaksi käy esim. PiirtoMalli.java, PiirtoMalliSwing.java tai PiirtoMalliGraphics.java.

Tehtävä G1-2 Tangentin piirtäminen

Muuta graafinen versio sellaiseksi, että klikkaamalla kuvaa jossakin kohti, kuvaan piirretään tätä x:n arvoa vastaavaan kohtaan tangentti käyrälle.

Tehtävä G3-4 Graafinen astiapeli

AstiaPelin muuttaminen graafiseksi vaati olemassa oleviin koodeihin jonkin verran muutoksia. Alunperin olisi Astia -luokassa kannattanut maara-attribuutin kaikki käyttö tehdä vain setMaara– metodin kautta. Sitten tämä metodi olisi kertonut määrän muutoksesta kaikille siitä kiinnostuneille. Tällainen toteutus on luokissa (ks. Demo 7 vastaukset) Astia.java ja AstiaPeli.java. Näissä luokissa ei ole enää mitään grafiikkaan liittyvää, mutta valmius liittää peliin mitä tahansa toimintaa, joka tapahtuu astioiden määrän muuttuessa. Tiedostossa GraafinenAstiaPeli.java tällainen liitos on tehty GraafinenAstia-luokan olioihin. Piirrä tietorakennekuva GraafisenAstiaPeli:n tilanteesta kun ämpäristä on kerran kaadettu 8 litran astiaan ja sieltä 5 litran astiaan. Selitä miten astian kaatamisesta tieto siirtyy ”pylvääseen” (aja vaikka debuggerilla ja tutki miten kutsut menevät). Piirrä kuvaan seuraavien luokkien tai rajapintoja toteuttavat oliot ja niiden suhteen (kuka viittaa mihinkäkin).

Astia
AstiaPeli
GraafinenAstia
MaaraMuuttuu
GraafinenAstiaPeli