Helsingin yliopisto, Tietojenkäsittelytieteen laitos Ohjelmistotuotanto, kurssikoe , H. Laine Arvostelu

Samankaltaiset tiedostot
Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

18. Abstraktit tietotyypit 18.1

Ohjelmointi 2 / 2010 Välikoe / 26.3

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

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

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

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

Ohjelmointi 1 C#, kevät 2013, 2. tentti

A TIETORAKENTEET JA ALGORITMIT

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

Ohjelmistotekniikan menetelmät, koe

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

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

TIETORAKENTEET JA ALGORITMIT

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Olio-ohjelmointi Javalla

Olio-ohjelmointi Syntaksikokoelma

4. Olio-ohjelmoinista lyhyesti 4.1

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

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

2. Olio-ohjelmoinista lyhyesti 2.1

Ohjelmoinnin jatkokurssi, kurssikoe

Java-kielen perusteet

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Ohjelmointi 1 C#, kevät 2013,

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Metodien tekeminen Javalla

Listarakenne (ArrayList-luokka)

Luokan sisällä on lista

Mikä yhteyssuhde on?

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Algoritmit 1. Luento 4 Ke Timo Männikkö

UML ja luokkien väliset suhteet

Kirjoita kuhunkin erilliseen vastauspaperiin kurssin nimi, tentin päiväys, oma nimesi, syntymäaikasi ja nimikirjoituksesi.

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

7/20: Paketti kasassa ensimmäistä kertaa

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

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Harjoitustyön testaus. Juha Taina

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

1. Tarkastellaan seuraavaa kaaviota

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

15. Ohjelmoinnin tekniikkaa 15.1

Java kahdessa tunnissa. Jyry Suvilehto

Tietorakenteet ja algoritmit

ITKP102 Ohjelmointi 1, syksy 2007

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

T Henkilökohtainen harjoitus: FASTAXON

1 Tehtävän kuvaus ja analysointi

3. Binääripuu, Java-toteutus

Ohjelmoinnin perusteet, kurssikoe

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

Ohjelmoinnin perusteet Y Python

Ohjelmiston testaus ja laatu. Testausmenetelmiä

Harjoitus 5 (viikko 48)

Tietorakenteet ja algoritmit

20. Javan omat luokat 20.1

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

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

P e d a c o d e ohjelmointikoulutus verkossa

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

13. Loogiset operaatiot 13.1

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

Ohjelmoinnin peruskurssien laaja oppimäärä

1. Omat operaatiot 1.1

Luokan muodostimet (Constructors)

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Tietorakenteet, laskuharjoitus 6,

14. Poikkeukset 14.1

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Taulukot. Jukka Harju, Jukka Juslin

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

Verifioinnin ja validoinnin ero. 7. Verifiointi ja validointi. Verifiointi- ja validointitekniikat. Verifiointi- ja validointitekniikat II

Java-kielen perusteita

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

17. Javan omat luokat 17.1

15. Ohjelmoinnin tekniikkaa 15.1

Algoritmit 2. Demot Timo Männikkö

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

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine

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

JUnit ja EasyMock (TilaustenKäsittely)

Testausraportti. Oppimistavoitteiden hallintajärjestelmä harri

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

812336A C++ -kielen perusteet,

13. Loogiset operaatiot 13.1

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Java-kielen perusteet

