Ohjelmistotekniikan menetelmät, koe 2.5.2014



Samankaltaiset tiedostot
Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

Mikä yhteyssuhde on?

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

Metodien tekeminen Javalla

Ohjelmoinnin jatkokurssi, kurssikoe

Olio-ohjelmointi Javalla

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

public static void main (String [] args)

1 Tehtävän kuvaus ja analysointi

Ohjelmistojen mallintaminen, kesä 2010

Ohjelmistotekniikan menetelmät, kesä 2008

YHTEYSSUHDE (assosiation)

Interaktiivinen tarinankerronta

Ohjelmointi 2, välikoe

Rajapinta (interface)

UML ja luokkien väliset suhteet

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Tietorakenteet, laskuharjoitus 7,

Testivetoinen ohjelmistokehitys

Ohjelmistojen mallintaminen, kesä 2009

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

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

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

4. Olio-ohjelmoinista lyhyesti 4.1

Ohjelmoinnin perusteet, kurssikoe

Lista luokan sisällä

Ohjelmistojen mallintaminen, sekvenssikaaviot

Ohjelmistotekniikan menetelmät, kevät 2008

1. Olio-ohjelmointi 1.1

2. Olio-ohjelmoinista lyhyesti 2.1

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

Ohjelmistojen mallintaminen. Luento 3, 9.11.

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

Tietokannat II -kurssin harjoitustyö

Ohjelmointi 2 / 2011 Välikoe / 25.3

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Periytyminen (inheritance)

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 )

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

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

ITKP102 Ohjelmointi 1 (6 op)

Luokat ja oliot. Ville Sundberg

1. Omat operaatiot 1.1

Luokan sisällä on lista

Javan perusteita. Janne Käki

Luokkakohtaiset eli stattiset metodit ja attribuutit

Java kahdessa tunnissa. Jyry Suvilehto

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

1. Mitä tehdään ensiksi?

Interaktiivinen tarinankerronta

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Metodien tekeminen Javalla

Listarakenne (ArrayList-luokka)

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

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

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

Vaatimusmääritelystä UML:n avulla

Vahva koostumussuhde (Composition)

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

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

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

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

11. Javan valintarakenteet 11.1

ITKP102 Ohjelmointi 1 (6 op)

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

Taulukoiden käsittely Javalla

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

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

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

19. Olio-ohjelmointia Javalla 19.1

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

9. Periytyminen Javassa 9.1

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Poikkeustenkäsittely

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

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

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

KOHDELUOKAN MÄÄRITTELY

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Java-kielen perusteet

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

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

Ohjelmistotekniikan menetelmät, UML

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

Ohjelmistojen mallintaminen, mallintaminen ja UML

Olioiden yhteistyön mallintaminen

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

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

C:\MyTemp\ohj1\ohjdemot\k2012\demot\vastaukset\demo11\PP1\TokaPisin.cs 1 using System; 2 using System.Collections.Generic; 3 using System.

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

11. Javan valintarakenteet 11.1

Sisällys. 15. Lohkot. Lohkot. Lohkot

Tietorakenteet (syksy 2013)

Olio-ohjelmointi Virhetilanteiden käsittely

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

Transkriptio:

