Skip to content

Commit 652b718

Browse files
author
avihavai
committed
quiznator id:den päivitys, vertaisarviointi
1 parent fe138e7 commit 652b718

5 files changed

Lines changed: 28 additions & 83 deletions

File tree

data/osa-8/1-object.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ title: 'Object'
44
hidden: true
55
---
66

7-
87
<text-box variant='learningObjectives' name='Oppimistavoitteet'>
98

109
- Tiedät että Java-ohjelmointikielessä jokainen luokka perii luokan Object.
@@ -14,6 +13,8 @@ hidden: true
1413
</text-box>
1514

1615

16+
Tarkastellaan Javan luokkia ja kerrataan samalla hieman aiemmin opittuja luokkiin liittyviä ominaisuuksia.
17+
1718
Tutkitaan seuraavaa luokkaa `Kirja`, jolla ei ole metodia `public String toString()`, ja ohjelmaa joka yrittää tulostaa `Kirja`-luokasta luodun olion `System.out.println()`-komennolla.
1819

1920

@@ -201,13 +202,13 @@ Kirjat olivat samat
201202

202203
</sample-output>
203204

204-
<quiznator id="5bd76bd68138f12a7e536db7"></quiznator>
205+
<quiznator id="5c78294899236814c5bbddb0"></quiznator>
205206

206207

207208
Monet Javan valmiit tietorakenteet tukeutuvat `equals`-metodiin osana sisäistä toimintaansa. Esimerkiksi luokan `ArrayList` `contains` ja `remove`-metodit hyödyntävät olioiden yhtäsuuruutta olion etsimisessä. Vastaavasti luokan `HashMap` toiminnallisuus perustuu equalsiin -- equalsin lisäksi metodi hashCode on oleellinen.
208209

209210

210-
<quiznator id="5bd76c17e8e5d029fd7814b1"></quiznator>
211+
<quiznator id="5c78298b3972a914741081a8"></quiznator>
211212

212213

213214
## Hajautusarvo "hashCode"

data/osa-8/2-perinta.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -693,9 +693,9 @@ Mitä tarkalleenottaen tapahtuu kuin kolmiulotteiselle pisteelle kutsutaan toStr
693693
Metodikutsun aikaansaama toimintoketju siis on monivaiheinen. Periaate on kuitenkin selkeä: suoritettavan metodin määrittelyä etsitään ensin olion todellisen tyypin määrittelystä ja jos sitä ei löydy edetään yliluokkaan. Ja jos yliluokastakaan ei löydy metodin toteutusta siirrytään etsimään yliluokan yliluokasta jne...
694694

695695

696-
<quiznator id="5bd76c6dc6014229d5b530c7"></quiznator>
696+
<quiznator id="5c7829f1c41ed4148d970579"></quiznator>
697697

698-
<quiznator id="5bd76ca1b5cefd2a43d9ae1c"></quiznator>
698+
<quiznator id="5c782a0c244fe21455cbc288"></quiznator>
699699

700700

701701
## Milloin perintää kannattaa käyttää?

data/osa-8/5-vertaisarviointi.md

Lines changed: 20 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -5,102 +5,48 @@ hidden: true
55
---
66

77

8-
TODO: tänne crowdsorcerer-tehtävien vertaisarviointi
9-
10-
11-
#
12-
Ohjelmien testaaminen
13-
14-
15-
16-
178
<text-box variant='learningObjectives' name='Oppimistavoitteet'>
189

10+
- Kertaat ArrayListin ja HashMapin toimintaa
11+
- Harjoittelet ohjelmakoodin ja testien lukemista
1912

