Ohjelmointi 2 2016 / Demo 4
Tähdellä (*) on merkitty ne tehtävät, jotka ehdottomasti kannattaa tehdä.
Viitteissä tyyliin "Luvun 7.5" noudatetaan luentomonisteen numerointia. Demoissa saa käyttää vapaasti aliohjelmapaketteja ohj2/ali. Hakemistossa on kirjaston käyttöohje.
Mitä palautetaan? Itse tehdyt tiedostot. Eli Javasta .java. Jos testit tehdään ComTestillä niin se generoi toisen Test.java tiedoston joka siis ei ole itse kirjoitettu ja tätä EI palauteta. Mutta jos testit tehdään JUnitilla ja ITSE kirjoitetaan tuo testitiedosto, niin silloin se toki palautetaan. .class -tiedostoja EI MISSÄÄN NIMESSÄ palauteta.
Huomaa että jos tehtävässä on linkki Document
, niin dokumentaatio pitää käydä tutkimassa jotta saa tehtävästä täydet pisteet.
Kun palautatte ohjelmatehtäviä, niin tarkistakaa että Java-tiedostot alkavat aina package JOTAKIN
. Testejä ei saa toimimaan niin hyvin ilman packagea ja tiedostossa oleviian aliohjelmiin ei pääse viittaamaan kunnolla jos ne eivät ole packagessa. Eclipsessä 1. operaatio aina projektin luomisen jälkeen on luoda ongelmaa kuvaava package
.
Pisteytyksestä
Pisteet aina niin, että yksi perustehtävä on yksi piste (jos tehty ja ohjelmatehtävä koneella testattu). Jos samassa tehtävässä on kaksi tehtävänumeroa, esim. 2*3, niin silloin siinä on kaksi tehtävää, eli pisteet 1+1. Jos yhden pisteen tehtävässä on kohdat a ja b, niin vastaavasti yksi kohta on 0.5 pistettä. Jos tehtävässä on vaikka 4 selvästi eri funktiota tai kohtaa, niin silloin tehtävän voi ajatella koostuvan 4 osasta. Syöttöä vaativissa tehtävissä saa käyttää Ali.jar:in funktioita. Ja muistakaa että Java-ohjelmien on käännyttävä ja toimittava kuten pyydettiin sekä sisällettävä Javadoc-tyyliset kommentit, jotta sen saa merkitä täyden veroisena.
Useimmissa tehtävissä on mahdollisuus itse muuttaa automaatin antamaa pistemäärää. Test
-painike yrittää aina ajaa ohjelmaan liittyviä ComTest
-testejä.
Testit
Tehtävissä pyydetyt testit voit kirjoittaa toistaiseksi joko:
- itse tehdyllä pääohjelmalla, ks: Alkuluku.java tai Poista.java
- JUnit-testinä, ks: PoistaTest.java
- ComTest-testinä, ks: Poista.java
Edellisen kerran itsearvio
Pakollinen:
en ymmärrä tämän itsearvion käytännön hyötyjä. tuntuu vain työläältä toistella joka tehtävän kohdalla jotain "hyvin meni". mitä esimerkiksi taunosta tai villestä voisi keksiä sanottavaa muutenkaan?
- VL: Käytännön hyöty on se, että vertaat omia vastauksiasi mallivastauksiin ja opit josko jotakin olisi voinut tehdä toisin ja mistä syystä. Ja erityisesti niiden tehtävien osalta jota et ole tehnyt, ymmärtäisit mitä mallivastauksessa on tehty ja pystyisit vastaavan tekemään toisella kerralla. Demoista ei ole mitään suurempaa hyötyä jos niiden vastauksien järkevyyttä ei pohdi. Useimmilla esim. on monesti turhia iffejeä, sisennykset mitä sattuu, kommentointi puuttuu jne. Silti ohjelma voi "toimia". Eli toimivuus ei yksin ole riittävä tae "oikealle" ohjelmalle. Taunossakin on ne silmukkaratkaisut. Jos kaikki on juuri kuten mallissa, niin hyvä sitten. Useimmilla ei ole ja se on ymmärrettävää kun vielä opetellaan.
Itselleni näistä on ollut valtavasti hyötyä, sillä vaikka saisikin demot tehtyä onnistuneesti ja kerättyä pisteet laariin, mallivastauksista löytyy usein todella paljon näppärämpiä ratkaisuja ongelmiin, joihin itse on käyttänyt ilmeisempiä vaihtoehtoja. Vielä tärkeämpänä asiana tulee varmasti huomanneeksi, jos omassa koodissa on toistuvia puutteita tai maneereja, joita ei tarvitsisi olla.
—VIDEO 1
Muista että voit saada demopisteitä myös indeksoimalla luento/demovideoita, ks: videohakemisto. Demopisteen saat lisäämällä vähintään 3 linkkiä. Video-tehtävä ei saa olla yksi pakollisesta kahdesta tehtävästä.
TIM dokumenttien päivitys (1 p)
Joka demokerta voi saada yhden lisäpisteen tekemälle selkeästi muita hyödyttäviä lisäyksiä, parannuksia ja selkeytyksiä TIM-dokumentteihin.
Tauno T1 (0.5 p)
Katso Taunon käyttöohjeita.
Kunkin Tauno-tehtävän aluksi klikkaa Click here to show Tauno
-linkkiä. Lopuksi muista ajaa Test
.
Koita vastauksissa välttää turhia apumuuttujia ja mieti kuinka hyvin ratkaisusi yleistyy jos taulukon kokoa kasvatetaan.
Halutessasi voit tehdä kokeilun myös Eclipsellä: 1. luo Eclipsessä uusi projekti vaikka nimelle demot
(jos sellaista ei jo ole sinulla). 2. luo src-kansion alle uusi paketti demo.d3
3. luo paketin alle uusi Java-luokka TaulukonSummia
4. Kopioi Java-pohja tuon tiedoston sisällöksi
Ville V1 (0.5 p)
Tee JAVA Villestä tehtävät 5.1-5.7 Toistolauseet.
Tehtävä 1*. Käyttöliittymä
Helpoin tapa on laittaa FXMLPackage-plugin.
Toinen tapa on piilottaa projekti hetkeksi ja "luoda uusi projekti":
- Oletetaan että meillä on projekti nimeltä
demot
(muista huolella sen sijainti). - Mene projektin nimen päälle ja hiiren oikealla valitse
delete
. - Olehuolellinen että et tuhoa sisältöä, ainostaan poistat Workspacesta.
- Luo uusi JavaFx projekti samalla nimelle samaan sijaintiin mutta pacakage nimeen jota ei ole vielä käytössä SceneBuilderin ohjeilla.
- Näin projektin vanhat tiedosto säilyvät ja uudet tiedostot tulevat rinnalle.
Kolmas tapa on tehdä ihan uusi projekti jokaista JavaFx-projektia varten. Neljäs tapa on käsin lisätä olemassa olevan projektin alle JavaFX:än tarvitsemat 4 tiedostoa. Viides tapa on kopioida olemassa olevan valmiin projektin 4 tiedostoa johonkin toiseen packageen ja vaihtaa niiden nimet sitten ja sitten muokata sisältöä.
Kirjoita JavaFX-GUI-ohjelma, joka toimisi seuraavasti:
Kerron sinulle paljonko täytät tänä vuonna!
Syntymävuotesi [1978]
Täytät tänä vuonna 38 vuotta.
Koodi toimii oikein kun ajan eclipsessä, täällä ei. "java.lang.NullPointerException: Location is required". En kuitenkaan löydä että missä näin tapahtuisi.
—Kannattaa ainaki kattoa että on noi tiedostojen nimet varmasti oikein. Itellä herjas tota samaa kunnes tajusin et olin laittanu fxml-tiedoston nimelle ikaView.fxml vaikka piti olla IkaView.fxml
—VL: tuo "Location" juttu tulee nimenomaan silloin kun ko. .fxml
-tiedostoa ei löydetä.
Jos osaat käyttäää Linuxin komentoriviä, voit alla olevalla Shellilä tarkistaa mihin tiedostosi ovat menneet ja millä nimellä.
Joku vois kirjoittaakin miten tuota käytetään
- VL: siis mitä käytetään ja miten? Tarkoitatko Linuxin shelliä? Se on kerrottu teidän ekan kurssin komentoriviosuudessa. Tietokoneet työvälineenä.
Tehtävä 2.* Kolmio
Kirjoita funktio, joka palauttaa suorakulmaisen kolmion hypotenuusan pituuden, kun parametrina on kateettien pituus. Kirjoita testi. Kirjoita funktio kolmionAla, joka laskee vastaavista tiedoista suorakulmaisen kolmion pinta-alan. Kirjoita testit. Muista, että funktiot eivät tulosta mitään!
Mitähän tää haluaa? Testit menee läpi ja dokumentaatiokommentit on tehty mutta pisteitä tulee 0.1. Nyt lakkas dokumentaatiolinkkikin toimimasta kun kokeilin vaihtaa paketin nimeä.
- VL: näyttää olevan
run: 0.9
doc: 0.1
eli 0.9 pistettä ajosta ja 0.1 jos katsoo dokun. Muistakaa että näissä on myös mahdollisuus antaa itse pisteensä jos kokee tulleensa kaltoin kohdelluksi.
Jotta ajon voi suorittaa, pitää ohjelmassa olla edes tyhjä Main
.
Kun katson dokua, niin tulee +0.1p, mutta doku ei näy, vaan: "404 Not Found nginx/1.9.10".
—Mikähän tässä bugaa kun tulee kaksi kommenttia tylikkäästi päällekkäin. Tehtävässä neljä näkyy normaalisti Alla kuva:
Error: Main method not found in class demo.d3.Kolmio, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application hmm??
—Seuraavaan palautetaan VAIN jos on tehnyt itse suoraan JUNit testejä. ComTestien tuottamaa tiedostoa ei tuohon kannata palauttaa.
Tehtävä 3. Tarkkuus
Kirjoita funktio ja testit: int etumerkki(double x, double eps)
, joka palauttaa
-TP: Tehtävässä ei ollut packagea määritelty. Lisäsin sen pohjaan, niin nyt pitäisi toimia testit automaattisesti.
—-1 mikäli x<-eps, eps on aina >= 0
0 mikäli -eps<=x<=eps
1 mikäli x>eps
Tehtävä 4. Demopisteet
Kirjoita funktio demopisteet
, jolle viedään opiskelijan tekemien demopisteiden (aka palautettujen tehtävien pisteiden) summa ja demotehtävien maksimimäärä. Funktio palauttaa sitten Ohjelmointi 2-kurssin taulukon mukaiset hyvityspisteet, jotka siis vastaavat demopisteprosenttia. Luonnollisesti myös testit.
Funktio / Metodi?
—funktio/metodi ==> aliohjelma . . .funktio on ALIOHJELMA, joka palauttaa aina arvon, eli sisältää "return x;" lauseen
—Metodi on olio-ohjelmoijien keksimä hieno sana funktiolle :) Eli, jos aliohjelma on olion aliohjelma, niin se on olion metodi. Tässä aliohojelma on funktio, koska se ei ole olion. Funktio ei palauta aina arvoa, koska funktio voi olla myös void. Void aliohjelmat voivat vaikka tulostaa tai piirtää... Lisäys: Tuli flashback kymmenen vuode takaa, ku joku java jäbä sano "javassa ei ole kuin olioita" tjsp. - jos pilkkua viilataa, nii javassahan tuo mainiki on metodi, eli javan yhteydessä ei kai "saisi" puhua funktioista, mutta tuo äskeinen esimerkki käy yleisesti muihin kieliin. Joku korjaa, joka tietää javan käytänteistä enemmän.
—- vl: Katsokaa sanasto
Tehtävä 5*. Pöytätesti
Tutki pöytätestin avulla mitä ovat muuttujien arvot seuraavassa ohjelmassa kunkin lauseen suorittamisen jälkeen. Funktiot i
ja set
käsitellään "atomaarisina", eli niiden sisään ei mennä pöytätestissä. Merkitse testiin myös aina mitä ohjelma tulostaa.
/**
* Mitä ohjelma tulostaa??
* @author Vesa Lappalainen
* @version 1.0, 19.01.2003
*/
public class Alisotk2 {
private static int i(StringBuffer s) {
return Integer.parseInt(s.toString());
}
private static void set(StringBuffer s,int i) {
s.delete(0, s.length()).append(""+i);
}
/* 01 */ private static StringBuffer b; private static int c;
/* 02 */
/* 03 */ private static void s_1(StringBuffer a, int b)
/* 04 */ {
/* 05 */ int d;
/* 06 */ d = i(a);
/* 07 */ c = b + 3;
/* 08 */ b = d - 1;
/* 09 */ set(a,c - 5);
/* 10 */ }
/* 11 */
/* 12 */ private static void a_2(int a, StringBuffer b)
/* 13 */ {
/* 14 */ c = a + i(b);
/* 15 */ { int c; c = i(b);
/* 16 */ a = 8 * c; }
/* 17 */ set(b,175);
/* 18 */ }
/* 19 */
/* 20 */ public static void main(String[] args) {
/* 21 */ StringBuffer a = new StringBuffer("4"); int d=9;
/* 22 */ System.out.println("" + a + " " + b + " " + c + " " + d);
/* 23 */ b=new StringBuffer("3"); c=2; d=1;
/* 24 */ s_1(b,c);
/* 25 */ a_2(d,a);
/* 26 */ s_1(a,3+d);
/* 27 */ System.out.println("" + a + " " + b + " " + c + " " + d);
/* 28 */ }
}
Voit kirjoittaa vastauksesi alla olevaan taulukkoon (muista Highlight ja Insert) tai tehdä sen Excelillä tai vastaavalla kuten luennolla, tallentaa vaikka PDF:änä ja laittaa sen jonnekin nettiin ja alle linkki siihen (TIMissä ei ole vielä uploadia).
Tehtävä 6. if-lauseiden uudelleen järjestely
Mitä ovat muuttujien arvot seuraavien ohjelmanpätkien jälkeen? Sisennä (ja selvennä) ohjelmanpätkät "oikein"! Huomaa että alla on kahdessa sarakkeessa 4 toisistaan riippumatonta koodinpätkää.
/* 1 */ | /* 2 */
a=4; b=2; c=0; | a=4; b=2; c=0;
if ( a-b != 0 ) c++; a=1; | if ( c != 0 )
b=3; | c--; else b=1;
| a = b-2;
/* 3 */ | /* 4 */
a=4; b=2; c=0; | a=4; b=2; c=0;
if ( a > 0 ) if ( b > 1 ) | if ( c++ != 0 ) if ( a-- != 0);
c=9; | else b-=3; else c+=8;
else if ( c == 1 ) ; |
else b = 0; |
a = 3; |
Tehtävä 7-8*. Henkilo-luokka
Malliluokassa Aika kaikki attribuutit olivat int-tyyppisiä. Kissa/ Elain- esimerkissä oli myös String-tyyppisiä attribuutteja.
Kirjoita luokka Henkilo, jossa on (attribuutteina) sukunimi, etunimi ja syntymävuosi. Tee luokka sellaiseksi, että alla olevan kaltainen pääohjelma toimii:
public static void main(String[] args) {
Henkilo aku = new Henkilo("Aku", "Ankka", 1934);
System.out.println(aku.getNimi()); // tulostaa Aku Ankka
System.out.println(aku.getSyntymavuosi()); // tulostaa 1934
System.out.println(aku.toString()); // tulostaa Aku|Ankka|1934
}
"Aja" nappia painamalla antaa oikean tulosteen, mutta "Test"-napilla tulee virheilmoitus java.lang.Exception: No runnable methods. Mikä meni pieleen?
—Tehtävä B1. Raajoja heilutteleva ukko
Katso Ohj1-kurssin Wikistä miten käytetään Graphics.jar-kirjastoa.
Ota malliohjelma UkkoSample.java ja muuta se sellaiseksi, että ainakin yksi ukko pyörittää jokaista jalkaansa ja kättänsä.
Tehtävä B2-3. Äärellinen automaatti 1.
Lue syksyn 2012 pääsykokeen tehtävä 2.
Tee aliohjelma tutkiJono
, jolle annetaan merkkijono muodossa "01001" ja aliohjelma palauttaa true
niistä jonoista, joita b-kohdan automaatti hyväksyisi, muista palautetaan false
. Älä kuitenkaan toteuta tehtävää automaattia tekemällä (se tehdään Guru-tehtävässä}.
Args kenttään annettu syöte on luettavavissa pääohjelman args-muuttujasta.
Mietin, että mitä tarkoittaa "älä tee automaattia", miten tuo siis pitäisi tarkemmin otten tehdä?
- VL: "tyhmästi" tuhraamalla merkkijonolla.
Tehtävä G1-3. Äärellinen automaatti 2.
Lue syksyn 2012 pääsykokeen tehtävä 2.
Kirjoita luokat Solmu
ja Automaatti
joiden avulla pääohjelmassa muodostat pääsykokeen T2b-kohdan automaatin. Anna automaatille syötteeksi merkkijonoja tyyliin "01001"
ja testeillä kokeile, että automaattisi palauttaa oikean tuloksen.
Tässä tehtävässä pitää siis saada noiden avulla tehtyä automaatti joka palauttaa hyväksyvän tiedon pääsykokeen kohdan b) hyväksyttäville jonoille ja muille hylkäävän. G4 tehtävässä pitää kokeilla että saa automaatin myös muille ongelmille.
Tehtävä G4. Äärellinen automaatti 3.
Jatkoa edelliseen. Tee pääohjelma, jolla kokeilet edellisten luokkien toimintaa tekemällä erilaisia automaatteja. Eli automaatteja jotka hyväksyvät/hylkäävät muita kuin pääsykokeen Tehtävän 2 kohdan b jonoja. Esimerkiksi tee automaatit, jotka osaavat käsitellä T2c,T2d ja T2e kohtien jonot. Test-painike on vain sitä varten että jos olet tehnyt testejä, niin voit ajaa ne.
Tehtävä G5-8. Wizard JavaFX-ohjelman luomiseen.
Eclipsen JavaFX lisäke osaa luoda JavaFX projektin, mutta ei olemassa olevan projektin sisälle toista JavaFX ohjelmaa, mikä olisi varsin kätevää demoissa.
Tee JavaFX-ohjelma, jossa on ikkuna, johon kirjoitetaan paketin nimi ja ohjelman nimi (esim. Kerho
). Ohjelma tekee sitten oikeaan paikkaan kurssin nimeämiskäytänteiden mukaiset tiedostot ja laittaa niissä olevat "viitteet" oikein. Samoin tuotetaan riittävät kommentit jotta ohjelma kääntyy virheettä kurssin oletusasetuksilla.
Ohjelman nimeksi saa antaa myös skandeja, esim: ikä
, mutta tiedostojen nimissä skandit muutetaan pisteettömiksi ( ä
-> a
jne.).
Saat tehdä myös suoraan Eclipsen pluginin, jolloin voi merkitä tästä 5 p enemmän nyt tai seuraavalla demokerralla! Jos joku lähtee tätä näin tekemään, kannattaa liittoutua muiden yrittäjien kanssa kimppaan. Ei tule turhaan kilpailevia versioita vaan yksi hyvä! Laita viereen kommenttiin sp jos olet kiinostunut, niin muut voivat ottaa yhteyttä.
Ole huolellinen tiedostojen nimien kanssa kun palautat. Mikäli paketin nimi on vaikkapa demo.d4.fx
, niin tallenna WizardView.fxml
nimelle demo/d4/fx/WizardView.fxml
ja vastaavasti .css
tiedostolle. Mikäli paketin nimi on demo4
, kelpaa oletusnimet.
Mikäli olet tehnyt jotakin muuta kurssia oleellisesti hyödyttävää koodia (tai em. Eclipsen pluginiksi), niin laita alle osoite mihin olet tehnyt ja pieni selostus siitä, että mitä olet tehnyt. Tästä voi merkitä itsellesi max 9 p jos et merkinnyt yhtään G5-8 kohtaan. Näiden summa kuitenkin max 9 p.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.