Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

Samankaltaiset tiedostot
Ohjelmistotekniikan menetelmät, koe

Ohjelmointi 2 / 2010 Välikoe / 26.3

Mikä yhteyssuhde on?

Olio-ohjelmointi Javalla

Metodien tekeminen Javalla

Ohjelmistojen mallintaminen. Luento 3, 9.11.

Luokan sisällä on lista

Ohjelmoinnin jatkokurssi, kurssikoe

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

YHTEYSSUHDE (assosiation)

Testivetoinen ohjelmistokehitys

Rajapinta (interface)

1. Olio-ohjelmointi 1.1

Listarakenne (ArrayList-luokka)

käyttötapaukset mod. testaus

1. Omat operaatiot 1.1

Ohjelmoinnin perusteet, kurssikoe

9. Periytyminen Javassa 9.1

13. Loogiset operaatiot 13.1

Periytyminen (inheritance)

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

1 Tehtävän kuvaus ja analysointi

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Ohjelmistojen mallintaminen. Luento 2, pe 5.11.

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

4. Luokan testaus ja käyttö olion kautta 4.1

Poikkeustenkäsittely

public static void main (String [] args)

9. Periytyminen Javassa 9.1

Ohjelmointi 2, välikoe

Java-kielen perusteet

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

JUnit ja EasyMock (TilaustenKäsittely)

Luokat ja oliot. Ville Sundberg

11. Javan valintarakenteet 11.1

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

4. Olio-ohjelmoinista lyhyesti 4.1

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

7. Näytölle tulostaminen 7.1

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Tietokannat II -kurssin harjoitustyö

Ohjelmistojen mallintaminen, kurssikoe esimerkkivastauksia

19. Olio-ohjelmointia Javalla 19.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Tietorakenteet, laskuharjoitus 7,

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

KOHDELUOKAN MÄÄRITTELY

Olioiden yhteistyön mallintaminen

20. Javan omat luokat 20.1

2. Olio-ohjelmoinista lyhyesti 2.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Java-kielen perusteita

ITKP102 Ohjelmointi 1 (6 op)

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

UML ja luokkien väliset suhteet

13. Loogiset operaatiot 13.1

Taulukoiden käsittely Javalla

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Sisältö. 22. Taulukot. Yleistä. Yleistä

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Tietokannat II -kurssin harjoitustyö

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen

11. Javan toistorakenteet 11.1

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

ORGANISAATION KIRJAUTUMINEN TURVASIRU.FI-PALVELUUN

Java-kielen perusteita

Java kahdessa tunnissa. Jyry Suvilehto

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Javan perusteita. Janne Käki

Ohjelmoinnin perusteet Y Python

Lista luokan sisällä

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Ohjelmointi 2 / 2011 Välikoe / 25.3

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Sisältö. 2. Taulukot. Yleistä. Yleistä

Ohjelmoinnin perusteet Y Python

Ristijärven metsästysseura tysseura osti lisenssin jahtipaikat.fi verkkopalveluun, jotta seuran

Metodien tekeminen Javalla

ITKP102 Ohjelmointi 1 (6 op)

TIETORAKENTEET JA ALGORITMIT

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Transkriptio:

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2 Viikon 2 laskareita ei pidetä mikrosaleissa, käytössä ovat opetusohjelmaan merkatut salit. Tämän viikon tehtävistä 1-6 tehdään etukäteen kotona. Loput tehtävistä tehdään paikanpäällä. Tehtävät 1 ja 2 käsittelevät viikon 1 kalvojen 34-67 asiaa. Tehtäviät 3-6 käsittelevät viikon 2 asiaa, erityisesti kannattaa kerrata kalvot 13-33 ja 44-48. 1. Ohjelmoinnin, Tietorakenteiden ja Tietokantojen harjoitustyöissä opiskelijan on pidettävä kirjaa käyttämistään työtunneista. Aina kun opiskelija tekee tehtäviä harjoitustyöhön liittyen, on hänen kirjatattava ylös käyttämänsä työaika ja tieto millaiseen tehtävään aika käytettiin. Työtehtävät jakautuvat seuraaviin kuuteen luokkaan: määrittely, suunnittelu, ohjelmointi, testaus, dokumentointi ja muuta. Tehtävänä on suunnitella harjoitustöiden tuntikirjanpitoa tukeva tietojärjestelmä. Harjoitustyöt tehdään ryhmässä, johon kuuluu useita opiskelijoita ja yksi ohjaaja. Kaikki ryhmään kuuluvat opiskelijat tekevät saman aineen (Ohjelmointi, Tietorakenteet tai Tietokannat) harjoitustyötä. Kukin opiskelija tekee työnsä itsenäisesti. Ryhmän ohjaaja luo jokaiselle ryhmäläiselle käyttäjätunnuksen järjestelmään. Käyttäjätunnuksen luonnin yhteydessä opiskelijan tiedot (mm. osoite, aloitusvuosi, pääaine) kopioidaan OODIjärjestelmästä. Harjoitustyön aikana ohjaaja seuraa ryhmäläisten etenemistä järjestelmän avulla. Opintoesimiehen vastuulla on luoda kaikille ohjaajille sopivat käyttäjätunnukset järjestelmään sekä listätä järjestelmään tiedot jokaisesta ryhmästä. Ryhmän tiedot (ohjaaja, tapaamisajat, alkuja loppupäivämäärä) kopioidaan laitoksen kurssikirjanpitojärjestelmästä. Tunnista tietojärjestelmän käyttäjät ja mieti minkälaisia käyttötapauksia järjestelmällä tulisi olla. Käyttötapauksesta riittää mainita nimi ja käyttötapauksen kulku lyhyesti (kuten luennon 1 kalvolla 42). Tee myös käyttötapausdiagrammi. 2. Kuvaa edellisen tehtävän käyttötapauksista kolme tarkemmalla tasolla. Käytä kuvaamiseen Alistair Cockburnin käyttötapauspohjaa, joka löytyy osoitteesta www.cs.helsinki.fi/u/mluukkai/ohmas10/usecase.pdf, tai samaa tyyliä kun viikon 1 luentokalvon sivulla 44 olevan käyttötapauksen Opiskelija ilmoittautuu kurssille tarkemman version yhteydessä on käytetty. 3. Mallinna Ohjelmoinnin perusteiden viikon 4.3 tehtävä kaksipyttyinen Viljavarasto Java-koodi luokkakaaviona 1

