Toteutusdokumentti. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Koko: px
Aloita esitys sivulta:

Download "Toteutusdokumentti. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos"

Transkriptio

1 Toteutusdokumentti Populous Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

2 Kurssi Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Heli Borg Markus Heinonen Ville Luolajan-Mikkola Olli Orajärvi Asiakas Petteri Hintsanen Johtoryhmä Juha Taina Turjo Tuohiniemi Kotisivu Versiohistoria Versio Päiväys Tehdyt muutokset Ensimmäinen luonnos Ensimmäinen versio

3 Sisältö i 1 Johdanto Tuotteen tausta ja tarkoitus Dokumentin rakenne Terminologia Järjestelmän yleiskuvaus Toteutus- ja toimintaympäristö Ohjelmointikielet Rajaukset Arkkitehtuurikuvaus Komponenttien väliset suhteet Suorittava kerros Kontrollikerros Käyttöliittymäkerros Luokkien väliset suhteet Luokkakaavio Ydin-komponentti Rajapinta Enumeraattorit ICore-rajapinta IStatusCallback-rajapinta Core-luokka CoreFactory-luokka Parameters-luokka Log-luokka Globaalit määrittelyt Pedigree-komponentti Rajapinta Enumeraattorit IPedigree-rajapinta Pedigree-luokka

4 ii PedigreeFactory-luokka FamilyTree-luokka SubPopulation-luokka Individual-luokka Segment-luokka Marker-komponentti Rajapinta Enumeraattorit IMarker-rajapinta Marker-luokka MarkerFactory-luokka Tekstikäyttöliittymä-komponentti Rajapinta CursesUI-luokka CursesUIMenu-luokka CursesUIParam-luokka CursesUIResult-luokka Hakemistorakenne Tiedostoformaatit pedigree chrom param Käyttöliittymä Komentorivikäyttöliittymä Ncurses Käyttötapaukset Käyttötapaus 1: Sokeritaudin periytymisen tutkiminen Käyttötapaus 2: Aineistoa artikkelia varten Käyttötapaus 3: Sokeritautigeenitutkimuksen uusiminen Käyttötapaus 4: Geeniparametrien toimivuuden testaus Käyttötapaus 5: Väärät tutkimustiedot Käyttötapaus 6: Ämmänsaaren väestön kehittyminen

5 4.3.7 Käyttötapaus 7: Siirtolaisten vaikutus Ämmänsaaren geeniperimään iii

6 1 Johdanto 1 Tämä toteutusdokumentti kuvaa toteutetun Populous-populaatiosimulaatorin teknisen toteutuksen. Toteutusdokumentissa kuvataan yksityiskohtaisesti toteutetun järjestelmän arkkitehtuuri, komponentit, tietosisältö sekä toteutettavat käyttöliittymät. Toteutusdokumentin perustana käytetään Populous-projektin suunnitteludokumenttia Tuotteen tausta ja tarkoitus Populous on syksyn 2004 aikana Helsingin yliopiston Tietojenkäsittelytieteen laitoksella Ohjelmistotuotantoprojekti -kurssin puitteissa toteutettu projekti. Projektissa tuotettiin populaation kehityksen simulointiin käytettävän ohjelmiston osa. Projektin pohjana on HIIT -perustutkimusyksikössä käytössä oleva populaatiosimulaattori. Nykyisen populaatiosimulaattorin toiminnassa ilmenneet ongelmat ovat lähtökohtana Populous-projektille. Simulaattori on tehty väitöskirjatyön pohjalta ja muokattu moneen kertaan. Nyt tämän ohjelmistotuotantoprojektin avulla halutaan selkeyttää käytössä olevaa ohjelmaa. Nykyisellään tuote koostuu neljästä erillisestä osasta: genped, chrom, simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projektissa korvataan käytössä olevan ohjelmiston kaksi ensimmäistä osaa tavoitteena prosessin suoraviivaistaminen. Lisäksi laaditaan käyttöliittymä ohjelmiston käytön helpottamiseksi. Erilaisten geenikartoitusmenetelmien ja genomin rakenteen selvittämiseen tarkoitettujen menetelmien testaamisessa simuloidut aineistot ovat välttämättömiä. Simulointiprosessin lähtökohtana on tyypillisesti yksi populaatioisolaatti. Populaatio koostuu pienestä joukosta yksilöitä, joista populaatio kasvaa annettuun loppukokoon saakka. Simulaatio jäljittelee perusjoukon geenien periytymistä jälkeläisille ja sukupolvelta toiselle laajenemisprosessin kuluessa. 1.2 Dokumentin rakenne Luvussa kaksi kuvataan projektin yhteydessä toteutettu järjestelmä yleisesti. Yleiskuvaukseen sisältyy järjestelmän toteutus- ja toimintaympäristön selvittäminen, käytettävien ohjelmointikielten määritteleminen ja toteutetun ohjelman rajaus. Luku kolme kuvaa toteutetun järjestelmän arkkitehtuurin. Se sisältää yksityiskohtaisen kuvauksen kustakin järjestelmän komponentista ja niiden välisistä suhteista. Ensimmäinen aliluku käsittelee kamponenttien välisiä suhteita ja toinen luokkien välisiä suhteita. Aliluvut kuvaavat ydin-, pedigree-, marker- ja tekstikäyttöliittymäkomponenttien rajapintoja ja luokkia. Luvussa 4 kuvataan projektin yhteydessä toteutetut käyttöliittymät, joita on kaksi: komentorivikäyttöliittymä ja tekstipohjainen Ncurses -käyttöliittymä.

7 2 1.3 Terminologia Dokumentissa käytetyt termit ja lyhenteet: Alipopulaatio: Populaatio voi jakautua useisiin populaatioisolaatteihin. Alipopulaatioiden välillä pariutumistodennäköisyys on pienempi kuin alipopulaation sisällä. Emäspari: Kromosomeissa sijaitsevat toisiaan vastaavat dna:n rakenneosat. (engl. basepair). Genomi: Perimä eli eliön tai solun sisältämä perinnöllinen informaatio. HIIT -perustutkimusyksikkö: Tietojenkäsittelytieteen laitoksen yhteydessä toimiva Helsingin yliopiston ja Teknillisen korkeakoulun yhteisen Helsinki Institute for Information Technology -tutkimuslaitoksen (HIIT) perustutkimusyksikkö (BRU).Yksikön keskeisiä tutkimusalueita ovat data-analyysi, adaptiivinen laskenta ja laskennallinen neurotiede. Iterointi: Iteroidaan, eli ajetaan koko simulaatiotyö samoilla parametreilla useita kertoja. Alatapaus Marker-iterointi. Loppupopulaatio: Populaatiosimulaation lopussa olevan viimeisen sukupolven edustajat muodostavat loppupopulaation. Marker-iterointi: Iteroidaan simulaatiotyötä, mutta otetaan Pedigree- tiedostot valmiina, jolloin iteroidaan ainoastaan Simcoa ja Markertoolia, ts. sukupuu pysyy staattisena. Markkeri: Kromosomissa paikka, jossa esiintyy yksilöiden välistä vaihtelua. Markertool: Valmis itsenäinen binääri, joka ottaa otoksen markereita kromosomitiedosta käyttäen myös Simcon tulostetta apunaan. Erikoistapauksessa (vanhemmat mukaan otokseen -optio) tarvitaan syötteenä lisäksi viimeisen sukupolven sukupuu ja toiseksi viimeisen sukupolven kromosomitiedosto. Ncurses: Yleisesti käytössä oleva kirjasto tekstitilaisen terminaali-ikkunan sisällön ja toimintojen määrittelyyn. Tässä projektissa NCURSES:lla on tarkoitus toteuttaa yksinkertainen ikkunamainen käyttöliittymä, jolla voidaan suorittaa rinnakkaista ajoa lukuunottamatta samat käyttötapaukset kuin Javalla toteutettava käyttöliittymä. Pedigree: Ohjelman komponentti, jonka vastuulla on sukupuun ja sen yksilöiden genotyyppien generointi (rekombinoimalla), sekä sukupolven kromosomit. Perustajajäsen: Populaation ensimmäisen sukupolven edustaja, jonka perimästä simulaatio lähtee liikkeelle. Populaatio: Joukko saman lajin yksilöitä, jotka elävät samalla alueella. Populaatioisolaatti: Eristäytynyt populaatio, jossa ei geenivaihtoa ulkopuolelta.