20-
-
21-
Kertaat ohjelmien testaamista.
22-
23-
-
24-
Mietit input-output -tyyppistä testausta, missä syötteen perusteella päätellään tuloste.
25-
26-
27-
28-
<text-box>
29-
30-
31-
Olet ehkä jo käyttänyt CrowdSorcereria Ohjelmoinnin perusteissa. Jos et, voit käydä palauttamassa ohjeet mieleesi kurssimateriaalin <a href="/part2/">toisessa osassa</a>.
32-
33-
34-
35-
Syvennymme hiljalleen ohjelmoinnin jatkokurssilla ohjelmien testaamiseen CrowdSorcererin kanssa. Aiemmin testasit luomiasi ohjelmia antamalla syötteen ja sitä vastaavan tuloksen. Ohjelma ajettiin antamallasi syötteellä ja sen tulosta verrattiin tulokseesi.
36-
37-
38-
39-
Nyt pääset tutustumaan lisää siihen, miten testit toimivat. Kuten aiemminkin, kirjoitat ohjelmallesi syötteet ja tulokset, mutta nyt näet testimetodin, joka niistä generoituu. Keksit myös itse testeillesi nimet ja testaustyypin. Nimen on tarkoitus olla kuvaava: esimerkiksi testi, joka testaa, että ohjelma tulostaa "Mau!" syötteellä "kissa", voisi olla nimeltään "tulostaMauJosSyoteOnKissa".
40-
41-
42-
43-
Testaustyypillä tarkoitetaan tässä tapaa, jolla antamaasi tulosta verrataan ohjelman tulokseen. Contains tarkoittaa, että ohjelman tulostuksen täytyy sisältää antamasi tulos, Does not contain tarkoittaa, että se ei saa sisältää antamaasi tulosta, ja Equals tarkoittaa sitä, että ohjelman tulostuksen täytyy olla tarkalleen sama kuin antamasi tulos, merkkejä ja rivinvaihtoja myöten.
44-
45-
46-
47-
Antamistasi syötteestä, tuloksesta, nimestä ja tyypistä generoitu testi voi näyttää vaikkapa tältä:
48-
49-
50-
51-
```java
52-
@Test
53-
public void tulostaMauJosSyoteOnKissa() {
54-
Submission.suorita(new Scanner(“kissa”));
55-
String metodinTulostus = io.getSysOut(); // tässä ohjelmasi tulostus tallennetaan
56-
// olioon metodinTulostus
57-
String viesti =Kun syöte oli: ‘kissa’, tulostus oli: ‘“ + metodinTulostus + “‘, mutta se ei ollut:Mau!.”;
58-
// viesti näytetään tehtävän tekijälle, jos ohjelma ei mene testistä läpi
59-
assertEquals(viesti, “Mau!”, metodinTulostus); // assertEquals testaa sitä, että
60-
// metodinTulostus on tarkalleen “Mau!”
61-
}
62-
```
63-
64-
65-
CrowdSorcerer yhdistää nämä testimetodit yhteen testaustiedostoon, jonka se sitten lähettää ohjelmakoodin mukana testauspalvelimelle. Jatkossa pääset luomaan itse kokonaisia testitiedostoja!
66-
67-
68-
69-
Kuten aiemminkin, testejä täytyy olla vähintään yksi, mutta pyri miettimään, miten saisit ohjelmasi testattua mahdollisimman kattavasti. Esimerkiksi ehtolauseita sisältävästä ohjelmasta tulisi aina käydä läpi kaikki ehtojen luomat haarat.
70-
71-
72-
73-
Nyt pääset laatimaan testejä seuraaville kahdelle tehtävälle.
13+
</text-box>
7414

15+
Kurssin seitsemännessä osassa luotiin omia ohjelmointitehtäviä, joita tuleville kursseille osallistuvat voivat käyttää ohjelmoinnin harjoitteluun. Tässä kohtaa pääset vertaisarvioimaan muiden tekemiä tehtäviä.
7516

76-
<% partial 'partials/general_callout', locals: { name: 'Suunnittele testitapaukset valmiille malliratkaisulle 1' } do %>
17+
Vertaisarvioit yhteensä kuusi tehtävää. Kolme tehtävistä liittyy listoihin ja kolme hajautustauluihin. Pohdi jokaisen kohdalla tehtävänannon TODO: tähän ne ominaisuudet mitä vertaisarvioissa tarkastellaan.
7718

19+
Alla on annettuna ensin tehtävän luomiseen tarkoitettu tehtävänanto, jota seuraa kolme vertaisarvioitavaa tehtävää. Kukin vertaisarviointi lasketaan pisteytyksessä yhden tehtävän arvoiseksi. Ensin tulee kolme listoihin liittyvää tehtävää, sitten kolme hajautustauluihin liittyvää tehtävää.
7820

79-
Lähdekoodin kohdalla on valmis malliratkaisu. Keksi sitä vastaava tehtävänanto ja anna testitapaukset. Lähetettyäsi tehtävän saat tiedon siitä, menivätkö testisi läpi. Jos eivät, lue virheviesti ja lähdekoodi uudestaan ja korjaa testisi menemään läpi.
8021

22+
## Suunnittele oma tehtävä: Listat
8123

24+
Suunnittele tehtävä, joka harjoituttaa listojen käsittelyä ja tietojen hakemista niistä. Tehtävän tekijän on tarkoitus kirjoittaa ratkaisunsa Lähdekoodi-kentän Submission-luokan metodiin suorita().
8225

83-
Tehtävien luomistehtävät käsitellään pisteytyksessä bonuksena.
26+
Tee suorita()-metodin sisään valmiiksi lista tai listoja, jotka sisältävät oman valintasi mukaan joko merkkijonoja, kokonaislukuja tai liukulukuja. Täytä listan arvot valmiiksi.
8427

28+
Ohjeista tulevaa tehtävän ratkaisijaa kysymään käyttäjältä komentoa, jonka jälkeen listalta haetaan komennon perusteella jotakin tietoa, joka sen jälkeen tulostetaan. Jos annettu käsky ei ole sallittujen listalla, tulee ohjelman tulostaa jokin virheviesti.
8529

86-
<% end %>
30+
Esimerkiksi yksi tälläinen tehtävä voisi sisältää listan kokonaislukuja, ja käskyt voisivat olla: "suurin", "pienin" ja "keskiarvo". Kun tuleva tehtävän ratkaisija antaa käskyn "keskiarvo", ohjelma tulostaa listan lukujen keskiarvon ja niin edelleen. Keksi kuitenkin tehtävällesi omat sallitut käskyt.
8731