Viljavarastotehtävä löytyy osoitteesta: http://www.cs.helsinki.fi/u/wikla/ohjelmointi/perus/s2011/harjoitukset/4/ Java-koodi (esimerkkiratkaisu): https://wiki.helsinki.fi/display/s2011paja/ratkaisuehdotelmia Tee Viljavaraston luokkakaavio tarkasti (merkitse kaikki metodit ja attribuutit). Jatkossa riittää että luokkakaavioon merkataan kulloisenkin käyttötilanteen suhteen tärkeimmät metodit/attribuutit. Yleensä ei merkata kuin korkeintaan julkiset metodit ja attribuutit, ei aina niitäkään. 4. Mallinna Ohjelmoinnin jatkokurssin viikon 1 tehtävän 3 Lastiruuma Javakoodi luokkakaaviona Tehtävä löytyy osoitteesta http://www.cs.helsinki.fi/u/wikla/ohjelmointi/jatko/s2011/harjoitukset/1/ Java-koodi (esimerkkiratkaisu, ilmestyy vasta ma 7.10 klo 23.59): https://wiki.helsinki.fi/display/s2011paja/ohja+viikko+1 5. Viimeiseltä sivulta löytyy viime viikon tehtävän 2 hieman laajennettu versio. Piirrä koodia vastaava luokkakaavio. 6. Piirrä edellisen tehtävän luokkakaavion mukainen oliokaavio, joka kuvaa main():in viimeisellä rivillä olevan tilanteen. Laskuharjoituksissa paikanpäällä tehtävät tehtävät: jakaantukaa 3-5 hengen ryhmiin 7. Oluen verkkomyynti sallitaan Suomessa vuodesta 2013 alkaen. Kumpula Biershopin toimitusjohtaja Arto Vihavainen haluaa avata verkkokaupan heti vuoden alussa ja on päättänyt pyytää meitä toimittamaan sovelluksen. Arton visio sovelluksesta on seruaava: Haluamme markkinoille niin pian kuin mahdollista. Sen takia onkin tärkeää että ensin laitetaan kaupan perustoiminnallisuus kuntoon, lisätoimintoja ehdimme viritellä sivuille myöhemminkin. Pääsivulle sijoitetaan firman logo sekä linkit yhteystietoihin ja itse kauppaan. Kaupassa näytetään lista ostettavissa olevista tuotteista. Jokaisesta tuotteesta näytetään nimi ja hinta. Klikkaamalla tuotetta voisi päästä tuotteen tarkempaan kuvaukseen, kuvauksena on linkki Ratebeer.comsivulle. Toiminnallisuuden on tarkoitus olla normaalin webbikaupan kaltainen, eli klikkaamalla tuotteen yhteydessä olevaa nappia, menevät tuotteet asiakkaan ostoskoriin. Olisi hyvä jos ostoskorin saldo ja siellä olevien tuotteiden määrä on koko ajan näkyvissä. Varmaan myös nappi jolla tyhjennetään ostoskori on tarpeen. 2