8 Siirtolainen: Muualta populaatioon tuleva yksilö, jonka geeniperimä poikkeaa ko. populaatioisolaatin perimästä. Simco: Valmis itsenäinen binääri, joka generoi halutun määrän SNP- tai STR-markereita (kohtia geenissä, joita voidaan tarkastetella erojen varalta). Toimii itsenäisesti. SNP -mutaatio: Lajin sisäinen, nukleotidisekvenssin tietyssä kohdassa esiintyvä vaihtelu. Muutokset tapahtuvat ainoastaan yhdessä emäsparissa.(engl. SNP = Single Nucleotide Polymorphism). STR-markkerit: Lyhyellä peräkkäisellä kromosomijaksolla toistuvat markkerit. Vaihtelu muodostuu jakson toistojen lukumäärästä. (engl. STR = Short Tandem Repeat). Tekijäinvaihto: Kromosomien risteäminen jakautumisen yhteydessä. (engl. cross-over). Tree: Pelkkä sukupuu ilman perintöainesta. 3 2 Järjestelmän yleiskuvaus Tässä luvussa kuvataan toteutettu järjestelmä. Järjestelmän liittyminen nykyisin käytössä oleviin järjestelmän osiin on esitetty kuvassa 1. Ohjelma muodostuu ohjelmakomponentista, siihen liittyvistä käyttöliittymistä ja kahdesta ulkoisesta ohjelmast: Simco ja Markertool. Simco generoi populaatiolle markkerit ja Markertool kerää populaatiosta otoksen henkilöitä ja heidän markkeridatansa. Ohjelman sisäinen osa vastaa sukupuu- ja geeniaineiston käsittelystä yhdessä ulkoisten komponenttien kanssa. Ohjelmaa voi käyttää kahdella eri tavalla. Komentorivikäyttöliittymällä voidaan yhdellä komennolla ajaa koko simulaatio läpi. Tekstipohjainen curses-käyttöliittymä, joka pohjautuu teksti- ja valintakenttiin, tarjoaa komentoriviä helpomman mahdollisuuden ajaa ohjelmaa. Molemmat käyttöliittymät ovat englanninkielisiä. 2.1 Toteutus- ja toimintaympäristö Koska järjestelmä on suunniteltu nimenomaan Tietojenkäsittelytieteen laitoksella toimivan HIIT-perustutkimusyksikön käyttöön, se on suunniteltu toimimaan laitoksen Linuxkäyttöympäristössä. Ohjelmassa on kiinnitetty erityistä huomiota ohjelman etäkäyttöön, esim. SSH:n kautta, suunnittelemalla tekstipohjainen käyttöliittymä, joka tukee mahdollisimman hyvin tällaista käyttöä.

9 4 2.2 Ohjelmointikielet Kuva 1: Toteutettu järjestelmä. Populous ohjelmoidaan Tietojenkäsittelytieteen laitoksen Linux-ympäristössä C++- kielellä käyttäen sen standardikirjastoja. Tekstikäyttöliittymässä hyödynnetään C-kielistä ncurseskirjastoa. Ohjelman testauksessa käytetyt tulosteiden oikeellisuuden tarkistusskriptit toteutettiin Perlillä. 2.3 Rajaukset Populousin on toimittava yhdessä valmiina olevien komponenttien, simcon ja markertoolin, kanssa. Kaikkien syöte- ja tulostetiedostojen on oltava yhteensopivia em. ohjelmien kanssa.

10 3 Arkkitehtuurikuvaus 5 Tässä kappaleessa kuvataan toteutetun järjestelmän arkkitehtuuri. Järjestelmän komponentit ja niiden väliset suhteet on selvitetään omissa aliluvuissaan. Arkkitehtuurikaavio on esitetty kuvassa 2. Kuva 2: Toteutetun järjestelmän arkkitehtuuri. 3.1 Komponenttien väliset suhteet Ohjelmisto jakautuu itsenäisiin komponentteihin, joiden välillä on minimaaliset rajapinnat. Komponenttien välinen liikenne koostuu rajapintakutsuista, ja ainoastaan Ydin-komponentti on yhteydessä useampaan kuin yhteen muuhun komponenttiin. Ohjelman rakenne on erittäin modulaarinen ja helposti päivitettävä. Ohjelmalla on kiinnitetty suoritusjärjestys, jota ei varioida missään tapauksessa. Ohjelman erilaiset suoritusmoodit saadaan jättämällä joitain vaiheita pois, esim. komentoriviltä ohjelmaa ajettaessa jätetään käyttöliittymäkomponenttikutsu pois ja simulaatiossa on mahdollista ohittaa Pedigree- komponentti kokonaan. Ohjelman komponenttien kutsujärjestys on: main()-metodi -> Ncurses -> Ydin -> Pedigree -> Ydin -> Marker -> Ydin -> Ncurses. Kun ohjelma käynnistetään komentoriviltä, main-metodi parsii parametrit, tarkistaa niiden eheyden sekä luo ja käynnistää Core-luokan. Core luo tuloshakemiston, siirtyy sinne, ajaa simulaation kutsumalla Pedigree- ja Marker-komponentteja peräkkäin ja lopuksi