88-
<div class='crowdsorcerer-widget' data-assignment='14'></div>
32+
Muista merkitä ainakin käskyyn reagointiin liittyvät rivit malliratkaisuriveiksi -- näin ratkaisu ei tule suoraan tehtäväpohjaan. Vastaavasti älä merkitse listan luontia tai sen arvoja lisäävää koodia malliratkaisuriveiksi, sillä se on tarkoitus jättää tehtäväpohjaan.
8933

90-
<% partial 'partials/general_callout', locals: { name: 'Suunnittele testitapaukset valmiille malliratkaisulle 2' } do %>
34+
Huom! Voit syöttää useamman rivin merkitsemällä rivinvaihdot syötteeseen. Esimerkiksi syöte `yksi\nkaksi\nloppu` sisältää syötteet `yksi` `kaksi` ja `loppu`. Vastaavasti tulos `1\n2\n3` olettaa, että tulostuksen tulee olla `1` `2` ja `3` tässä järjestyksessä.
9135

9236

93-
Lähdekoodin kohdalla on valmis malliratkaisu. Keksi sitä vastaava tehtävänanto ja anna testitapaukset. Lähetettyäsi tehtävän saat tiedon siitä, menivätkö testisi läpi. Jos eivät, lue virheviesti ja lähdekoodi uudestaan ja korjaa testisi menemään läpi.
37+
<crowdsorcerer id='26' peerreview='true' exercisecount='3'></crowdsorcerer>
9438

9539

96-
Fibonaccin lukujonosta voit lukea <a href="https://fi.wikipedia.org/wiki/Fibonaccin_lukujono">Wikipediasta</a>.
9740

41+
## Suunnittele oma tehtävä: Hajautustaulu
9842

43+
Keksi tehtävä, jossa käytetään HashMappia. Tehtäväpohjassa on valmiina komennon kysyminen ja toistolause, joka jatkuu kunnes ohjelman käyttäjä kirjoittaa komennon "lopeta".
9944

100-
Tehtävien luomistehtävät käsitellään pisteytyksessä bonuksena.
45+
**Huom!** Tässä sinun täytyy syöttää jokaiselle testitapaukselle useampi syöte. Useamman syötteen saat annettua, kun laitat rivinvaihdon `\n` jokaisen syötteen väliin. Lisäksi lopeta jokainen testisyöte tekstillä `lopeta`, jotta testissä silmukan suoritus lakkaa.
10146

47+
Esimerkiksi jos haluat antaa testisyötteeksi "kissa", "koira", "lopeta", syötä input-kenttään teksti `kissa\nkoira\nlopeta`.
10248

103-
<% end %>
49+
Muista merkitä malliratkaisurivit ohjelmaan -- näin ratkaisu ei tule suoraan käyttäjälle näkyvään.
10450

105-
<div class='crowdsorcerer-widget' data-assignment='13'></div>
10651

52+
<crowdsorcerer id='27' peerreview='true' exercisecount='3'></crowdsorcerer>

data/osa-8/6-yhteenveto.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@ title: 'Yhteenveto'
44
hidden: true
55
---
66

7-
TODO: mainitse, että tästä alkoi jatkokurssi
8-
97
Kahdeksannessa osassa tutustuimme perintään ja rajapintoihin. Perintä tuo perivän luokan käyttöön yliluokan ominaisuuksia kun taas rajapinnat toimivat sopimuksena luokan tarjoamasta toteutuksesta. Perintä ei sulje pois rajapintojen käyttöä, eikä rajapintojen käyttö sulje pois perinnän käyttöä. Kumpikin myös mahdollistaa konkreettisen toteutuksen abstrahoinnin -- esimerkiksi metodin ei aina tarvitse tietää parametrina saatavan olion konkreettista tyyppiä: joskus rajapinta tai yliluokka riittää.
108

119
Vastaa vielä alla olevaan kyselyyn.
1210

13-
<quiznator id="5bd5a196b5cefd2a43d9acb8"></quiznator>
11+
<quiznator id="5c782a44017ffc13eddcf319"></quiznator>
1412

data/osa-8/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Tämän materiaalin osat 1-7 liittyvät Helsingin yliopiston kurssiin Ohjelmoinn
1111

1212
Kurssin tehtäviä tehdään Test My Code (TMC) -järjestelmässä. Ohjeita TMC-järjestelmän käyttöönottoon löytyy tämän kurssimateriaalin ensimmäisestä osasta.
1313

14-
Mikäli et ole osallistunut kurssiin kurssin alusta lähtien, vaan tulet mukaan vain Ohjelmoinnin jatkokurssia vastaavalle osalle, valitse TMC:n Settings-valikosta kurssi TODO. Kertaathan tällöin myös materiaalin osat 1-7.
14+
Mikäli et ole osallistunut kurssiin ensimmäisestä osasta lähtien, vaan tulet mukaan vain Ohjelmoinnin jatkokurssia vastaavalle osalle, valitse TMC:n Settings-valikosta kurssi TODO. Kertaathan tällöin myös materiaalin osat 1-7.
1515

1616
<hr/>
1717

0 commit comments

Comments
 (0)