-
Notifications
You must be signed in to change notification settings - Fork 1
Viikon 6 kotitehtavat
Laskarikirjanpidon voit tarkastaa Tiklistä
- kokeet tarkoittavat laskarien läsnäoloja
- TMC-tehtävät eivät näyt Tiklissä
Tehtävät 1-5 palautetaan tulemalla paikalle laskaritilaisuuteen.
Ohjelmointiin liittyvät tehtävät 6 ja 7 palautetaan TMC:n kautta. Huom: Toisin kuin kurssilla muilla ohjelmointikursseilla, TMC ei tarkasta tämän kurssin tehtävien oikeellisuutta. Palauta tehtävä palvelimelle siinä vaiheessa kun tehtävä on mielestäsi valmis. Osa tehtävistä tarkastetaan myöhemmin.
TMC-tehtävien deadline on perjantai 9.12. klo 23:59
Takaisinmallinna luokkakaaviona ohjelmoinnin jatkokurssin neljänen viikon tehtävänä 183 ollut Maatilasimulaattori. Ohjelmakoodi täällä
Kuvaa sekvenssikaaviona mitä Maatilalla tapahtuu kun seuraava koodi suoritetaan:
Maatila maatila = new Maatila("Esko", new Navetta(new Maitosailio()));
// voit ajatella edellisen sekvenssikaaviossa seuraavanlaiseksi:
// Maitosailio maitosailio = new Maitosailio();
// Navetta navetta = new Navetta(maitosailio);
// Maatila maatila = new Maatila( navetta );
Lypsyrobotti robo = new Lypsyrobotti();
maatila.asennaNavettaanLypsyrobootti(robo);
Lehma lehma1 = new Lehma();
Lehma lehma2 = new Lehma();
maatila.lisaaLehma(lehma1);
maatila.lisaaLehma(lehma2);
maatila.eleleTunti();
maatila.hoidaLehmat();
System.out.println(maatila);
Tarkastellaan yrityksen palkanlaskentaa ja -maksuja hoitavaa sovellusta.
Saat sovelluksen koodin ladattua TMC:n avulla. Koodi löytyy myös täältä
Tutustu sovelluksen toimintaan. Sovelluksella ei ole dokumentaatiota, mutta testit demonstroivat kuinka ohjelmiston tulisi toimia.
Mallinna sovelluksen rakenne luokkakaaviona
Huom: sovellus "suorittaa" tilisiirron lähettämällä tilisiirtopyynnön osoitteeseen https://otmpaymentinterface.herokuapp.com/. Kun suoritat ohjelman ensimmäistä kertaa, tilisiirtopalvelulta kuluu hetki (noin 10 sek) käynnistymiseen.
Piirrä sekvenssikaavio tilanteesta, missä edellisen tehtävän main-metodissa oleva koodi suoritetaan.
Luennoilla 6 on mainittu 4 oliosuunnittelun periaatetta
- Single responsibility principle
- Program to interfaces, not to concrete implementations
- Favor composition over inheritance
- Riippuvuuksien minimointi
Sivulla https://sourcemaking.com/refactoring/smells on lueteltu joukko koodihajuja (engl. code smell), jotka ovat siis kooditasolla näkyviä merkkejä laiskasta ohjelmointityylistä tai huonosta oliosuunnittelusta. Koodihajut ja oliosuunnittelun periaatteet liittyvät läheisesti toisiinsa. Usein koodihajun taustalla on nimenomaan jonkun olionsuunnittelun periaatteen laiminlyönti.
Palkanlaskentaohjelmiston koodin laatu jättää hieman toivomisen varaa, varsinkin kun tiedetään, että sovellusta on laajennettava lähiaikoina. Tiedetään, että sovelluksessa tulee kuukauden kuluttua olla ainakin seuraavat lisäominaisuudet:
- Henkilölle pitää pystyä asettamaan milloin tahaansa uusi palkka
- Ohjelmiston tulee pystyä palauttamaan työntekijöiden ja maksutapahtumien lista myös muissa kuin CSV-formaatissa, esim. JSON:ina
Listaa kaikki oliosuunnittelun periaatteita rikkovat kohdat ja koodihajut, joita löydät palkanlaskentaohjelmistosta.
Tehtävä palautetaan TMC:n avulla. Kun olet mielestäsi valmis, palauta tehtävä palvelimelle.
TMC-tehtävien deadline on perjantai 9.12. klo 23:59
Refaktoroi palkanlaskenta mahdollisimman siistiksi. Koodin toiminnallisuuden ei tule muuttua, eli pidä huoli siitä että et riko testejä!
Yritä tehdä refaktorointi mahdollisimman pienin, koko ajan ohjelman ehjänä pitävin askelin.
Huom: tätä tehtävää tehdessäsi kannattaa kommentoida testi palkanMuuttuminenHuomioidaanMaksussa
pois. Testiä tarvitaan vasta seuraavassa tehtävässä. Riittää, että kommentoit testin edessä olevan annotaation @Test
Jos jokin testi hajoaa, ja et heti näe missä vika, lienee helpointa "reprodusoida" rikki mennyt asia mainissa. Esim. jos testi tuntienLisaaminenTyontekijalle
hajoaa, katso testin koodia:
@Test
public void tuntienLisaaminenTyontekijalle(){
p.lisaaTyontekija(1,"Arto", "123 456", "mannerheimintie","[email protected]","040-12345",10);
p.lisaaTunnit(1, 5);
assertEquals(0, p.maksuhistoria("csv").size());
p.maksaPalkat();
assertEquals(1, p.maksuhistoria("csv").size());
List<String> odotettu = new ArrayList<>();
odotettu.add(toCSV("Arto", "123 456", "50"));
assertContent(odotettu,p.maksuhistoria("csv"));
}
ja "kopioi" oleellisilta osin koodi mainiin:
public static void main(String[] args) {
Palkanlaskenta p = new Palkanlaskenta();
p.lisaaTyontekija(1,"Arto", "123 456", "mannerheimintie","[email protected]","040-12345",10);
p.lisaaTunnit(1, 5);
// varmista että tulostuu 0
System.out.println(p.maksuhistoria("csv").size());
p.maksaPalkat();
List<String> tulos = p.maksuhistoria("csv");
// varmista että tulostuu 1
System.out.println(tulos);
// varmista, että lista tulos sisältää merkkijonon "Arto;123 456;50"
}
Näin debuggaus muuttunee helpommaksi.
Tehtävä palautetaan TMC:n avulla. Kun olet mielestäsi valmis, palauta tehtävä palvelimelle.
TMC-tehtävien deadline on perjantai 9.12. klo 23:59
Laajenna ohjelmaa toteuttamalla metodi uusiTuntipalkka
(jonka runko löytyy jo koodista).
Ota testi palkanMuuttuminenHuomioidaanMaksussa
pois kommenteista. Kriteeri laajentumisen onnistumiselle on se, että kaikki testit menevät edelleen läpi.
Edellisessä tehtävässä koodille tekemäsi refaktoroinnin eräänä onnistumisen kriteerinä voi pitää sitä, kuinka helppo tässä tehtävässä tapahtuva laajennus on.