11 poistaa turhat tiedostot ja vapauttaa resurssit. Ncursesin tapauksessa main-metodi luo ja käynnistää ncurses-käyttöliittymäkomponentin, jossa annetaan parametrit ja käynnistetään Core-luokan RunSimulation()-metodi näillä parametreilla. Ohjelman algoritmisesta luonteesta huolimatta interaktiivisuuteen (ts. kesken suorituksen päivitetään käyttäjällä seurantatietoja) panostettiin suunnittelemalla callback- järjestelmä, jossa suorituksen aikana tietyissä pisteissä kutsutaan kutsuvaa osaa (käyttöliittymä), jolloin se saa mahdollisuuden päivittää käyttöliittymää. Säikeitä ei käytetä. Ohjelmisto jakautuu kolmeen kerrokseen: suorittava kerros (Pedigree, Marker), kontrollikerros (Ydin) ja käyttöliittymäkerros (tekstikäyttöliittymä, komentorivikäyttöliittymä). Lisäksi suorittavaan kerrokseen liittyy kaksi ulkoista suorittavaa komponenttia, jotka ovat vanhasta järjestelmästä sellaisinaan otettuja valmiita binääreitä (simco ja markertool) Suorittava kerros Suorittavassa kerroksessa olevat komponentit Pedigree ja Marker tekevät varsinaisen simulaation eri osavaiheet. Pedigree-komponentti luo sukupuun ja siihen yleensä liitettävät kromosomitiedot, ja Marker luo niiden ja Marker-komponentin sisällä luotujen markkerien pohjalta simulaation lopullisen tuloksen. Marker-komponentti tarvitsee aina syötteekseen Pedigree-komponentin tuloksen, eli nämä komponentit ajetaan aina peräkkäin tai otetaan Pedigree-tuotteet valmiina tiedostoista. Marker ei varsinaisesti itse tee suorittavaa työtä, vaan kutsuu ulkoisia ohjelmia, simcoa ja markertoolia. Kerroksen komponentit saavat suorittamiseen tarvittavat tiedot parametrinaan. Komponentit tiedottavat työn etenemisestä niitä kutsunutta Ydin-komponenttia callback-rajapinnan kautta Kontrollikerros Kontrollikerros hallinnoi yhden työn suorituksen. Se ajaa suorittavan kerroksen komponentit järjestyksessä Pedigree, Marker; välittää tietoa työn etenemisestä ydintä kutsuneelle komponentille callback-rajapinnan kautta, ja työn päätyttyä huolehtii, että ylimääräiset työn ohessa luodut väliaikaistiedostot tuhotaan. Ydin saa parametrinaan kaikki työn suorittamiseen tarvittavat arvot, ja tiedon siitä minkä tyyppistä työtä ollaan suorittamassa: generoidaan ainoastaan sukupuu halutuin sukupolvin ilman kromosomeja (#1), generoidaa sukupuut ja siihen kromosomit (#2), suoritetaan simulaatio kokonaisuudessaan (#3) tai suoritetaan ainoastaan Marker parametrina annetulla sukupuulla ja kromosomidatalla (#4). Kaikissa tapauksissa on mahdollista iteroida simulaatioita ja useimmissa tapauksissa laajentaa sitä esim. alipopulaatioilla. Yksinkertaisimmassa tapauksessa #1 suoritetaan ainoastaan Pedigree, ja tästäkin ainoastaan ensimmäinen puoli. Tuloksena saadaan pelkkä sukupuu ilman kromosomitietoja. Tapaus #2:ssa suoritetaan Pedigree kokonaisuudessaan. Tulokseksi saadaan sukupuu ja kromosomitiedot.

12 Yleisimmässä tapauksessa #3 suoritetaan sekä Pedigree että Marker kertaalleen alusta loppuun. Tulokseksi saadaan markertool-ohjelman tuloste. Välituloksien säilytys määritellään parametreissa. Tapaus #4:ssä suoritetaan ainoastaan Marker-komponentti. Tällöin Pedigree-komponentin generoimat sukupuu- ja kromosomitiedostot annetaan parametrina, jolloin Pedigree-vaihe voidaan ohittaa. Myös iterointi on mahdolista, jolloin Marker suoritetaan samoilla parametreilla haluttu määrä kertoja samoilla sukupuutiedostoilla, säilyttäen jokaisen ajokerran tulokset omassa tiedostossaan. Kontrollikerroksen muodostavaan Ydin-komponenttiin on sijoiteltu kaikki ohjelman osat, jotka eivät erityisesti ole suorittavaa kerrosta tai käyttöliittymää. Näitä ovat parametri-, log- ja sighandlerluokka sekä main, enum-määrittelyluokka ja istatuscallback-rajapintaluokka Käyttöliittymäkerros Ohjelmaan on rakennettu kaksi käyttöliittymää: teksti- ja komentorivikäyttöliittymä. Komentorivikäyttöliittymä ei ole interaktiivinen ja on tarkoitettu ohjelman tehokkaaseen käyttöön ja laajentamiseen. Tekstikäyttöliittymä on rakennettu ohjelman pääasialliseksi käyttöliittymäksi. Tekstikäyttöliittymä koristelee komentorivikäyttöliittymän parametrien annon syöttökentillä, arvojen virheentarkistuksilla ja simuloinnin tekstuaalisella seurannalla. Käyttöliittymä ei ole täysin interaktiivinen simuloinnin suorituksen aikana, jolloin käyttäjälle näytetään seurantaruutu tilatietoineen. Ajon voi terminoida control-c:llä, mikä sammuttaa koko ohjelman siististi, mutta ei takaa tulostietojen säilyvyyttä. 3.2 Luokkien väliset suhteet Tässä luvussa kuvataan luokkien välisiä suhteita. Luokkakaaviossa esitetään kaikki toteutettavan järjestelmän luokat. Lisäksi kuvataan luokkien välistä verkkokommunikaatiota ja palvelupyyntöjä sekä viestien koodausta tarkemmin Luokkakaavio Koko järjestelmän luokkakaavio on esitetty kuvassa 3. Luokkakaaviossa ovat ainoastaan järjestelmän luokat, eli siitä puuttuvat globaalit main- ja sig_handler-funktiot ja globaali muuttuja process_state. Nämä kuuluvat loogisesti Ydin-komponenttiin, ja main-funktio voi kutsua joko Core- tai CursesUI-luokkaa. 3.3 Ydin-komponentti

13 8 Kuva 3: Toteutetun järjestelmän luokkakaavio Ydin on koko ohjelman toimintaa koordinoiva ja ohjaava komponentti. Ydin saa viestejä joko suoraan käyttäjältä (komentorivikäyttöliittymä) tai tekstipohjaiselta käyttöliittymältä. Ydin toimii välikerroksena käyttäjän ja simulaation suorittavien komponenttien välissä. Ydin ohjaa Pedigree- ja Marker-komponentin käyttöä, sekä välittää tietoa käyttäjälle käyttöliittymän kautta ja poistaa väliaikaisia tiedostoja ja ylläpitää tiedon välitystä. Ydin-komponenttiin on myös sisällytetty globaalit luokat Parameters ja Log, sekä kaikki kaikki globaalit funktiot ja muuttujat. Perusteena tälle on, että Ydin-komponentin katsotaan olevan keskeisin osa sovellusta. Ytimen luokat ja näiden väliset suhteet on esitetty kuvassa 4.

14 9 Kuva 4: Ydin-komponentin luokat Rajapinta Ydin tarjoaa palveluita tekstikäyttöliittymälle. Ydin sisältää simulaation ajojen hallinnan, koordinoinnin, lokin, virhetilanteiden hallinnan ja delegoinnin ohjelman sisällä sekä tulosten ja tulosteiden ohjaamisen käyttäjälle. Ytimen on tarkoitus piilottaa mahdollisim-

15 man paljon populaatiosimulaatioteknisistä asioista ja tarjota keskitetysti esim. parametrien parseroinnin, validoinnin (Parameters-luokka) ja simulaatiokomponenttien kutsun (Core-luokka). Tyypillisessä simulaatiokäyttötapauksessa käyttäjä antaa käyttöliittymän kautta halutut parametrit. Käyttöliittymä syöttää parametrit Parameters-olioon, joka annetaan ytimelle. Parameters-luokka parsii syötteet ja tarkistaa niiden arvoalueet ja eheyden. Ydin määrittää parametrien pohjalta simulaatiotyön. Tämän takia ydin tarjoaa käyttöliittymille hyvin pelkistetyn rajapinnan, joka koostuu pääasiassa parametrien vastaanottamisesta. Näin käyttöliittymät voidaan erottaa simulaatiosta ja sen toteutuksesta mahdollisimman tehokkaasti. int RunSimulation(TSimType type, Parameters params) Luovutetaan parametrijoukko ytimelle suoritusta varten. Parametri type määrittelee minkä tyyppinen simulaatio halutaan suorittaa. Määritellään rajapinnassa ICore. int main(int argc, char *argv[]) Ohjelmiston globaali pääfunktio. Tätä kutsutaan ensimmäiseksi kun ohjelma käynnistetään komentoriviltä. Tunnistaa parametreista halutaanko ohjelmaa ajaa palvelimena, tekstikäyttöliittymänä vai suoraan suorittaa simulaatio, ja käynnistää sen mukaisen komponentin, josta ohjelman suoritus varsinaisesti alkaa. void Update(TStatus status) Callback-metodi, jolla Pedigree- ja Marker-komponentit lähettävät tietoa edistymisestään. Määritellään rajapinnassa IStatusCallback Enumeraattorit TStatus Kuvaa simulaatiotyön tilaa. Mahdolliset arvot ovat: INIT = työtä ei vielä aloitettu, TREE = yksi sukupuun sukupolvi luotu kromosomeineen, PEDIGREE = kaikki sukupolvet luotu, MARKER = simco ajettu (markkerit generoitu), SAMPLE = markertool ajettu (otos otettu), READY = simco ja markertool ajettu kokonaisuudessa (kaikki mahdolliset iteraatiot), työ valmis ERROR = työn suorituksessa on tapahtunut virhe TProcessState Kuvaa prosessin tilaa. Mahdolliset arvot ovat: INIT = alkutila, NCURSES = tekstikäyttöliittymä, CORE = prosessi suorittaa simulaatiota TSimType Kuvaa simulaation tyyppiä. Mahdolliset arvot ovat:

16 11 NONE = simulaatiota ei suoriteta, FULL = täysi ajo alusta loppuun, TREE = luodaan pelkkä sukupuu Pedigree-komponentissa, PEDIGREE = ajetaan vain Pedigree-komponentti, PROCESS = suoritetaan pelkkä Marker-komponentti valmiille sukupuulle ICore-rajapinta ICore on ydinkomponentin kutsurajapinta. Metodit public int RunSimulation(TSimType type, Parameters &params) Metodilla käynnistetään simulaation suoritus. Onnistuneen suorituksen yhteydessä paluuarvo on 0, virhetilanteessa -1. Tieto varsinaisen virheen aiheuttajasta kirjataan lokitiedostoon IStatusCallback-rajapinta IStatusCallback luo rajapinnan, jolla välitetään tietoa työn edistymisestä kutsuneelle taholle. Metodit public virtual void Update(TStatus status) Callback-metodilla, jolla kontrolli voidaan siirtää hetkeksi työn suorituksesta hierarkiassa ylemmälle kerrokselle. Parametri status on enumeraattorityyppiä TStatus Core-luokka Core on Ydin-komponentin pääluokka. Core hoitaa töiden koordinoinnin ja jakaa annettujen parametrien mukaan tehtävät Pedigree- ja Marker- komponenteille. Metodit public int RunSimulation(TSimType type, Parameters &params) Ajaa simulaation. Saa syötteenään valmiin ja tarkistetun Parameters-olion. Parametri type on enumeraattorityyppiä TSimType ja määrittelee simulaation tyypin CoreFactory-luokka CoreFactory on tehdasolio, jolla luodaan ICore-tyyppisiä olioita.

17 12 Metodit public static ICore* Construct() Luo ICore-tyyppisen olion. Varsinaisen toteuttavan luokan valinta tehdään metodin sisällä. Virhetilanteessa palautetun osoittimen arvo on Parameters-luokka Parameters-luokka kapseloi ohjelman parametrit. Se luodaan ja täytetään käyttöliittymätasolla ja annetaan ytimelle simulaation suoritusta varten. Komentoriviltä käytettäessä käyttöliittymätaso on ydin itse, jolloin se kontruoidaan siellä. Se ei varsinaisesti kuulu Ydin-komponenttiin, vaan kulkee suorituksen mukana komponentista toiseen. Parameters-olion voi konstruoida joko käyttämällä kontruktoria, joka saa syötteenään char-merkkijonotaulukossa kaikki parametrit (komentoriviltä ja palvelimesta) tai attribuutit voi täyttää itse (tekstikäyttöliittymä). Luonnin jälkeen tulee kutsua Check-metodia, joka tarkistaa parametri-olion parametrit. Parameters-oliossa kaikilla kentillä on asetettuna arvo, jota käytetään. Oletusarvoja käytettäessä on Parameters-oliota luovan metodin tehtävä asettaa nämä arvot oikein. Metodit public int Check(TSimType type) Tarkistaa parametrina saamansa tyypin perusteella siihen liittyvien parametrien arvojen oikeellisuuden ja funktionaalisen eheyden. Metodin paluuarvo on onnistuneella suorituksella 0 ja virhetilanteessa -1. Virhetilanteen varsinainen aiheuttaja kirjataan lokitiedostoon. Metodin parametri type on enumeraattorityyppiä TSimType. public int ParseFile(char *filename) Käytetään lataamaan parametrien arvot tiedostosta. Lukee annetun tiedoston sisällön ja asettaa ParseString()-metodin avulla olion kenttien arvot sen mukaisiksi. public int ParseString(char *str) Käytetään asettamaan parametrit yhdellä komentorivimuotoisella merkkijonolla. Pilkkoo annettun merkkijonon ParseArgv()-metodin ymmärtämään muotoon ja syöttää sen tälle. public int ParseArgv(int argc, char **argv) Asettaa olion kentät ohjelmiston komentoriviparametrien perusteella. Saa parametrikseen samat tiedot kuin main()-funktio, mutta ilman ensimmäistä, ohjelman ajotiedoston sisältävää kenttää. Konstruktori pyrkii löytämään merkkijonoista kaikki mahdolliset määritellyt parametrit ja asettamaan arvonsa sen mukaisesti. Virhetilanteissa osa arvoista jää asettamatta, ja oliota luovan onkin kutsuttava Check-metodia

18 13 Koodi Selitys -1 Määrittelemätön virhe -2 Arvoaluevirhe jossakin parametrissa -3 Kaikkia vaadittuja parametreja ei asetettu -4 Ristiriita parametreissa Taulukko 1: Parameters::Check()-virhekoodit vielä tämän jälkeen varmistaakseen luonnin onnistumisen ja että kaikki tarvittavat parametrit oli määritelty. public int SetSubPopulationMigrations(char *str) Parametrina annettavan 0-terminoidun merkkijonon on oltava samassa muodossa kuin alipopulaatioiden migraatiotodennäköisyydet määritellään ohjelman parametreissa. Metodi parsii tämän merkkijonon ja asettaa sen olion kentän subpopulation- Migrations arvoksi. Palauttaa onnistuessaan arvon 0, virhetilanteessa -1. public int ToFile(char *filename) Tallentaa olion tiedot tiedostoon, jonka nimi annetaan parametrina. Tiedoston sisältö tallennetaan muotoon, jonka ParseFile()-metodi osaa lukea. public int ToLog() Tulostaa olion kaikki parametrit logiin debug-määreellä. public Parameters() Konstruktori asettaa kaikki kentät 0-arvoiksi. public int Clear() Asettaa kaikki arvot vakioiksi. public int GetSizesFromChrom() Laskee unixin wc:n avulla kromosomitiedostoista sukupolven koon. private bool CheckSubPopulations() Tarkistaa alipopulaatioiden eheyden. Katsoo että alipopulaatioiden määrä täsmää ja että alipopulaatioiden migraatiotaulukko on ehyt. private bool CheckFileExists(std::string file) Tarkistaa että tiedosto on olemassa. Yrittää avata sitä ja katsoo onnistuiko avaus. private bool CheckSaveGenerations() Tarkistaa että savegenerations-parametrissa ei ole annettu liian suuria tai pieniä sukupolvia. Attribuutit Parameters-luokan attribuutit on listattu taulukossa 2. Parametrit tarkistetaan Check-metdissa simulaatiomoodin mukaan. Moodit: 1 = TREE

19 14 2 = PEDIGREE 3 = FULL 4 = PROCESS (=MARKER) Kustakin parametrista on mainittu, tarkistetaanko se tietyssä moodissa. Vain yhden moodin parametrit tarkistetaan, muista ei välitetä Log-luokka Log on ohjelmiston lokitiedostoon kirjoittamiseen tarkoitettu luokka. Jokaisella lokirivillä on rivin tyyppi, jotka ovat vakavimmasta vähiten vakavaan Critical, Error, Info ja Debug, sekä vapaamuotoinen, mutta yksirivinen tekstiselitys. Lokitiedosto kirjoitetaan hakemistoon, josta ohjelmisto on suoritettu. Log on Singleton-tyyppinen olio, josta luodaan tasan yksi ilmentymä prosessia kohti. Metodit public static Log& GetInstance(bool debug = false) Palauttaa Log-olion. Luo tarvittaessa uuden Log-olion. Debug-tilan voi asettaa päälle ainoastaan ensimmäisellä kutsukerralla, eikä sitä voi kesken ohjelman suorituksen asettaa pois päältä. public int LogCritical(string msg) Lisää lokitiedostoon parametrina saadun viestin kriittinen-statuksella. public int LogError(string msg) Lisää lokitiedostoon parametrina saadun viestin virhe-statuksella. public int LogInfo(string msg) Lisää lokitiedostoon parametrina saadun viestin info-statuksella. public int LogDebug(string msg) Lisää lokitiedostoon parametrina saadun viestin debug-statuksella. Rivi lisätään vain mikäli attribuutti debug on asetettu arvoon true. public int WriteLog(string level, string msg) Lisää lokitiedoston parametrina saadun viestin annetulla statuksella. Attribuutit private Log _instance Sisäinen olio, jonka kaikki luokkaa käyttävät jakavat. Tuhotaan vasta ohjelman suorituksen päättyessä. private bool _debug Määrittelee kirjoitetaanko debug-rivit tiedostoon.

20 15 Tyyppi Muuttuja (1,2,3,4 = Sallittu arvoalue Tarkistushuomioita pakollinen) bool saveparameters string paramfile string resultdir int founders (1234) 2-n int parentgensize 2-n int lastgensize (123) 2-n int generations (123) 1-n int iterations 1-n Vakio-arvo 1. bool pedigreeonce Ei vaikutusta, jos iterations 1 TSimType simulationmode (1234) TREE, PE- DIGREE, FULL, MAR- KER Määrittää, mitä parametreja tarkistetaan. Turhat parametrit jätetään huomioimatta. string treefile Pakollinen vain jos parentsinresult string pedigreefile (34) string parentpedigreefile Pakollinen vain jos parentsinresult vector<int> savegenerations 1-generations int subpops 1-n Vakio-arvo 1. Tulee antaa kaikki 3 subpop-parametria. vector<int> subpopsizes 2-founders Määrä täsmättävä edelliseen. double[][] subpopmigrations , sum=1.0 int chromlength (234) 2-n string strfile Tarkistetaan olemassaolo. double snprate (34) double recombrate (34) int effectivepopsize 2-n (34) double diseasemutfreq (34) double minminorallelefreq (34) bool markermap int markers (34) 1-n int sampletype (34) 1-4 int samplesize (34) 0-n double prevalence (34) double penetrance (34) Sekä korkeus että leveys oltava subpops. Joka rivin summa 1.0. Ei korjata taulukkoa, jos siinä virheitä. bool report bool parentsinresult bool allowsiblings Huomioimatta jos ei parents ei asetettu. string resultfileprefix Sisäinen muuttuja. Taulukko 2: Parameters muuttujat

21 16 private string _logfile Lokitiedosto, johon lokirivit kirjoitetaan Globaalit määrittelyt Globaalit funktiot ja muuttujat eivät kuulu mihinkään luokkaan, vaan näkyvät kaikille niitä käyttäville sellaisenaan. Funktiot int main(char* args[]) Main-metodi. Metodi ajetaan ensimmäisenä kun ohjelma käynnistetään komentoriviltä. Metodissa tehdään yksinkertaistettu parametrien tarkistus, jonka pohjalta se joko käynnistää tekstikäyttöliittymän (ei parametreja) tai aloittaa simulaation suorituksen. Lopullinen simulaation parametrien tarkistus tehdään Parameters-luokan sisäisessä metodissa Check. Parametrien konstruointiin tarjotaan Parameters-luokan konstruktoria. void sighandler(int sig) Signaalinkäsittelijä, jossa määritellään mitä tehdään kun prosessi saa UNIX- signaalin. Käyttäytyminen riippuu suurelta osin globaalista muuttujasta process_state. Muuttujat TProcessState process_state Muuttujalla määritellään missä tilassa ja minkä tyyppinen senhetkinen prosessi on. Tällä kontrolloidaan lähinnä signaalinkäsittelijän toimintaa, koska esim. simulaation ja tekstikäyttöliittymän yhteydessä samakin signaali pitää voida tulkita eri tavalla. Muuttuja on enumeraattori-tyyppiä TProcessState. 3.4 Pedigree-komponentti Pedigree korvaa ja yhdistää vanhan järjestelmän genpedin ja chromin. Pedigree tuottaa halutut sukupuutiedostot (iteration_pedigree_generation) ja kromosomitiedostot sukupolvittain (iteration_chrom_generation). Vakiona mitään pedigree-komponentin tulosteita ei säilytetä simulaation ajon jälkeen, eli sitten kun markertool on käynyt ne läpi. Tulosteiden poistoa ei toteuteta Pedigreehen vaan se tapahtuu muualla. Option takana on mahdollisuus säilyttää käytetyt sukupuu- ja kromosomitiedostot, sekä mahdollisuus generoida ja säilyttää ylimääräisiä sukupolvitiedostoja. Pedigree-komponentin luokat ja näiden väliset suhteet on esitetty kuvassa 5.

22 17 Kuva 5: Pedigree-komponentin luokat Rajapinta Pedigree-komponentin rajapinta tarjoaa yhden metodin sukupuun ja kromosomien luomista varten. Se mitä kullakin suorituskerralla luodaan määräytyy parametreista. int GeneratePedigree(TPedigreeType type, Parameters& params) Generoidaan parametreissä määritellyt asiat. Ensimmäisellä parametrilla voidaan jättää kromosomit generoimatta. TPedigreeType on enumeraattori, joka kertoo suorituksen tyypin.

23 Enumeraattorit TPedigreeType Kuvaa Pedigree-komponentin suorituksen tyypin. Mahdolliset arvot ovat: FULL = täysi ajo, TREE = vain sukupuu IPedigree-rajapinta IPedigree on Pedigree-luokan rajapinta ytimelle. Metodit virtual int GeneratePedigree(TPedigreeType, Parameters&) Core-luokalle näkyvä rajapintametodi. Toteutus aliluokassa. Palauttaa onnistuessaan arvon 0, virhetilanteessa Pedigree-luokka Pedigree luo sukupuut ja vastaa niiden tallennuksesta. Metodit public int GeneratePedigree(TPedigreeType, Parameters&) GeneratePedigree on implementaatio rajapintaluokan metodille. Metodi ottaa parametreikseen TPedigreeType-enumin ja Parameters-luokan, jotka kertovat missä moodissa ohjelmaa ajetaan ja sisältävät tarvittavat parametrit ajoa varten. Metodi luo luokan sisäiset oliot, FamilyTree ja RecombTree, joissa tapahtuu varsinainen sukupuun ja kromosomien prosessointi. Töiden välillä metodi palauttaa tilatietoa IStatusCallback-luokan Update()-metodin kautta. Attribuutit private IStatusCallback *_callback Callback-rajapinnan toteuttava olio tilan päivittämistä varten PedigreeFactory-luokka PedigreeFactory on staattinen tehdasluokka, joka luo instanssin Pedigree- luokasta ja palauttaa osoittimen siihen. Metodit

24 public static IPedigree* Construct(IStatusCallback*) Metodi luo Pedigree-instanssin ja palauttaa sen osoittimen kutsujalle. Palautettu oli on dynaamisesti luotu ja kutsujan on huolehdittava sen tuhoamisesta delete:llä FamilyTree-luokka FamilyTree on sukupuun hallintaluokka. Luokka kontrolloi yhtä tai useampaa alipopulaatioluokkaa, niiden yksilömääriä, sukupolvien tulostusta ja yksilöiden liikkumista alipopulaatioiden välillä. Metodit public FamilyTree(Parameters&) Konstruktori, jolla luokan olio on syytä luoda. Parametrina annettavalla Parametersoliolla on oltava puun ja rekombinaatioiden generointiin vaadittavat arvot oikeellisesti asetettuna. public int CreateAndPrintTree(IStatusCallback*, bool with_recomb) Luo sukupuun ja haluttaessa tekee siihen rekombinaatiot. Tallentaa tuloksen tiedostoihin sukupuu kerrallaan. Tallennettavat tiedot määritellään konstruktorille annetun Parameters-olion kautta. private void CreateMigrations() Hoitaa siirtolaisten liikennettä alipopulaatioiden välillä. private int OutputGeneration(int inmode, int generation, deque<individual>) Tulostaa viimeksi haetun sukupolven sukupuun, jonka järjestysnumero annetaan parametrissa generation (0 = ensimmäinen sukupolvi). Parametrilla inmode määritellään tulostuksen kohde; 1 = STDOUT, 2 = tiedosto. Tulostus järjestetään yksilöiden tunnusten mukaan. private void InitCrossoverFrequencies() Alustaa tekijänvaihtotaajuudet. Logiikka kopioitu vanhasta ohjelmasta. private int OutputChromosomes(int inmode, int generation, deque<individual>) Tulostaa viimeksi haetun sukupolven kromosomit. Sukupolven järjestysnumero annetaan parametrissa generation (0 = ensimmäinen sukupolvi). Parametrilla inmode määritellään tulostuksen kohde; 1 = STDOUT, 2 = tiedosto. Tulostus järjestetään segmenttien alkupisteen mukaan. private double Mult(double n) Kertomafunktio. Toiminnallisuus suoraan aiemmasta ohjelmasta, sillä muutoksella, että ylivuotomahdollisuuden takia muuttujatyyppi vaihdettu isompaan. Attribuutit

25 20 private Parameters *theparam Simulaatioparametrit. private IStatusCallback *callback Callback-rajapinnan toteuttava olio tilatiedon päivitystä varten. private int cur_gen Käsittelyn alla oleva sukupolvi. private int cur_gen_size Käsittelyn alla olevan sukupolven koko. private double grfact Sukupolven kasvukerroin. private double[] crossover_probability Muutujanvaihdon todennäköisyystaulukko. private vector<double> gen_sizes Taulukko johon kaikkien sukupolvien yksilömäärät lasketaan. Käytetään doublea, pyöristysvirheen kasautumisen vähentämiseksi. private vector<subpopulation> s_pops Käsiteltävät alipopulaatiot. Jos alipopulaatioita ei käytetä, vektori sisältää vain yhden populaation. Yksilöiden ja kromosomien luonti tapahtuu alipopulaatioissa. private vector<segment> generations_chromosomes Apuvektori kromosomisegmenttien keräämistä ja tulostamista varten SubPopulation-luokka SubPopulation Metodit public SubPopulation(int size, int generations, double *cross_prob, double chr_length, bool with_recomb, int start_ge_index, int sub_pop_index) Konstruktori, jolla SubPopulation-olio luodaan. Saa parametreinä alkupopulaation koon, sukupolvien määrän, muuttujanvaihtotodennäköisyydet, kromosomipituuden, valinnan kromosomien luomisesta, sukupolven ensimmäisen id:n(tarvitaan alipopulaatioissa) ja alipopulaatioindeksin. public int CreateNextGeneration(int start, int nr_of_indv) Luo uuden sukupolven. Parametreina ensimmäinen id ja sukupolven yksilömäärä. public int HaldaneSites(double[] site) Luo kohdat jossa rekombinaatiota tapahtuu.

26 21 public void SortSites(double[] site, int sites) Edellisen apumetodi. Kopioitu suoraan aiemmasta ohjelmasta. private void InheritedChromosome(vector<Segment> new_chrom, int persid, int pid, int which) Luo perustajille kromosomit ja periyttää jälkeläisille vanhempien kromosomit lisäten rekombinaatiot. Parametreina segmenttivektori tallennusta varten, henkilön id, vanhemman id ja kokonaisluku, joka kertoo kummalta vanhemmalta ollaan perimässä. public int GetNextGeneration(deque<Individual>, int start, int nr_of_indv) Julkinen metodi, joka käyttää edellistä metodia ja kopioi edellisen sukupolven palautusvektoriin. Parametreinä myös alipopulaatiosukupolven ensimmäinen id ja luotavan sukupolven koko. public int CreateNextGenerationAndGetSize(int start, int nr_of_indv) Rinnasteinen edellämainitulle metodille, mutta ei kopioi vektoria. public void GetEmigrants(vector<double>&, vector<individual>&) Ottaa parametreinä siirtymistödennäköisyystaulukon ja yksilövektorin kopioimista varten. Arpoo siirtymistodennäköisyyksillä muualle siirtyvät yksilöt ja kopioi ne vektoriin. public void AddEmigrants(vector<Individual>) Lisää tähän alipopulaatioon muualta tulleet yksilöt. public void CreateFounders(int start, int total) Luo perustajasukupolven. Attribuutit public int founder_count Säilyttää alkupopulaation määrän. Lähinnä diagnostiikkamuuttuja. public bool is_recomb Määrittelee luodaanko kromosomien rekombinaatiot pelkän sukupuun lisäksi. public double chrom_length Kromosomin pituus. public int g_rations Simulaation sukupolvien määrä. public int cur_gen Nykyisen sukupolven 0-kantainen järjestysluku. public int cur_gen_size Nykyisen sukupolven yksilöiden lukumäärä.

27 22 public int n_par_men Vanhemman sukupolven miesten lukumäärä. public int n_par_women Vanhemman sukupolven naisten lukumäärä. public int n_men Nuoremman sukupolven miesten lukumäärä. public int n_women Nuoremman sukupolven naisten lukumäärä. public int population_index Tämän alipopulaation tunnus. public double[] crossover_probability Muuttujanvaihtotodennäköisyystaulukko. public deque<individual> current_gen Nykyisen sukupolven yksilöt. Kasvaa kahteen suuntaan. Miehet alkupäässä, naiset loppupäässä. public deque<individual> parent_gen Edellisen sukupolven yksilöt. Miehet alkupäässä, naiset loppupäässä Individual-luokka Individual on säiliöluokka yksilötiedolle. Luokka on SubPopulation- ja FamilyTree- luokkien apuluokka. Metodit public Individual() Oletuskonstruktori, joka luo tyhjän Individual-olion. public operator<(individual&) Vertailuoperaattori < (pienempi kuin -) Individual-olioiden kesken. Palautuu olioiden id-kentän vertailuksi. Attribuutit public int id Yksilön tunniste. public int father_id Yksilön isän tunniste.

28 23 public int mother_id Yksilön äidin tunniste. public int gender Yksilön sukupuoli; 0 = mies, 1 = nainen. public int children Yksilön lapsien lukumäärä. public int index_in_gen Yksilön järjestysnumero sukupolvessaan. public int sub_population Alipopulaatio, johon yksilö kuuluu. public vector<segment> mothers_segment Äidiltä saadun kromosomin segmentit. public vector<segment> fathers_segment Isältä saadun kromosomin segmentit Segment-luokka Segment on säiliöluokka kromosomidatalle. Jokainen Individual-olio sisältää kaksi Segmentvektoria. Segment kuvaa kahden rekombinaatiokohdan välistä dna-jaksoa. Metodit public Segment() Oletuskonstruktori, joka luo tyhjän Segment-olion. public operator<(segment&) Vertailuoperaattori < (pienempi kuin -) Segment-olioiden kesken. Palautuu segmenttien alkupisteiden vertailuksi. Attribuutit public double start_point Segmentin alkupiste. public int founder_id Tunniste perustajayksilölle, jolta segmentti on peräisin. public int person_id Segmentin kantajan tunnus.

29 Marker-komponentti Kuva 6: Marker-komponentin luokat. Marker on yhteinen rajapintakomponentti markertoolille ja simcolle. Marker toimii em. ohjelmien ajurina, joka virtaviivaistaa niiden käyttöä ytimelle ja mahdollistaa ohjelman laajennettavuuden. Marker ajaa molemmat em. ohjelmat oikeilla parametreilla. Marker-komponentin luokat ja näiden väliset suhteet on esitetty kuvassa Rajapinta Marker-komponentin rajapinta sisältää yhden metodin, jonka kautta käytetään simco- ja markertool-komponentteja. Yksityiskohdat sisältyvät parametreihin. int Process(TMarkerType type, Parameters params&) Ajetaan Simco ja Markertool halutuin parametrein. TMarkerTypellä on kaksi vaihtoehtoa: WPAR ja NORMAL, mikä määrittelee ajetaanko ohjelmaa ns. TRIO-asetuksella (ts. parentsinresult-optio määritelty)

30 Enumeraattorit TMarkerType Kuvaa Marker-komponentin suorituksen tyypin. Mahdolliset arvot ovat: MARKER_NORMAL = normaali ajo, MARKER_WPAR = vanhemmat mukana otoksessa IMarker-rajapinta IMarker on Marker-luokan rajapinta ytimelle. Metodit public int Process(TMarkerType type, Parameters &params) Core-luokalle näkyvä rajapintametodi. Toteutus aliluokassa. Onnistuessaan metodi palauttaa arvon 0, virhetilanteessa Marker-luokka Marker-luokka toimii rajapintana Ytimen ja Simcon sekä Markertoolin välillä. Sisältää vain yhden metodin. Metodit public int Process(TMarkerType type, Parameters &params) Luokan ainoa metodi. TMarkerType-enumeraattori määrittelee ajotavan, Parametersluokka sisältää parametrit simcolle ja markertoolille. Ensin ajetaan Simco ja sen jälkeen Markertool, molemmat ajetaan aina. Metodi käynnistää ulkoiset ohjelmat uuteen prosessiin system():llä ja jää odottamaan paluuarvoa. Parametrit on validoitu jo ennen ulkoisten ohjelmien ajamista, mutta jos virhetilanne kuitenkin syntyy, palautetaan negatiivinen arvo. Onnistuessaan metodi palauttaa arvon 0. Töiden välillä metodi palauttaa tilatietoa IStatusCallback-luokan Update()-metodin kautta. Metodissa ensin rakennetaan parameters-oliosta simcolle parametristring, jonka jälkeen kasataan markertoolille ajostring. Markertool vaatii myös tiedostoparametreja, joita varten Ydin on valmiiksi tehnyt symboliset linkit ohjelman tuloshakemistoon (jossa ohjelman suoritus sijaitsee koko simulaation ajan). Attribuutit private IStatusCallback *_callback Säilöö callback-olion (simulaation käynnistäjän).

31 MarkerFactory-luokka MarkerFactory on staattinen tehdasluokka, joka luo instanssin Marker- luokasta ja palauttaa osoittimen siihen. Metodit public static IMarker* Construct() Metodi luo Marker-instanssin ja palauttaa sen osoittimen kutsujalle. 3.6 Tekstikäyttöliittymä-komponentti Kuva 7: Tekstikäyttöliittymäkomponentin luokat. Tekstikäyttöliittymä pohjautuu ncurses-kirjastoon. Käyttäjä syöttää parametrit käyttöliittymässä kenttiin, joista käyttöliittymä kokoaa Parameters-olion, joka annetaan ytimelle RunSimulation() rajapinnalle. Ydin tarjoaa tietoa simulaation etenimsestä käyttöliittymälle Update()-rajapinnan kautta. Simulaation tuloksia ei visualisoida, ainoastaan tallennetaan tulostiedostot. Kutakin käyttöliittymänäkymää varten on oma luokkansa, yhteensä kolme kappaletta: alkuvalikko, parametrien syöttö, simulaation seuranta. Valikkoa ei ole toteutettu ncursesin MENU-kirjastolla, vaan manuaalisesti. Parametrien syöttöikkuna käyttää FORM:ia, joka on jaetta kahteen sivuun. Osassa kenttiä on syötteen validointi käytössä. Tulosten seurantanäkymä on tehty ilman lisäkirjastoja. Jokainen kolmesta näkymästä on toteutettu kokoruudun WINDOW:na, joita päivitetään ruudulle käyttäjän edetessä käyttöliittymässä. CDK:ta tai PANEL-kirjastoa ei käytetä. Tekstikäyttöliittymäkomponentin luokat on esitetty kuvassa 7.

32 Rajapinta void Update(TStatus status) Metodi, jonka avulla päivitetään ruudulle tilatietoa ohjelman edistymisestä aina jonkin osasuorituksen valmistuttua. void StartUI() Käynnistää tekstikäyttöliittymän CursesUI-luokka CursesUI vastaa ncurses-käyttöliittymän alustamisesta, käynnistämisestä, käyttöliittymäikkunoiden ja ytimen luonnista sekä käyttöliittymän käynnistämisestä. StartUI() tekee em. asiat ja looppaa kolmea eri ikkunaa kunnes ohjelma sammutetaan, jolloin StartUI() loppuu, suoritus palaa main():iin ja terminoituu. CursesUI toteuttaa IStatusCallback-rajapinnan, jota kautta ytimeltä tulee tilatietoa simulaatiosta. CursesUI välittää Update()-metodissaan tilapäivitysviestin CursesUIResult-olion Update()-metodiin, jossa tilatiedot päivitetään käyttäjälle. Jokainen CursesUI-näkymäluokka sisältää Show()-metodin, joka aktivoi kyseisen ikkunan (päivittää näytölle) ja käynnistää kyseisen ikkunan input-handlerin. Show() pitää siten kontrollin itsellään kunnes käyttäjä vaihtaa toiseen ikkunaan, jolloin Show() palauttaa paaluarvonaan seuraavan ikkunan numeron. Tyhjä parameters-olio luodaan jo tässä vaiheessa ja osoitin siihen annetaan kullekin näkymäluokalle. Metodit void Update(TStatus status) Ytimelle tarjottava metodi, jolla voidaan päivittää käyttöliittymää laskennan kuluessa tarjoamalla käyttöliittymälle kontrolli pieneksi hetkeksi. Määritellään rajapinnassa IStatusCallback. Kutsuu CursesUIResult::Update():a. void StartUI() Käynnistää tekstikäyttöliittymän. Main-metodi kutsuu, jos ohjelmisto käynnistetään ilman komentoriviparametreja. Attribuutit private Parameters *params Parametri-osoitin. StartUI() luo tyhjän parametri-olion, jonka osoitin jaetaan kaikille CursesUI-luokille.

33 28 private int centerx, centery Kuvaruudun keskipisteet. private ICore *core Core-osoitin, jonka StartUI() luo CoreFactorylla. private CursesUIResult *ResultWindow ResultWindow-osoitin, muut näkymäluokat luodaan paikallisesti StartUI:ssa, joka on käytännössä ohjelman main-looppi. Kun StartUI() päättyy, ohjelma terminoidaan CursesUIMenu-luokka Menu on yksinkertainen alkuvalikko, joka on toteutettu ilman ncursesin MENU-kirjastoa manuaalisesti. Tästä näkymästä voi sammuttaa koko ohjelman tai siirtyä parametrien syöttöikkunaan. Metodit public int Show() Kuten muut Show()-metodit: päivittää tämän näkymän näytölle ja käynnistää tähän näkymään liittyvän näppäimistökäsittelijän. private void PrintMenu() Tulostaa ruudulle reunat, otsikon ja menun korostaen valitun kohdan. Valintaa ylläpidetään choice-muuttujalla manuaalisesti. Attribuutit private int menux, menuy Menun sijainti. private int choice Menun viimeisin valinta. private int highlight Menun valinta, merkkaa myös valinnan korostuksella. private std::vector<char*> choices Menu-valinnat: "New simulation"ja "Exit". private WINDOW menu Menu-näkymän ikkuna.

34 CursesUIParam-luokka Param-luokka on suurin ncurses-luokka, ja sisältää paljon ncursesin FORM:iin liittyvää määrittelyä. Luokka kapseloi ikkunan, joka koostuu täysin yhdestä ncurses-formista, joka on jaettu kahteen sivuun. Kenttiä on 32 plus jokaiselle kentälle staattinen (O_ACTIVE == false) selitekenttä. Lisäksi BACK ja START napit on toteutettu kenttinä, joita ei voi muokata. Luokasta löytyy neljä suurta koodikeskittymää: FORMin luonti, input-looppi, parametrien keruu kentistä ja parameters-olion luonti, parameters-olion kenttien sijoittaminen lomakkeen kenttiin. Kaksi ensimmäistä sisältää runsaasti ncursesin vaatimaa yksinkertaista, mutta runsasta määrittelykoodia. Metodit public int Show() Päivittää ikkunan ruudulle ja pyörittää input-handleria, joka on yksi iso getch-pohjainen switch-lauseke. Kentissä liikkuminen on kovakoodattu käsin jokaista napinpainallusta myöten. Nuolinäppäimillä liikutaan kentissä, Page up ja down vaihtavat sivua, tab vierittää kentän mahdollisia vaihtoehtoisia arvoja ja enterillä voidaan aktivoida START ja BACK nappulat. private void FillParamsFromFile(std::string filename) Käyttää Parameters::FromFile()-metodia parsiakseen parametri-olion tiedostosta, jonka jälkeen kutsuu FillParams()-metodia, joka syöttää olion parametrit kenttiin. private void FillParams() Syöttää parameters-olion tiedot kenttiin. private void ConstructParameters() Sijoittaa jokaisen kentän tiedon valmiiksi luodun parameters-olion julkisiin kenttiin. Show()-metodi kutsuu kun käyttäjä on hyväksynyt parametrit START-napilla. private void Trim(std::string buffer) Poistaa parametrin stringistä alusta ja lopusta tyhjät merkit (space ja tab). private void CheckFileExists(std::string file) Tarkistaa onko annettu tiedosto olemassa. Yrittää avata tiedostoa ja tarkistaa onnistuiko avaus. private void PrintTitle() Tulostaa ruudulle reunat ja otsikon. Attribuutit private WINDOW *param Näkymän kokoruudun ncurses-ikkuna.

35 30 private FIELD *field[67] Ncursesin FIELD-taulukko, joka sisältää kaikki formin kentät. Päättyy nulliin. private FORM *form Itse lomake. private char* yesno[3] Sisältää "yes"/"no"valintakenttien valinnat. private char* sampletype[5] Sisältää sample-type kentän vaihtoehdot: random, affected, case+random, case+affected private char* simulationmode[5] Simulaatiomoodi-kentän vaihtoehdot: tree, pedigree, full, process. private int fields Kenttien lukumäärä. private int choice Nykyinen valinta, ts. mikä kenttä on aktiivisena. private int BACK, START BACK ja START nappuloiden (kenttien) numerot FIELD-taulukossa. private int NEWPAGE Sivunvaihtokenttä. Formi on jaettu kahteen sivuun, sivunvaihto määritellään ncursesissa alkamaan tietystä kentästä. Tässä tapauksessa CHROMLENGTH-kenttä. private Parameters *params Parametri-osoitin, luodaan CursesUI:ssa CursesUIResult-luokka CursesUIResult-luokka kapseloi simulaation seurantaruudun. Ruutu käynnistetään Paramruudulta. Luokka käynnistää simulaation ja päivittää ruudulle simulaation seurantatietoa. Lopuksi odotetaan käyttäjän vahvistusta simulaation loppumiselle ja palataan alkuvalikkoon. Luokan päätehtävä on reagoida Update-viesteihin, jotka päivittävät simulaation kulkua. Normaalisti tilatiedot kirjoitetaan allekkain. Iteraatioiden tapauksessa jokaisen iteraation kulku näytetään kerrallaan samalla alueella, peräkkäisten iteraatioiden tilatietoja ei näe, ainoastaan viimeisimmän. Markeria iteroitaessa näytetään samoin missä iteraatiossa simulaatio on menossa. Metodit public int Show() Päivittää näkymän ruudulle, kirjoittaa osan tilatiedoista ruudulle ja käynnistää simulaation, jonka jälkeen kirjoitetaan tuloshakemisto ja poistutaan Result-luokasta.

Suunnitteludokumentti

Suunnitteludokumentti Suunnitteludokumentti Populous Helsinki 10.12.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Heli Borg

Lisätiedot

Testausdokumentti. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testausdokumentti. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testausdokumentti Populous Helsinki 10.12.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Heli Borg Markus

Lisätiedot

Testaussuunnitelma. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testaussuunnitelma. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testaussuunnitelma Populous Helsinki 10.11.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti ( ov) Projektiryhmä Heli Borg Markus

Lisätiedot

Populaatiosimulaattori. Petteri Hintsanen HIIT perustutkimusyksikkö Helsingin yliopisto

Populaatiosimulaattori. Petteri Hintsanen HIIT perustutkimusyksikkö Helsingin yliopisto Populaatiosimulaattori Petteri Hintsanen HIIT perustutkimusyksikkö Helsingin yliopisto Kromosomit Ihmisen perimä (genomi) on jakaantunut 23 kromosomipariin Jokaisen parin toinen kromosomi on peritty isältä

Lisätiedot

Vaatimusmäärittely. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Vaatimusmäärittely. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Vaatimusmäärittely Populous Helsinki 5.10.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti ( ov) Projektiryhmä Heli Borg Markus

Lisätiedot

Projektisuunnitelma. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Projektisuunnitelma. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Projektisuunnitelma Populous Helsinki 9.12.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Heli Borg Markus

Lisätiedot

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int

Lisätiedot

Käyttöohje. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Käyttöohje. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Käyttöohje Boa Open Access Helsinki 5.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari Heikkinen

Lisätiedot

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

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

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

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

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

812341A Olio-ohjelmointi Peruskäsitteet jatkoa 812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Ylläpitodokumentti Boa Open Access Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

Lisätiedot

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

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testausdokumentti Kivireki Helsinki 17.12.2007 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Anu Kontio Ilmari

Lisätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie

Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie Ylläpitodokumentti Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie Helsinki 16.7.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti

Lisätiedot

Muuttujien määrittely

Muuttujien määrittely Tarja Heikkilä Muuttujien määrittely Määrittele muuttujat SPSS-ohjelmaan lomakkeen kysymyksistä. Harjoitusta varten lomakkeeseen on muokattu kysymyksiä kahdesta opiskelijoiden tekemästä Joupiskan rinneravintolaa

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Luokat ja oliot. Ville Sundberg

Luokat ja oliot. Ville Sundberg Luokat ja oliot Ville Sundberg 12.9.2007 Maailma on täynnä olioita Myös tietokoneohjelmat koostuvat olioista Σ Ο ω Μ ς υ φ Ϊ Φ Θ ψ Љ Є Ύ χ Й Mikä on olio? Tietokoneohjelman rakennuspalikka Oliolla on kaksi

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Testausraportti. Orava. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testausraportti. Orava. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testausraportti Orava Helsinki 5.5.2005 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Juhani Bergström Peter

Lisätiedot

Simulaattorin asennus- ja käyttöohje

Simulaattorin asennus- ja käyttöohje Linux ja Windows XP Versio Päiväys Muokkaaja Kuvaus 0.2 16.2.2006 Mikko Halttunen Katselmoinin jälkeen 0.1 13.2.2006 Mikko Halttunen Alustava versio Sisällysluettelo 1 Johdanto... 3 2 Simulaattorin asennus...

Lisätiedot

Hakemistojen sisällöt säilötään linkitetyille listalle.

Hakemistojen sisällöt säilötään linkitetyille listalle. Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi Java-kielellä komentoikkunaa (komentotulkkia, komentoriviä) simuloiva olioperustainen ohjelma. Hakemistojen sisällöt säilötään linkitetyille listalle. Työ

Lisätiedot

Rajapinta (interface)

Rajapinta (interface) 1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä

Lisätiedot

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

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 6. Metodit 6.1 Sisällys Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen Olio-ohjelmoinnissa ohjelma

Lisätiedot

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä

Lisätiedot

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

Luento 4. Timo Savola. 21. huhtikuuta 2006

Luento 4. Timo Savola. 21. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 4 Timo Savola 21. huhtikuuta 2006 Osa I Shell Lausekkeet Komentoriville kirjotettu komento on lauseke echo "foo" echo $USER MUUTTUJA=1 ls -l Rivinvaihto

Lisätiedot

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

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

Lisätiedot

12. Näppäimistöltä lukeminen 12.1

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy Kehitysohje ETL-työkalu Versio Pvm Tekijä Kuvaus 0.1 15.1.2005 Timo Sallinen Ensimmäinen versio 0.2 26.1.2005 Timo Sallinen Täydenetty pohjaa 0.3 06.02.2005 Mika Suvanto Pieniä täydennyksiä ja oikolukua

Lisätiedot

Javan perusteita. Janne Käki

Javan perusteita. Janne Käki Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).