Transkriptio:

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Ohjelmistotuotanto, kurssikoe 15.11.2002, H. Laine Arvostelu Arvostelu kannattaa tehdä siten että maksimipistemäärä on 6 pistettä. On sitä helpompaa arvostella kun on vähemmän pisteitä on käytettävissä Pisteet kerrotaan sitten lopuksi kahdella. Plussia, miinuksia ja puolikkaita voi käyttää jos se tuntuu välttämättömältä. Pisteytys on seuraavissa ohjeissa 6 pisteen mukainen. 1. Vertaile demokraattisen tiimin ja johtajavetoisen projektiryhmän soveltuvuutta eri tyyppisiin ohjelmistoprojekteihin. Kiinnitä vertailussasi huomiota esimerkiksi tehtävän vaikeuteen, tuotteen kokoon, hankkeen kestoon, modulaarisuuteen, vaadittavaan laatuun ja aikataulurajoitteisiin (12p) Tässä on annettu kuusi kohtaa. Lyhyt yhden lauseen perustelu riittää kuhunkin kuhunkin kohtaan. a) Vaikea tehtävä edellyttää ratkaisuvaihtoehtojen kartoitusta ja erilaisten näkökohtien huomioimista ja niistä keskustelua, tiimi sopii tähän paremmin kuin johtajavetoinen b) Ison tuotteen kohdalla täytyy tehdä paljon päätöksiä ja silti pysyä aikataulussa. Tiimissä aikaa kuluu keskusteluihin, päätöksissä pitäisi saavuttaa yhteisymmärrys, joten johtajavetoinen soveltuu paremmin. c) Pitkäkestoisissa hankkeissa tiimi on yhteistyön kannalta parempi toisaalta se pidentää kestoa. d) Jos työ on jaettavissa helposti moduuleiksi se soveltuu hyvin johtajavetoiseen projektiin, ei tästä tiimityöskentelyssäkään ole haittaa. e) Tiimityöskentelyssä ratkaisuja käydään läpi perusteellisemmin mikä parantaa laatua. Johtajavetoisessa laatu on päällikön vastuulla. f) Tiimityöskentely vie enemmän aikaa. Tiukan aikataulun tapauksessa johtajavetoinen sopii paremmin. Jos perustelu on oikein, niin piste per kohta. Jos on todettu oikein, että a on parempi kuin b, mutta ei ole mitään perustelua, niin vähennetään ½. Oikea tulos, mutta väärä perustelu ½. Jos on hyvin perusteltu jokin muu kuin yllä esitetty, niin siitä voi antaa ½ tai jopa 1. 2. Tietovirtakaavio (data flow diagram) on perinteinen ohjelmiston toiminnallisuuden määrittelytekniikka. Esittele tekniikka lyhyesti. Laadi esimerkkinä karkean tason tietovirtakaavio kuvaamaan ohjelmiston katselmusprosessia (formal review) (yksi tarkennos riittää). (12p) Tässä pitäisi esitellä ulkoinen olio, prosessi, tietovuo ja tietovarasto sekä hierarkkisen tarkennuksen periaate. Idean esittely 4 pistettä (eli puolikas per käsite) ja esimerkki 2 pistettä. Alla karkea DFD.

tekijät tarkastuskohde, kokouskutsu lausunnot tarkastajat ajat, osallistujat vetäjä materiaali, kokouskutsu, materiaali, kokouskutsu, tarkastuskohde materiaalin vastaanotto materiaali materiaaliarkisto lähdetieto kommentit läpikäynti lausunnot ajat, osallistujat valmistelu kokouskutsu 3. Luokan QueueArray tehtävänä on toteuttaa jono taulukkoa hyväksikäyttäen. Metodi toqueue lisää solmun jonon loppuun ja metodi fromqueue poistaa solmun jonon alusta. Jono muodostuu peräkkäisistä taulukon alkioista. Jonosta tiedetään alku- ja loppukohta. Lisäys vaikuttaa loppukohtaan ja poisto alkukohtaan. Taulukkoa käytetään renkaana, joten taulukon viimeistä alkiota seuraavana jonoalkiona voi olla taulukon ensimmäinen alkio. Kääntöpuolella on Tietorakenteet kurssilta mukaeltu toteutus luokalle. Määrittele millaisia testiaineistoja tarvitaan metodien toqueue ja fromqueue toiminnalliseen testaukseen (black box - testaus, varsinaista dataa ei tarvitse antaa). Metodeja testattaessa luokan tietorakenne oletetaan tunnetuksi. Perustele aineistosi. Miten hoitaisit käytännössä luokan testauksen? Tarvitaanko jotain apumetodeja, millaisia? (12p)