Kun ostokset on kerätty koriin, pääsee asiakas kassalle nappia "maksa ostokset" klikkaamalla. Kassalla ollessa ostoskorin sisältö näytetään. Kassalla tuotteita on mahdollista poistaa ostoskorista, koko kori on mahdollista tyhjentää tai voidaan myös palata takaisin tekemään lisää ostoksia. Kassalla ollessa asiakas täyttää sivulle osoitteensa ja luottokorttinumeron. Kun asiakas klikkaa "suorita maksu", veloitetaan asiakkaan korttia ja ilmoitetaan jos veloitus onnistui. Asiakas saa sitten tuotteensa postitse kotiin. Jos luottokorttinumero on virheellinen tai maksu ei muusta syystä onnistu, ohjaa järjestelmä asiakkaan takaisin kassalle. Jos ostotapahtuma onnistuu, asiakas ohjataan pääsivulle. Ostoskori tietenkin tyhjenee kun ostokset on tehty onnistuneesti. Sovellukselle tarvitaan myös erillinen hallintasivu jonka kautta ylläpitäjän on mahollista lisätä tuotteita ja niiden tietoja järjestelmään. Jokaisen tuotteen varastosaldo on tietenkin oleellista olla järjestelmällä tiedossa. Onnistuneen ostoksen tulee päivittää saldoa. Kun uusia tuotteita saapuu varastoon, ylläpitäjä kasvattaa saldoa. Kaikki ostokset on siis pakko tehdä luottokortilla. Luottokorttimaksut tapahtuvat Luottokunnan verkkorajapintaa hyödyntäen. Asiakas ei tietenkään näe mitään, ohjelma hoitaa luottokunnan kanssa kommunikoimisen sisäisesti. Postituksia varten meillä on oma tietojärjestelmä. Verkkokauppa on siihen yhteydessä verkon välityksellä, ja jokaisesta onnistuneesta myyntitapahtumasta pitää lähteä tiedot (toimitusosoite ja ostetut tuotteet) postituksen tietojärjestelmään. Ylläpitäjän on hyvä päästä tarvittaessa näkemään lista kaikista luottokunnan kautta tehdyistä tehdyistä maksuista ja postitustietojärjestelmän kautta tehdyistä toimituksista. Tunnistakaa verkkokaupan käyttäjät Listatkaa kaikki verkkokaupan käyttötapaukset. Käyttötapauksesta riittää mainita nimi, käyttäjät, esiehto ja jälkiehto sekä käyttötapauksen kulku lyhyesti (kalvon 42 tapaan) HUOM: suositaan pienen osatoiminnallisuuden sisältäviä käyttötapauksia, esim. "asiakas valitsee tuotteita ja täyttää laskutustietonsa ja suorittaa maksun"on liian monta toiminnallisuutta sisältävä käyttötapaus ja kannattaa jakaa useaan erilliseen käyttötapaukseen isompi toiminnallisuus koostetaan pienten käyttötapausten avulla pienelle käyttötapaukselle tulee merkitä esiehdoksi ne aiemmat käyttötapaukset jotka oletetaan suoritetuksi ennen kuin käyttötapaus voidaan suorittaa (esim. ostoksen voi poistaa ostoskorista vain jos siellä on jo ostos) Piirtäkä käyttötapauskaavio 3

public class Kioski { public Matkakortti ostamatkakortti(string nimi) { Matkakortti uusikortti = new Matkakortti(nimi); return uusikortti; public Matkakortti ostamatkakortti(string nimi, int arvo) { Matkakortti uusikortti = new Matkakortti(nimi); uusikortti.kasvataarvoa(arvo); return uusikortti; public class Matkakortti { String omistaja; double arvo; int pvm; int kk; public Matkakortti(String n){ omistaja = n; pvm = 0; kk = 0; arvo = 0; public void kasvataarvoa(double a){ arvo += a; public void vahennaarvoa(double a){ arvo -= a; public double getarvo(){ return arvo; public void uusiaika(int p, int k){ kk = k; pvm = p; public class Lataajalaite { public void lataaarvoa(matkakortti k, double a) { k.kasvataarvoa(a); public void lataaaikaa(matkakortti k, int pvm, int kk) { k.uusiaika(pvm, kk); 4

public class Lukijalaite { private double RATIKKA = 1.5; private double HKL = 2.1; private double SEUTU = 3.5; public boolean ostalippu(matkakortti k, int tyyppi){ double hinta = 0; if ( tyyppi == 0 ) hinta = RATIKKA; else if ( tyyppi ==1 ) hinta = HKL; else hinta = SEUTU; if ( k.getarvo()<hinta ) return false; k.vahennaarvoa(hinta); return true; public class HKLLaitehallinto { ArrayList<Lataajalaite> lataajat = new ArrayList(); ArrayList<Lukijalaite> lukijat = new ArrayList(); lisaalataaja(lataajalaite lataaja){ lataajat.add(lataaja); lisaalukija(lukijalaite lukija){ lataajat.add(lukija); public class Main { public static void main(string[] args) { HKLLaitehallinto laitteet = new HKLLaitehallinto(); Lataajalaite rautatietori = new Lataajalaite(); Lukijalaite ratikka6 = new Lukijalaite(); Lukijalaite bussi244 = new Lukijalaite(); laitehallinto.lisaalataaja(rautatietori); laitehallinto.lisaalukija(ratikka6); laitehallinto.lisaalukija(bussi244); Kioski lippuluukku = new Kioski(); Matkakortti artonkortti = lippuluukku.ostamatkakortti("arto"); rautatietori.lataaarvoa(artonkortti, 3); ratikka6.ostalippu(artonkortti, 0); bussi244.ostalippu(artonkortti, 2); 5