Lisätiedot

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

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

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

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

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ). Tehtävä 1: Metodit, listat, alkuluvut (4p) Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ). Alkuluvut ovat lukuja, jotka ovat suurempia kuin yksi ja jotka ovat jaollisia

Lisätiedot

Subversion-ohje. Linux Traffic Control-käyttöliittymä Ryhmä paketti2

Subversion-ohje. Linux Traffic Control-käyttöliittymä Ryhmä paketti2 Subversion-ohje Linux Traffic Control-käyttöliittymä Ryhmä paketti2 Helsinki 1.11.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti

Lisätiedot

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006 TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa

Lisätiedot

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0 CODEONLINE Monni Oo- ja Java-harjoituksia Version 1.0 Revision History Date Version Description Author 25.10.2000 1.0 Initial version Juha Johansson Inspection History Date Version Inspectors Approved

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:

Lisätiedot

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä 2016 IX Olioiden välisistä yhteyksistä Sisältö 1. Johdanto 2. Kytkentä 3. Koheesio 4. Näkyvyydestä 2 Johdanto n Ohjelmassa syntyy kytkentöjä olioiden välille Toivottuja ja epätoivottuja n Näkyvyys vaikuttaa

Lisätiedot

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...

Lisätiedot

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

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Ohjelmistojen mallintaminen, sekvenssikaaviot