Ohjelmistotekniikan menetelmät, koe 2.5.2014 Vastaa tehtävään 3 erilliselle konseptille. Tehtävät 1 ja 2 saavat olla samalla konseptilla. Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, nimi ja opiskelijanumero. 1. (5p) Vastaa lyhyesti, kattavasti ja kokonaisin lausein alla oleviin kysymyksiin. Sopiva vastauksen pituus koko tehtävään on noin 1-2 sivua. (a) Kerro mikä on vesiputousmalli. (b) Miten ketterä ohjelmistotuotanto eroaa vesiputosmallin mukaan tapahtuvasta ohjelmistotuotannosta? (c) Minkä takia ketterä malli on nykyään suositumpi? 2. (10p) Luokka- ja sekvenssikaavioita. (a) (4p) Kurssi sisältää nimen, tiedon lukukaudesta ja joukon tilaisuuksia. Tilaisuudet voivat olla joko luentoja tai seminaari-istuntoja. Molemmissa tilaisuuksissa on läsnäolioina joukko opiskelijoita. Jokaisella luennolla on luennoijana yksi tai useampi henkilökunnan jäsen. Jokaisella kurssilla on yksi henkilökunnan jäsen vastuuhenkilönä. Henkilökunnan jäsenet voivat olla luennoijana useilla luennoilla sekä toimia useiden kurssien vastuuhenkilöinä. Jokaiseen seminaari-istuntoon liittyy yksi opiskelija roolissa esitelmöijä ja yksi opiskelija roolissa opponentti. Mallinna tilanne luokkakaaviona. (b) (2+4p) Tehtäväpaperin lopusta löytyy katkelma Java-koodia. Takaisinmallinna koodi luokka- ja sekvenssikaaviona. Piirrä sekvenssikaavioon kaikki toiminta minkä Paaohjelma-luokan metodin main suorittaminen saa aikaan. Luokkakaavioon ei tarvitse merkitä metodeja eikä oliomuuttujia, muista kuitenkin merkitä yhteyksien laatu, osallistumisrajoitteet ja suunnat tarkasti. 3. (9p) Tietojenkäsittelytieteen ainejärjestö TKO-äly haluaa uudistaa tenttitärpistöään. Tenttitärpistö on web-palvelu, josta ainejärjestön jäsenet voivat katsella vanhoja tenttejä. Palvelu toimii seuraavasti: järjestelmään kirjautuneelle käyttäjälle näytetään listaus tällä hetkellä järjestettävistä kursseista (esim. "Ohjelmistotekniikan menetelmät") sekä jo arkistoiduista kursseista (esim. "Ohjelmointi (Fortran)"). Klikkaamalla kurssia, käyttäjälle näytetään listaus kaikista järjestelmän tuntemista kurssiin liittyvistä erillis- ja kurssikokeista, sekä kurssin perustiedot, jotka haetaan laitoksen Opintojaksoverkkorajapinnasta. Valitsemalla tietyn kokeen, käyttäjälle näytetään kaikki valitun kokeen tehtävät sekä tieto kokeen vastuuhenkilöstä. Vastuuhenkilön tiedot saadaan laitoksen Peoples-verkkorajapinnasta. Jokaisesta kokeen tehtävästä näytetään tehtävän 1

maksimipistemäärä ja tehtävänanto. Käyttäjä voi myös tarkastella tehtävää tarkemmin, jolloin näytetään malliratkaisu ja arvosteluperuste (mikäli ne tunnetaan) sekä listaus kaikista kokeista joiden osana kyseinen tehtävä on ollut. Järjestelmässä on tavallisten käyttäjien lisäksi ns. ylläpitäjiä, joiden tehtävä on pitää järjestelmä ajantasaisena. Aina tentin jälkeen he lisäävät järjestelmään uuden tentin sekä sen tehtävät. Mikäli tentin jokin tehtävä on jo järjestelmässä, he voivat liittää tällaisen olemassa olevan tehtävän osaksi tenttiä. Lisäksi ylläpitäjät lisäävät järjestelmään uusia kursseja ja arkistoivat vanhoja sitä mukaa kuin laitoksen kurssitarjonta muuttuu. Ylläpitäjät voivat myös muokata olemassa olevia kursseja, tenttejä sekä tehtäviä ja tarvittaessa poistaa niitä. Samoin ylläpitäjät voivat muokata muiden käyttäjien tietoja ja ylentää heitä ylläpitäjiksi. (a) (4p) Laadi kuvatusta tietojärjestelmästä karkean tason käyttötapausmalli, eli etsi käyttäjät ja käyttötapaukset. Määrittele kunkin käyttötapauksen kulku lyhyesti (maksimissaan rivi per käyttötapaus) tekstinä. Mainitse myös jokaisen käyttötapauksen yhteydessä siihen liittyvät käyttäjät sekä esiehdot. Piirrä myös käyttötapauskaavio. (b) (1p) Kuvaa yksi käyttötapauksista tarkemmalla tasolla, ns. Cockburnin käyttötapauspohjan tai luentomonisteen tekstuaalisten kuvausten tyyliin. (c) (4p) Laadi järjestelmän kuvauksen perusteella määrittelyvaiheen (eli kohdealueen) luokkakaavio. Merkitse yhteyksiin kytkentärajoitteet ja nimeä yhteydet ja yhteysroolit tarvittaessa. Ilmeisimmät attribuutit luokille kannattaa merkitä. Muista, että toiminnallisuutta ei kannata määrittelyvaiheen luokkamalliin laittaa! 2