Jos tämä on ratkaistu white box ratkaisuna oikein annetaan max 3 pistettä. Ratkaisuun pitäisi sisältyä tekijäanalyysi: gsize: 1, jokin (=5), maxint-1 jonon koko: tyhjä, 1, usea(=3), täysi jonon sijainti: a) first=0, last>0 b) 0<first<qSize-1,first<last<qSize c) 0<first<qSize-1,first<last=qSize d) last<first<qsize-1 e) last< first = qsize-1 Taulukkokoolla 1: lisäys ja haku jonon koko: tyhjä täysi=1 alkukohta: 0 0 Taulukkokoolla 5: Tehdään lisäys ja haku jonon koko: tyhjä 1 3 täysi alkukohta: 0 0 0 0 alkukohta: 1 1 1 2 alkukohta: 4 4 2 4 3 4 Taulukkokoolla maxint-1 vain ääripäät voivat poiketa, joten testataan lisäys ja poisto: jonon koko: tyhjä 1 3 täysi alkukohta: 0 0 0 0

alkukohta: max-1 max-1 max-3 2 alkukohta: max-1 max-1 Arvot: NULL lisäys tarvitsee testata vain kertaalleen. Muuten testiaineistona on kätevintä käyttää järjestysnumeroista generoituja etunollallisia merkkijonoja. Jonot voidaan ajaa testitilanteisiin lisäys ja haku sekvensseillä, joten siihen ei tarvita apurutiineja. Jonon alkiot ja alku ja loppukohdan tulostava metodi olisi hyödyllinen, ei kannata käyttää isoon taulukkoon. Testaus main-metodiin. Oleellisten tapauksien puuttumista voisi suhteuttaa yllä oleviin taulukoihin Miinusta: Rengasta ei ole testattu, Testataan vain yhdellä taulukkokoolla. Jonokoot suppeita Satunnaisesti generoitujen olioiden käyttö ei black box epämääräiset tai puuttuvat perustelut kuvattu yleisesti periaatetta mutta ei sovellettu 4.Mitä tarkoitetaan suunnittelumallilla (design pattern)? Kuvaa jokin (vain yksi) suunnittelumalleista Kooste (Composite), Komento (Command) tai Vierailija (Visitor) ja selvitä sen käyttötarkoitus ja edut sekä ongelmat. (12p) Käsitteen kuvaus oikein 4 pistettä: Kokemusperäinen hyväksihavaittu systemaattisesti dokumentoitu tapa ratkaista jokin suunnitteluongelma. Tässä kysyttiin design patternia, ei ole siis syytä selitellä muita. Esimerkistä pitäisi selkeästi käydä esiin idea sekä edut ja mahdolliset ongelmat. Miinusta: Kuvaus vaikeaselkoinen tai epämääräinen tai väärin, Kuvauksessa ei ole luokkakaaviota (kooste, vierailija), komennolla ei ehkä tarvita. Perusidea jää epäselväksi Ongelmien puute korkeintaan Etujejen puute

public class QueueArray { private int qsize=0; private Object[] items = null; private int first, last; private int cnt; // maximum length of the queue // array // index of head and tail // number of items public QueueArray(int maxsize) { // constructor makes an empty queue of at most maxsize items // if maxsize in negative or zero a queue of one items is established. if (maxsize>0) { items = new Object [maxsize]; qsize= maxsize; else { items = new Object [1]; qsize= 1; first=0; last= -1; cnt=0; public boolean isempty() { return cnt==0; // returns true if queue is empty otherwise false public boolean isfull() { return cnt==qsize; // returns true if queue is full otherwise false public int itemcount() { return cnt; // returns the number of items in the queue public boolean toqueue(object newitem) { // appends a new item. Returns true if append succeeds and // false if it fails. // Fail situations: newitem is null or queue is full. if (newitem == null) return false; if (isfull()) return false; else { ++last; if (last == qsize) last = 0; items[last] = newitem; ++cnt; return true; public Object fromqueue() { // returns the first item of the queue or null if the // queue is empty. Deletes the first item from the queue. if (isempty()) return null; Object firstitem = items[first]; items[first] = null; ++first; if (first == qsize) first = 0; --cnt; return firstitem;