Ohjelmistojen mallintaminen, sekvenssikaaviot 582104 - Ohjelmistojen mallintaminen, sekvenssikaaviot 1 Vuorovaikutussuunnittelu Oliojärjestelmän toiminta perustuu olioiden vuorovaikutukseen ja yhteistyöhön Olioiden yhteistyö toteutuu operaatioiden

Lisätiedot

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

Ohjelmointi 1 Taulukot ja merkkijonot

Ohjelmointi 1 Taulukot ja merkkijonot Ohjelmointi 1 Taulukot ja merkkijonot Jussi Pohjolainen TAMK Tieto- ja viestintäteknologia Johdanto taulukkoon Jos ohjelmassa käytössä ainoastaan perinteisiä (yksinkertaisia) muuttujia, ohjelmien teko

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita Käyttäjän kanssa keskusteleva ohjelma 1 Kirjoittaminen konsolinäkymään //Java ohjelma, joka tulostaa konsoli-ikkunaan public class HeiMaailma { public void aja() { // kirjoitus ja

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

Lisätiedot

Tapahtumapohjainen ohjelmointi. Juha Järvensivu juha.jarvensivu@tut.fi 2007

Tapahtumapohjainen ohjelmointi. Juha Järvensivu juha.jarvensivu@tut.fi 2007 Tapahtumapohjainen ohjelmointi Juha Järvensivu juha.jarvensivu@tut.fi 2007 Sisältö Tapahtumapohjainen ohjelmointi Käyttöliittymän rakenne Pääikkuna (top-level window) Lapsi-ikkuna (child window) Dialogit

