Apua tehtävien tekoon kurssin Discord-kanavalla sekä zoom-pajassa:
- Torstaisin klo 14-16 tällä linkillä
Typoja tai epäselvyyksiä tehtävissä?
Tee korjausehdotus editoimalla tätä tiedostoa GitHubissa.
Tehtävien palauttaminen
Tehtävät palautetaan GitHubiin, sekä merkitsemällä tehdyt tehtävät palautussovellukseen https://study.cs.helsinki.fi/stats/courses/ohtu-avoin-2022.
Katso tarkempi ohje palautusrepositorioita koskien täältä.
1. Git: stash (versionhallinta)
Tehtävien 1 ja 2 ei tarvitse näkyä palautuksessa, riittää kun teet tehtävät
Lue https://git-scm.com/book/en/v2/Git-Tools-Stashing-and-Cleaning kohtaan Creative stashing asti.
Oletetaan että olet repositoriossa, jossa on ainakin kaksi branchia: master ja joku toinen (kutsutaan sitä tässä nimellä toinen).
- Ollessasi master-branchissa tee branchissa oleviin tiedostoihin muutoksia, joita lisäät staging-alueelle ja joitain muutoksia joita et vielä “äddää”, komennon git status tuloksen tulee näyttää siis suunilleen seuraavalta
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README.md
modified: src/main/java/Main.java
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: src/main/java/Olutvarasto.java
- Pomosi käskee sinua välittömästi tekemään pari muutosta branchiin toinen. Et kuitenkaan halua vielä comittoida masterissa olevia muutoksia
- Jos siirryt branchiin toinen tekemättä comittia, tulee hirveä sotku, sillä muutokset pysyvät muutoksina toisessakin branchissa
- git stash pelastaa tästä tilanteesta, eli stashaa masterissa olevat muutoset
- Kokeile ennen ja jälkeen stash-komennon komentoa
git status
- Kokeile ennen ja jälkeen stash-komennon komentoa
- Siirry branchiin toinen, tee sinne joku muutos jonka committaat
- Palaa jälleen masteriin
- Palauta stashatyt muutokset komennolla
git stash apply
- Varmista että muutokset palasivat
- Kuten huomaat, staging-alueelle jo lisätty muutos ei palaa staging-alueelle, vaan joudut lisäämään sen uudelleen
- Jos edellisessä komento olisi annettu muodossa
git stash apply --index
, olisi tilanne palautunut täysin ennalleen
2. Git: branchin “siirtäminen” (versionhallinta)
Tehtävien 1 ja 2 ei tarvitse näkyä palautuksessa, riittää kun teet tehtävät
- Tee repoosi branchi nimeltä haara ja tee masteriin ja haaraan committeja siten että saat aikaan seuraavankaltaisen tilanteen:
____master
__/
\_____haara
- Eli sekä master että haara ovat edenneet muutamien commitien verran haarautumisen tapahduttua
- Huom: komennolla
gitk --all
näet kaikki haarat, kokeile!
- Huom: komennolla
- Yhtäkkiä huomaat, että master:iin tekemäsi asiat eivät olekaan kovin hyviä ja haara:ssa on paljon parempaa tavaraa, haluaisitkin että haara:sta tulisi uusi master
- Tämä onnistuu kun menet masteriin ja annat komennon
git reset --hard haara
- Varmista että komento toimii oikein
- Vanhan master-haarankaan tavarat eivät katoa mihinkään, jos niihin jostain syystä vielä halutaan palata
- Vanhaan committiin palaaminen onnistuu, jos commitin id on tiedossa – jos ei, on olemassa muutamia keinoja sen selvittämiseksi
3. ja 4. (kahden rastin tehtävä) KPS yksin- ja kaksinpeli
Kurssirepositorion hakemistosta koodi/viikko7/kivi-paperi-sakset löytyy tutun pelin tietokoneversio.
- Ohjelmassa on kolme pelimoodia: ihminen vs. ihminen, ihminen vs. yksinkertainen tekoäly ja ihminen vs. monimutkainen tekoäly
- Koodi sisältää runsaat määrät copy pastea, muutenkaan oliosuunnittelun periaatteet eivät ole vielä alkuperäisellä ohjelmoijalla olleet hallussa
- Poista koodista kaikki toisteisuus ja tee siitä rakenteellisesti materiaalin osan 4 hengessä oikeaoppinen
pelaa
-metodi tulee toteuttaa template-metodina- Sopivan peliolion (kaksinpeli, helppo yksinpeli, vaikea yksinpeli) luominen tulee toteuttaa staattisen tehdasmetodin, tai funktion avulla
- Pääohjelmalla ei saa olla riippuvuuksia konkreettisiin pelin toteuttaviin luokkiin
Jos teet tehtävän mielestäsi kaikkien tyylisääntöjen mukaan, merkkaa 2 rastia, jos ratkaisu ei ole kaikin osin tyylikäs, merkkaa yksi rasti.
Vinkki: eräs tapa lähteä liikkeelle on muodostaa yliluokka KiviPaperiSakset
, joka sisältää kaikille kolmelle pelityypille yhteisen koodin:
class KPS:
def pelaa(self):
tuomari = Tuomari()
ekan_siirto = self._ensimmaisen_siirto()
tokan_siirto = self._toisen_siirto(ekan_siirto)
while self._onko_ok_siirto(ekan_siirto) and self._onko_ok_siirto(tokan_siirto):
# ...
print("Kiitos!")
print(tuomari)
def _ensimmaisen_siirto(self):
return input("Ensimmäisen pelaajan siirto: ")
# tämän metodin toteutus vaihtelee eri pelityypeissä
def _toisen_siirto(self, ensimmaisen_siirto):
# metodin oletustoteutus
return "k"
def _onko_ok_siirto(self, siirto):
return siirto == "k" or siirto == "p" or siirto == "s"
Erilliset pelit sitten perivät luokan ja erikoistavat sitä tarpeidensa mukaan:
# luokka perii luokan KPS
class KPSPelaajaVsPelaaja(KPS):
# toteutetaan metodi pelityypin mukaisesti
def _toisen_siirto(self, ensimmaisen_siirto):
tokan_siirto = input("Toisen pelaajan siirto: ")
return tokan_siirto
5. Pull requestin mergeäminen (tätä tehtävää ei lasketa versionhallintatehtäväksi)
Mergeä jokin miniprojektillesi tehty pull request (myös toisen miniprojektisi jäsenen tekemän pull requestin mergeäminen käy). Voit tehdä tehtävän yhdessä muiden miniprojektisi ryhmäläisten kanssa. Jos olet jo mergennyt pull requestin miniprojektiisi kurssin aikana, se riittää tämän tehtävä merkkaamiseksi.
Laita palautusrepositorioosi tiedosto MERGE.md ja sen sisällöksi linkki mergettyyn pullrequestiin.
Vaihtoehtoinen tehtävä:
lue joku alla olevista ja tee siitä noin 0.25 sivun referaatti
- http://www.leanprimer.com/downloads/lean_primer.pdf
- Aika pitkä, mutta kuuluu kokeen reading-listalle, joten erittäin hyödyllinen
- Lauri Suomalaisen kandidaattityö Ohjelmistotuotantomenetelmien kehittyminen 1950-luvulta nykypäivään
- Tero Huomon kandidaattityö Ohjelmistoarkkitehtuurin sisällyttäminen ketteriin ohjelmistotuotantomenetelmiin
- Kasper Hirvikosken kandidaattityö Metriikat käytänteiden tukena ohjelmiston laadun arvioimisessa
- Kenny Heinosen kandidaattityö Ohjelmistoala ja ryhmätyöskentely
- Eero Laineen kandidaattityö Johtaminen perinteisissä ja ketterissä ohjelmistotuotantoprojekteissa
- Esa Kortelaisen kandidaattityö Jatkuva eksperimentointi ohjelmistokehityksen tukena
- Kalle Ilveksen kandidaattityö Scrumban-menetelmän käyttö ketterässä ohjelmistokehityksessä
6. Kurssipalaute
Anna kurssipalautetta täällä. Voit antaa palautteen myös kokeen jälkeen. Rasti tähän tehtävään on lupaus että annat palautteen jossain vaiheessa. Palautetta voi antaa välillä 25.3.2022 - 15.5.2022
Tehtävien palautus
Pushaa kaikki tekemäsi tehtävät (paitsi ne, joissa mainitaan, että tehtävää ei palauteta mihinkään) GitHubiin ja merkkaa tekemäsi tehtävät palautussovellukseen https://study.cs.helsinki.fi/stats/courses/ohtu-avoin-2022