Tehtävään 2 (b) liittyvä ohjelmakoodi: public class Paaohjelma { public static void main(string[] args) { Lentokone lentokone = new Lentokone("Boeing 777"); Pakkaaja pakkaaja = new Pakkaaja(); List<String> tavaratlaukku1 = new ArrayList<String>(); tavaratlaukku1.add("tietokone"); tavaratlaukku1.add("keilapallo"); Matkalaukku laukku1 = new Matkalaukku(1); pakkaaja.pakkaa(laukku1, tavaratlaukku1); lentokone.lisaaruumaan(laukku1); List<String> tavaratlaukku2 = new ArrayList<String>(); tavaratlaukku2.add("hiiri"); tavaratlaukku2.add("hiiri"); Matkalaukku laukku2 = new Matkalaukku(10); pakkaaja.pakkaa(laukku2, tavaratlaukku2); lentokone.lisaaruumaan(laukku2); System.out.println(lentokone); List<Matkalaukku> laukut = lentokone.puraruuma(); for (Matkalaukku matkalaukku : laukut) { System.out.println(matkalaukku); public class Pakkaaja { public void pakkaa(matkalaukku matkalaukku, List<String> tavarat) { for (String nimi : tavarat) { Tavara tavara = matkalaukku.gettavara(nimi); if (tavara!= null) { tavara.kasvatamaaraa(); else { tavara = new Tavara(nimi, 1); matkalaukku.lisaatavara(tavara); 3

public class Matkalaukku { private List<Tavara> tavarat; private int maksimitavaramaara; public Matkalaukku(int maksimitavaramaara) { this.tavarat = new ArrayList<Tavara>(); this.maksimitavaramaara = maksimitavaramaara; private int tavaramaara() { int tavaroita = 0; for (Tavara tavara : tavarat) { tavaroita += tavara.getmaara(); return tavaroita; public void lisaatavara(tavara tavara) { if (this.tavaramaara() < this.maksimitavaramaara) { this.tavarat.add(tavara); public List<Tavara> gettavarat() { return this.tavarat; public Tavara gettavara(string nimi) { for (Tavara tavara : tavarat) { if (tavara.getnimi().equals(nimi)) { return tavara; return null; return "Matkalaukku:" + "\n Maksimitavaramäärä: " + this.maksimitavaramaara + "\n Tavaroita: " + this.tavaramaara() + "\n " + this.tavarat.tostring(); 4

public class Lentokone { private String nimi; private Ruuma ruuma; public Lentokone(String nimi) { this.nimi = nimi; ruuma = new Ruuma(100); public void lisaaruumaan(matkalaukku laukku) { ruuma.lisaa(laukku); public List<Matkalaukku> puraruuma(){ return ruuma.puraruuma(); return "Lentokone " + this.nimi + ":" + "\n Ruuma: " + ruuma.tostring(); public class Ruuma { private List<Matkalaukku> matkalaukut; private int maksimimatkalaukkumaara; public Ruuma(int maksimimatkalaukkumaara) { this.matkalaukut = new ArrayList<Matkalaukku>(); this.maksimimatkalaukkumaara = maksimimatkalaukkumaara; public void lisaa(matkalaukku matkalaukku) { if (this.matkalaukut.size() < maksimimatkalaukkumaara) { this.matkalaukut.add(matkalaukku); public List<Matkalaukku> puraruuma() { List<Matkalaukku> purettavat = new ArrayList<Matkalaukku>(); purettavat.addall(this.matkalaukut); this.matkalaukut.clear(); return purettavat; 5

// public class Ruuma { return "\n Maksimi matkalaukkumaara: " + this.maksimimatkalaukkumaara + "\n Matkalaukkuja: " + matkalaukut.size() + "\n"; public class Tavara { private String nimi; private int maara; public Tavara(String nimi, int maara) { this.nimi = nimi; this.maara = maara; public int getmaara() { return this.maara; public void kasvatamaaraa() { this.maara++; public String getnimi() { return this.nimi; return nimi + " (" + maara + " kpl)"; 6