Lisätiedot

Jypelin käyttöohjeet» Ruutukentän luominen

Jypelin käyttöohjeet» Ruutukentän luominen Jypelin käyttöohjeet» Ruutukentän luominen Pelissä kentän (Level) voi luoda tekstitiedostoon "piirretyn" mallin mukaisesti. Tällöin puhutaan, että tehdään ns. ruutukenttä, sillä tekstitiedostossa jokainen

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton 2015 syksy 2. vsk IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton Sisältö 1. Johdanto luontimalleihin 2. Proxy 3. Factory Method 4. Prototype 5. Singleton Suunnittelumallit Proxy et.

Lisätiedot

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla Tietojen syöttäminen ohjelmalle Tähän mennessä on käsitelty Javan tulostuslauseet System.out.print ja System.out.println sekä ohjelman perusrakenneosat (muuttujat, vakiot, lauseet). Jotta päästään tekemään

Lisätiedot

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei. Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi olioperustainen sokkeloseikkailu peli Javakielellä. Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen

Lisätiedot

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

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen. Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi Java-kielellä keskustelualuetta simuloiva olioperustainen ohjelma (Simple Oope Board, S.O.B). Linkitetystä listasta perittyä omaa listaa käytetään muun muassa

Lisätiedot

Loppuraportti. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Loppuraportti. Populous. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Loppuraportti Populous Helsinki 10.12.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Heli Borg Markus

Lisätiedot

1 Tehtävän kuvaus ja analysointi

1 Tehtävän kuvaus ja analysointi Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.

Lisätiedot

Action Request System

Action Request System Action Request System Manu Karjalainen Ohjelmistotuotantovälineet seminaari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos 25.10.2000 Action Request System (ARS) Manu Karjalainen Ohjelmistotuotantovälineet

Lisätiedot

58131 Tietorakenteet ja algoritmit (syksy 2015)

58131 Tietorakenteet ja algoritmit (syksy 2015) 58131 Tietorakenteet ja algoritmit (syksy 2015) Harjoitus 2 (14. 18.9.2015) Huom. Sinun on tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. 1. Erään algoritmin suoritus vie 1 ms, kun syötteen

Lisätiedot

Metodien tekeminen Javalla

Metodien tekeminen Javalla 1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi. 11. Rajapinnat 11.1 Sisällys Johdanto. Abstrakti luokka vai rajapinta? Rajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet String-merkkijonoluokka 1 Ohjelmointikielten merkkijonot Merkkijonot ja niiden käsittely on välttämätöntä ohjelmoinnissa Valitettavasti ohjelmointikielten tekijät eivät tätä ole ottaneet

Lisätiedot

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Tekninen määrittely: Editori Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Sisällysluettelo 1. Johdanto...4 1.1. Tarkoitus ja kattavuus...4 1.2. Tuote ja ympäristö...4 1.3. Määritelmät,

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1 Tietorakenteet ja algoritmit syksy 2012 Laskuharjoitus 1 1. Tietojenkäsittelijä voi ajatella logaritmia usein seuraavasti: a-kantainen logaritmi log a n kertoo, kuinka monta kertaa luku n pitää jakaa a:lla,

Lisätiedot

Ohjelmoinnin perusteet, kurssikoe

Ohjelmoinnin perusteet, kurssikoe Ohjelmoinnin perusteet, kurssikoe 18.6.2014 Kirjoita jokaiseen konseptiin kurssin nimi, kokeen päivämäärä, nimi, TMC-tunnus ja opiskelijanumero tai henkilötunnus. Vastaukset palautetaan tehtäväkohtaisiin

Lisätiedot

JUnit ja EasyMock (TilaustenKäsittely)

JUnit ja EasyMock (TilaustenKäsittely) OHJELMISTOJEN TESTAUS JA HALLINTA Syksy 2015 / Auvo Häkkinen JUnit ja EasyMock (TilaustenKäsittely) Tehtävässä tarvittava koodi löytyy osoitteella http://users.metropolia.fi/~hakka/oth/mockesimerkki.zip

Lisätiedot

Sukupuu -ohjelma. Ossi Väre (013759021) Joni Virtanen (013760641)

Sukupuu -ohjelma. Ossi Väre (013759021) Joni Virtanen (013760641) Sukupuu -ohjelma Ossi Väre (013759021) Joni Virtanen (013760641) 7.11.2011 1 Johdanto Toteutimme C -kielellä sukupuuohjelman, johon käyttäjä voi lisätä ja poistaa henkilöitä ja määrittää henkilöiden välisiä

Lisätiedot

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot Tiedosto yhteenkuuluvien tietojen joukko, joka on tavallisesti talletettu pysyväismuistiin muodostuu tietueista, jotka voivat olla keskenään samanlaisia tai vaihdella tyypiltään tiedostot ovat joko tekstitiedostoja

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. 1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).

Lisätiedot

Visma Fivaldi -käsikirja Asiakaskohtaiset hinnat

Visma Fivaldi -käsikirja Asiakaskohtaiset hinnat Visma Fivaldi -käsikirja Asiakaskohtaiset hinnat 2 Sisällys 1 Yleistä... 3 2 Ylävalikko... 4 3 Vasemman laidan painikkeet... 5 4 Erikoishinnoittelut ruutu... 6 5 Raportit... 12 1 Yleistä Fivaldi Asiakaskohtaiset

Lisätiedot

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio Analyysi Tarkentaa ja jäsentää vaatimusmäärittelyä, vastaa kysymykseen MITÄ järjestelmän tulisi tehdä. Suoritetaan seuraavia

Lisätiedot

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN SISÄLLYS 3. Luokkakaavio UML -mallinnuskielessä 3.1 Luokkakaavion luokan rakenteet 3.2 Luokan kuvauksesta C++ ohjelmakoodiksi 3.3 Luokkakaavion luokkien yhteystyypit

Lisätiedot

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Sisällys. 11. Rajapinnat. Johdanto. Johdanto Sisällys 11. ajapinnat. bstrakti luokka vai rajapinta? ajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen avulla.

Lisätiedot

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

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004 Vertailulauseet Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra == yhtäsuuruus!= erisuuruus < pienempi suurempi >= suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10;

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

Harjoitus 2 (viikko 45)

Harjoitus 2 (viikko 45) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista lisätä static-määre operaatioidesi otsikoihin, jotta ohjelmasi kääntyvät. Muista noudattaa hyvän

Lisätiedot