4.2 Muistinhallintaa avustava kirjasto Tutnew

Koko: px
Aloita esitys sivulta:

Download "4.2 Muistinhallintaa avustava kirjasto Tutnew"

Transkriptio

1 48 Harjoitustöiden laadun kehittäminen [5] Edison Design Group Compiler Front Ends for the OEM Market, [6] Henricson, M., & Nyquist E Programming in C++, Rules and Recommendations, Ellemtel Telecommunication Systems Laboratories. [7] International standard ISO/IEC Programming languages C++. American National Standards Institute, New York [8] Meyers, S Effective C++: 50 specific ways to improve your programs, Addison Wesley. 206 s. [9] Uimonen, T Tyylin automaattinen arviointi ohjelmistoissa. Diplomityö, Ohjelmistotekniikan laitos, Tampereen teknillinen korkeakoulu. 65 s. 4.2 Muistinhallintaa avustava kirjasto Tutnew Matti Rintala Tausta C++ on teollisuudessa erittäin suosittu ohjelmointikieli ja siitä johtuen sitä käytetään myös opetuskielenä suuressa osassa oppilaitoksia. C++ on erittäin tehokas ja varsin monikäyttöinen ohjelmointikieli, mutta sitä ei ole suunniteltu opetuskäyttöön, mistä johtuen kieli sisältää monia ansoja ja vaaroja, jotka aiheuttavat ylimääräistä päänvaivaa erityisesti aloittelevalle ohjelmoijalle, jolla usein ei ole käsitystä siitä, mistä ja miten ohjelmassa olevaa virhettä kannattaisi etsiä. Toinen ongelma ohjelmoinnin opetuksessa on, että opetuksessa yleensä korostetaan, että ohjelmien tulisi pystyä reagoimaan järkevästi muistin loppumiseen. Tätä on kuitenkin erittäin vaikea testata, koska nykyisissä tietokoneissa muistia on niin paljon, että sen loppuminen on erittäin epätodennäköistä ja usein vaikea saada aikaan. Tutnew on Tampereen teknillisellä korkeakoululla käytössä oleva kirjasto, joka auttaa ohjelmoijaa C++:n dynaamisen muistinhallinnan virheiden huomaamisessa ja paikantamisessa. Lisäksi Tutnew antaa mahdollisuuden simuloida koneen muistin loppumista sekä saada tilastotietoa dynaamisen muistin käytöstä. Tutnew ei pyri korjaamaan muistinhallinnan virheitä, vaan mahdollisuuksien mukaan antamaan ohjelmoijalle selkeitä virheilmoituksia, jotka kertovat mitä ja missä on mennyt pieleen. Tutnew pyrkii lisäämään mahdollisuutta, että muistinhallinnan

2 Harjoitustöiden laadun kehittäminen 49 kannalta virheellinen ohjelma toimii virheellisesti ja kaatuu mahdollisimman pian muistinhallintavirheen jälkeen. Koska Tutnew on tarkoitettu myös ohjelmoinnin alkeisopetukseen, on sen käyttö mahdollisimman läpinäkyvää ja helppoa. Käyttääkseen Tutnew tä ohjelmoijan täytyy vain lisätä yksi #include -komento jokaiseen kooditiedostoonsa sekä käskeä kääntäjää linkittämään Tutnew-kirjasto mukaan suoritettavaan ohjelmaan. Tutnew-kirjastoa on käytetty ja testattu TTKK:lla muutaman vuoden ajan ohjelmoinnin perusopetuksessa, jossa siitä on saatu hyviä tuloksia. Opiskelija voi käyttää Tutnew tä joko korkeakoulun tietokoneympäristössä tai asentaa sen kotikoneelleen. Tutnew on toteutettu C++:n kirjastona, joka on kirjoitettu kielen nykyisen standardin ISO mukaisesti. Se käyttää dynaamisen muistinhallinan testaamiseen vain kielen omia mekanismeja. Niinpä Tutnew pitäisi olla mahdollista kääntää mihin tahansa riittävän uuteen kääntäjäympäristöön käyttöjärjestelmästä ja kääntäjän valmistajasta riippumatta. Tutnew n kehitys on tehty GCC-kääntäjällä ja toimii ainakin kääntäjän versioilla , ja 3.0. Käännös- ja testausympäristöinä on ollut Redhat Linux ja Sun Microsystemsin Solariksen eri versiot. Näissä ympäristöissä Tutnew on toiminut erinomaisesti. Tutnew n aikaisempia versioita on käytetty myös Windows-ympäristössä djgpp- ja Borland-kääntäjissä. Uudempia versioita ei enää ole testattu noissa ympäristöissä, mutta tiedossa ei ole mitään syytä, miksei Tutnew toimisi näissäkin ympäristöissä. Artikkelin kirjoittaja ottaa mielellään vastaan kokemuksia Tutnew stä muissa ympäristöissä. Tutnew, sen dokumentaatio ja muuta informaatiota on saatavilla sivulta Tausta Ohjelmoijan kannalta C++-kielessä muistinhallinta jakautuu kahteen osaan. Kaikkien nimettyjen muuttujien sekä kääntäjän itsensä automaattisesti tuottamien väliaikaisolioiden elinkaari määräytyy ohjelman rakenteesta ja ne tuhotaan automaattisesti. Sen sijaan dynaamisesti new-operaattorilla luotujen olioiden elinkaari ei ole käännösaikaisesti määrätty ja ohjelmoijan täytyy tuhota ne erikseen operaattorilla delete jossain ohjelman vaiheessa. Jos dynaamisesti varattua muistia ei vapauteta missään vaiheessa, tapahtuu muistivuoto. C++-standardi takaa kuitenkin, että kaikki ohjelman dynaamisesti varaama muisti vapautetaan, kun ohjelman suoritus päättyy. Tämän vuoksi dynaamisen muistin vuotoihin ei aina suhtauduta kovin vakavasti. Muistivuodot ovat kuitenkin vakava asia ainakin kahdesta syystä. Jos ohjelman suoritus kestää kauan, muisti-

3 50 Harjoitustöiden laadun kehittäminen vuodot kuluttavat koneen muistiresursseja, mikä saattaa aiheuttaa joko muistin ennenaikaisen loppumisen tai ohjelman hidastumisen, kun virtuaalimuistijärjestelmä alkaa käyttää kiintolevyä muistin korvikkeena. Toinen muistivuotojen vaikutus on, että vaikka ohjelman dynaamisesti varaama muisti vapautetaankin ohjelman lopussa, ei kyseiseen muistiin luotujen olioiden purkaja-jäsenfunktioita suoriteta. Purkajat puolestaan saattavat sisältää tärkeää toiminnallisuutta kuten muiden resurssien vapautuksia, tiedon päivittämistä kiintolevylle tai tietokantoihin yms. Tämän vuoksi muistivuodot saattavat aiheuttaa muita resurssivuotoja tai ohjelman virheellisen käyttäytymisen. Toinen tyypillinen dynaamisen muistinhallinnan virhe on muistin vapauttaminen useaan kertaan tai muistialueen käyttäminen vielä sen vapauttamisen jälkeen. Näiden virheiden vaikutukset ohjelman toimintaan ovat C++-kielessä määrittelemättömiä. Tyypillisesti ne aiheuttavat joko ohjelman suorituksen keskeytymisen enemmän tai vähemmän selkeään virheilmoitukseen tai ohjelman muistin sotkeentumisen, mikä saattaa aiheuttaa ohjelman virheellisen käyttäytymisen. Monissa ohjelmointikielissä dynaamisen muistinhallinnan virheitä on pyrittä estämään erilaisten muistin roskienkeruujärjestelmien avulla. Nämä vapauttavat ohjelmoijan enemmän tai vähemmän dynaamisen muistinhallinnan suunnittelusta, mikä tietysti helpottaa erityisesti ohjelmoinnin alkeiden opiskelua. C++ ei kuitenkaan sisällä muistin roskienkeruuta. Kielen kehittäjät ovat ilmoittaneet syyksi tähän sen, että C++ on kehitetty erityisesti ohjelmien tehokkuutta silmällä pitäen. Lisäksi automaattinen roskienkeruu sopii huonosti tilanteisiin, jolloin olioiden tuhoutumishetkellä on väliä esimerkiksi sen takia, että olion siivoustoimenpiteet pitää suorittaa tiettyyn aikaan. Tämä on mahdollista, jos siivoustoimenpiteet sisältävät muiden resurssien vapautuksia, io-operaatioita tai käyttöliittymään liittyviä toimenpiteitä. Ohjelman dynaamisessa muistinhallinnassa olevat virheet ovat erityisen hankalia paikantaa. Dynaamisen muistin vapauttamatta jättäminen aiheuttaa muistivuotoja, jotka jäävät yleensä huomaamatta, koska ohjelman muisti vapautetaan kuitenkin ohjelman päättyessä. Niinpä muistivuodot ovat varsin tavallisia jopa tuotantokäytössä olevissa ohjelmissa. Vapautetun muistin käyttäminen vapautuksen jälkeen aiheuttaa myös vaikeita virheitä. Näissä tapauksissa ohjelma saattaa toimia näennäisesti oikein pitkäänkin, kunnes jossain vaiheessa ohjelma ottaa jo vapautetun muistialueen uudelleen käyttöön. Tällöin sama muistialue kuuluu näennäisesti yhtaikaa sekä jo vapautettuun että uuteen olioon, jolloin muistiin yhden olion kautta tehdyt muutokset sotkevat toisen olion muistin. Tällaiset virheet eivät välttämättä edes esiinny joka kerralla, koska muistialueiden uudelleenkäyttämiseen saattavat vaikuttaa koneen fyysisen muistin määrä sekä jopa se, paljonko muita ohjelmia koneessa on käynnissä.

4 Harjoitustöiden laadun kehittäminen 51 Dynaamisen muistinhallinnan testaamiseen on olemassa useita kaupallisia työkaluja, mutta ne ovat yleensä varsin kalliita ja toimivat vain tietyissä käyttöjärjestelmissä ja kääntäjissä. Lisäksi tällaisten työkalujen käyttö vaatii usein sen verran C++-kielen ja ohjelmien testauksen ymmärtämistä, että ne sopivat huonosti ohjelmoinnin alkeisopetukseen Tutnew:n toiminnan kuvaus Kun ohjelma on käännetty Tutnew n kera, Tutnew valvoo automaattisesti ohjelman dynaamista muistinhallintaa ja virheen sattuessa antaa virheilmoituksen. Tutnew n toimintaan voi vaikuttaa ympäristömuuttujien ja esikääntäsymbolien avulla, mutta niitä ei käsitellä tarkemmin tässä artikkelissa. Seuraavassa on lueteltu kaikki ne virheet, jotka Tutnew pystyy joko havaitsemaan ja raportoimaan tai joiden sattuessa Tutnew pyrkii C++-kielen rajoissa sotkemaan ohjelman toiminnan niin paljon, että virhe ilmenisi mahdollisimman aikaisessa vaiheessa. Tutnew:n virheilmoitukset ovat konfiguroitavissa suomen, englannin, tampereen tai pohjanmaan kielille. Muistivuoto tapahtuu, kun ohjelmoija varaa ohjelmassa muistia dynaamisesti new llä mutta ei vapauta sitä. Tällaiset virheet Tutnew pystyy havaitsemaan ja raportoimaan luonnollisesti vasta ohjelman lopussa. Kun Tutnew havaitsee ohjelman lopussa muistivuodon, se raportoi vapauttamatta jätetyn muistialueen koon sekä sen, millä rivillä ja missä tiedostossa kyseinen muistialue on varattu. Ikävä kyllä Tutnew ei kykene ilmoittamaan tarkemmin sitä, minkä tyyppinen olio muistialueella on aikanaan sijainnut. Useimmissa ohjelmissa yhdellä koodirivillä on kuitenkin vain yksi new-komento, joten rivinumero yksilöi vuodon yksikäsitteisesti. Tyypillinen vastareaktio muistivuotojen vaaraan on, että ohjelmoija vapauttaa osoittimien päässä olevaa muistin suunnittelematta ohjelman muistinhallintaa mitenkään erityisesti. Tällöin tyypillinen virhe on, että sama muistialue vapautetaan useassa ohjelman kohdassa eri osoittimia käyttäen. Tutnew pystyy havaitsemaan virheellisen tuhoamisyrityksen ja antamaan siitä virheilmoituksen heti sen sattuessa. Virheilmoitus kertoo, missä muistialue on varattu, missä se on vapautettu ensimmäisen kerran ja missä sitä yritetään vapauttaa uudelleen. Tällaisessa tilanteessa Tutnew normaalisti keskeyttää ohjelman suorituksen, mutta tähän voi ohjelmoija itse vaikuttaa. Useaan kertaan vapauttamisen lisäksi yleinen muistinhallintaongelma on, että dynaamisesti varattu muisti vapautetaan liian aikaisin ja sitä käytetään vielä vapauttamisen jälkeen. (Tämä ongelma esiintyy myös staattisesti varatun muistin yhteydessä, mutta sille Tutnew ei kykene tekemään mitään.) Koska Tutnew on vain kirjasto, sen mahdollisuudet havaita jo vapautettuun muistiin tapahtuvat viit-

5 52 Harjoitustöiden laadun kehittäminen taukset ovat rajalliset. Kun Tutnew tä käyttävä ohjelma vapauttaa dynaamisesti varaamansa muistin, Tutnew ei todellisuudessa vapauta kyseistä muistialuetta vaan täyttää sen testibittikuviolla ja lisää sen omaan tarkkailukirjanpitoonsa. Tämä auttaa jo vapautetun muistin käytön havaitsemiseen seuraavasti: Jos ohjelma lukee vapautettua muistialuetta, se ei enää löydä sieltä itse kirjoittamaansa dataa vaan Tutnew n testikuvion. (Tämä muistialueen sotkeminen on täysin C++-standardin mukaista, koska vapautettuun muistialueeseen viittaaminen aiheuttaa joka tapauksessa ohjelman määrittelemättömän toiminnon.) Tällöin ohjelma todennäköisesti toimii väärin jos testivaiheessa ja virhe voidaan etsiä ja korjata. Ohjelman lopussa Tutnew käy läpi kaikki vapautetut muistialueet ja tarkastaa, että testikuvio on ehjä. Jos ohjelma on kirjoittanut jo vapautettuun muistialueeseen, muuttaa kirjoitus erittäin todennäköisesti testikuviota. Tällöin Tutnew huomaa muutoksen ja antaa virheilmoituksen. Valitettavasti molemmissa edellisissä tapauksissa Tutnew kykenee vain edesauttamaan virheen olemassaolon havaitsemista. Sen sijaan virheen aiheuttaneen lukemisen tai kirjoittamisen sijainnista ohjelmassa Tutnew ei pysty kertomaan mitään, vaan virhe on paikannettava perinteisin testauskeinoin. Vapautetun muistin tarkastaminen lisää ohjelman todellista muistinkulutusta, koska Tutnew ei todellisuudessa voi vapauttaa muistia. Lisäksi testikuvioiden tuottaminen ja tutkiminen ohjelman lopussa hidastaa ohjelmaa. Tämän vapautetun muistin käytön testin voi myös halutessaan kytkeä pois päältä. C++:ssä taulukoita on tyypillistä käydä läpi osoitinaritmetiikkaa käyttäen. Tällöin saattaa käydä niin, että dynaamisesti varattu taulukko yritetään vapauttaa käyttäen osoitinta, joka ei enää osoitakaan taulukon alkuun. Tällöin ohjelman toiminta on määrittelemätön. Samanlainen virhe saattaa syntyä, jos deletelle annetaan alustamaton osoitin tai osoitin, jonka sisältö on aiemman muistinhallintavirheen vuoksi sotkeentunut. Kolmas tyypillinen tilanne on, että deletellä yritetään osoittimen kautta vapauttaa muuttujaa, joka ei ole new llä varattu. Tutnew tarkastaa aina, että deletelle annettu osoitin on sellainen, joka todella osoittaa jonkin dynaamisesti varatun muistialueen alkuun. Mikäli näin ei ole, antaa Tutnew virheilmoituksen. Taulukoiden yli- tai ali-indeksointi on tyypillinen ohjelmointivirhe C++:ssa (ja muissakin ohjelmointikielissä). Ikävä kyllä C++-standardi ei määrittele, mitä tapahtuu, jos taulukkoa indeksoidaan väärin. Tyypilliset C++ kääntäjät tuottavat koodia, jossa ohjelma yksinkertaisesti lukee muistia taulukon muistialueen jommalta kummalta puolelta. Samanlainen virhe tapahtuu, jos taulukkoa käydään läpi osoitinaritmetiikan avulla ja osoitin pääsee liikkumaan taulukon ulkopuolelle.

6 Harjoitustöiden laadun kehittäminen 53 Koska nämä virheet eivät suoranaisesti liity dynaamiseen muistinhallintaan, ei Tutnew pysty huomaamaan niitä kovin hyvin. Tutnew pyrkii kuitenkin helpottamaan indeksointivirheiden löytämistä varaamalla pyydetyn muistialueen molemmille puolelle pienen puskurialueen muistia. Tutnew täyttää tämän alueen jo varauksen yhteydessä testikuviolla. Kuten vapautetun muistin käytössäkin, tästä on kaksi hyötyä: Jos ohjelma virheellisesti viittaa taulukon ulkopuolelle indeksointivirheen tai osoitinaritmetiikan takia, ei luettu arvo ainakaan ole nolla vaan testikuvion tuottamaa puppua. Tutnew tarkastaa testikuvion eheyden muistin vapauttamisen ja ohjelman loppumisen yhteydessä. Jos ohjelma on kirjoittanut taulukon ulkopuolelle ja sotkenut testikuvion, antaa Tutnew virheilmoituksen. Yli- ja ali-indeksoinnin havaitsemisessa on sama ikävä puoli kuin vapautetun muistin käytössä Tutnew ei pysty kertomaan, missä päin ohjelmaa virhe on sattunut. Lisäksi on huomattava, että Tutnew n käyttämä puskurialue ei ole kovin suuri (oletusarvoisesti 16 tavua muistialueen molemmilla puolilla), joten suuret yli- ja ali-indeksoinnit jäävät Tutnew ltä huomaamatta. C++ vaatii, että dynaamisesti varatut yksittäiset oliot pitää tuhota komennolla delete ja dynaamisesti varatut taulukot komennolla delete[]. Ikävä kyllä kääntäjä ei pysty varmistamaan, että näin todella tehdään, koska dynaamisesti varattua taulukkoa käsitellään täsmälleen samantyyppisen osoittimen avulla kuin yksittäistäkin oliota. Mikäli edellämainittua C++:n sääntöä rikotaan, on ohjelman toiminta määrittelemätön. Tyypillinen virhe on taulukon vapauttaminen tavallisella deletellä. Useissa kääntäjissä C++:n perustyyppien tapauksessa virhe ei aiheuta ongelmia, mutta ohjelmoijan omien tyyppien tapauksessa virheellinen tuhoaminen aiheuttaa erilaisia ongelmia, kuten purkajien kutsumatta jättämisiä tai ohjelman kaatumisen. Tutnew tarkastaa muistin vapauttamisen yhteydessä että käytetty delete on oikein tyyppinen ja antaa virheilmoituksen, jos näin ei ole. Tutnew kerää tilastoa kaikista muistinvarauksista ja vapauttamisista. Tämän tilastotiedon voi tulostaa joko itse ohjelmasta käsin funktiokutsulla tai ohjelman lopussa sopivan esikääntäjäsymbolin tai ympäristömuuttujan määrittelemällä. Jos käytetyn kääntäjän kirjastot ovat standardin mukaisia, tulostaa Tutnew myös tilaston kirjastojen (ja muiden Tutnew tä käyttämättömien ohjelman osien) dynaamisesta muistinkulutuksesta erikseen. Näitä lukuja ei ole sisällytetty käyttäjän tilastoon, vaan se sisältää ainoastaan ne muistinvaraukset, jotka on tehty Tutnew tä käyttävissä kooditiedostoissa. Valitettavasti nykyiset GCC:n (2.95.x ja 3.0) kirjastot perustuvat Silicon Graphicsin STL-toteutukseen, jonka muistinvaraus on epästandardi, eikä Tutnew näin ollen voi pitää siitä tilastoa. Tämä vika tullaan ilmeisesti korjaamaan tulevissa versioissa.

7 54 Harjoitustöiden laadun kehittäminen Lähes kaikkialla ohjelmoinnin perusopetuksessa korostetaan, että dynaamista muistia varattaessa tulee varautua siihen, että muistia ei saadakaan varattua. Usein muistin loppumiseen varautuminen jää kuitenkin teorian asteelle. Ohjelman testaaminen tämän virhetyypin osalta on hankalaa, koska nykyisissä tietokoneissa on yleensä niin paljon muistia (sekä fyysistä muistia että virtuaalimuistia), että sen kuluttaminen loppuun on vaikeaa. Lisäksi muistin todella loppuessa myös testaustyökalujen yms. käyttö voi olla vaikeaa. Tämän vuoksi Tutnew tarjoaa mahdollisuuden rajoittaa ohjelman käytössä olevaa dynaamisen muistin määrää ja näin simuloida muistin loppumista. Muistin loppumiseen reagoimiseen löytyy ohjeita esim. kirjasta Effective C++. Ehkä tavallisin tapa simuloida muistin loppumista Tutnew ssä on rajoittaa ohjelman käytössä olevan dynaamisen muistin määrä sopivaan pieneen arvoon. Tämän voi tehdä joko ympäristömuuttujalla, käännösaikana tai kesken ohjelman suorituksen ohjelmasta käsin. Rajoituksen voi kytkeä joko vain Tutnew n alaisuudessa tehdyille muistinvarauksille tai koko ohjelman dynaamiselle muistille. Ikävä kyllä Tutnew pystyy jälleen rajoittamaan vain C++:n new- ja operator new -operaattoreilla varatun muistin määrää, joten muistin loppumista GCC:n versioiden 2.95.x ja 3.0 STL:n sisällä ei voi simuloida. Kun muisti loppuu, tulostaa Tutnew oletusarvoisesti varoituksen, jossa se kertoo, minkä new-operaation muistinvaraus epäonnistui. Lisäksi Tutnew tulostaa testauksen helpottamiseksi muistitilaston. Tämän jälkeen ohjelman suoritus jatkuu C++:n sääntöjen mukaan ikään kuin koneen muistin olisi loppunut. Jos varoitusta muistin loppumisesta ei haluta, sen voi kytkeä pois päältä. Joskus saattaa tulla tarve testata muistin loppumisen vaikutusta juuri tietyssä vaiheessa ohjelmaa. Tällöin voi olla vaikea laskea, kuinka paljon ohjelmalle on sallittava muistia, jotta se loppuisi juuri oikeassa kohtaa. Tutnew ssä on mahdollista asettaa raja myös sille, kuinka monen muistinvarauksen jälkeen muistin loppumista simuloidaan. Rajoitus kytketään päälle aiempien rajoitusten tapaan joko ympäristömuuttujalla, esikääntäjäsymbolilla tai funktiokutsulla. Tutnew antaa myös mahdollisuuden simuloida muistin loppumista satunnaislukugeneraattorin avulla. Tällä tavoin on mahdollista testata muistin loppumista satunnaisessa ohjelman kohdassa. Muistin loppumisen todennäköisyys on mahdollista asettaa aiempien rajoitusten tapaan joko ympäristömuuttujalla, esikääntäjäsymbolilla tai funktiokutsulla. Arvona näille annetaan liukuluku väliltä Arvo 0.0 tarkoittaa, että todennäköisyyssimulointia ei käytetä, 1.0 taas että muisti loppuu joka varauksella varmasti. Täten esim. arvo 0.1 tarkoittaa, että muisti loppuu satunnaisesti keskimäärin joka kymmenennellä varauksella. Jotta tämä simulointi olisi toistettavissa, käyttää Tutnew joka ohjelman ajokerralla samoja valesatunnaislukuja, joten muisti loppuu joka kerralla samoissa kohdissa.

8 Harjoitustöiden laadun kehittäminen 55 Käytettäviä valesatunnaislukuja voi vaihtaa asettamalla satunnaislukugeneraattorin siemenluku halutuksi. Tutnew käyttää valesatunnaislukujen tuottamiseen omaa valesatunnaislukugeneraattoriaan, joten tämän ominaisuuden käyttö ei sotke minkään kirjaston tuottamia valesatunnaislukuja. Muistin loppumisesta aiheutuva C++:n poikkeus on tietysti syytä ottaa kiinni ohjelmassa. Jos näin ei tehdä, kutsuu ohjelma funktiota std::terminate() (tai sille funktiolla std::terminate() määriteltyä korviketta). Tämän funktion täytyy keskeyttää ohjelman suoritus. Tutnew valvoo, että muistin loppumisesta aiheutuva poikkeus todella otetaan kiinni. Jos näin ei käy, eikä ohjelma ole määritellyt omaa korvikettaan funktiolle std::terminate(), tulostaa Tutnew virheilmoituksen. Tutnew tarkkailee myös käyttäjän std::terminate():lle mahdollisesti määrittelemää korviketta ja valvoo, että se tosiaan lopettaa ohjelman suorituksen. Jos näin ei käy, seuraa jälleen virheilmoitus. Samalla tavoin Tutnew käyttäytyy, jos muistin loppumisesta aiheutuva poikkeus ei pääse vuotamaan funktiosta ulos funktion poikkeusmääreen vuoksi. Tällöin ohjelma kutsuu funktiota std::unexpected() tai sille funktiolla std::unexpected() annettua korviketta. Tutnew tarkkailee näiden käyttäytymistä samoin kuin edellä std::terminate():n tapauksessa Yhteenveto Tutnew on standardia C++:aa käyttäen kirjoitettu kirjasto, joka tarkkailee ohjelman dynaamisen muistin käyttöä ja pyrkii löytämään ja raportoimaan siinä tapahtuvat virheet. Tutnew n käyttö on erittäin yksinkertaista, joten se sopii erinomaisesti alkeisohjelmointikursseilla käytettäväksi, mutta siitä on hyötyä kaikessa C++-ohjelmoinnissa. Tutnew n eri versioita on käytetty Tampereen teknillisellä korkeakoululla harjoitustöissä useita vuosia. Tutnew n avulla on saatu mahdolliseksi opettaa opiskelijoita kiinnittämään systemaattisesti huomiota muistinhallintaan liittyviin asioihin. Kyseessä on asia, joka tuottaa ongelmia kaikille C++-kielellä ohjelmointitektävissä toimiville, ja tämän kirjaston avulla on voitu lisätä opetusohjelmaan asian opettaminen ja vaatiminen ohjelmointikursseilla. Muistinhallinnan asioiden lisäksi tutnew:n avulla on havaittu muutamia kertoja myös hyvin vaikeasti löydettäviä alustamattomista muuttujista johtuneita virhetilanteita. Kirjaston käyttö ei ole yksinkertaisuutensa vuoksi tuottanut opiskelijoille erityisiä ongelmia, ongelmat tulevat vastaan lähinnä siinä, kun huomataan tarpeelliseksi etsiä omasta ohjelmasta syy Tutnew n antamaan virheilmoitukseen. Sen jälkeen kun Tutnew on otettu mukaan opetuksessa sekä vapaasti opiskelijoille tarjotta-

9 56 Harjoitustöiden laadun kehittäminen vaksi työkaluksi että opetushenkilökunnan tarkastustyötä helpottavaksi välineeksi, ohjelmointiharjoitustöiden laatu on noussut selvästi. Tutnew tä kerran käyttäneet todennäköisesti myös käyttävät kirjastoa myöhemminkin kaikessa C++-ohjelmoinnissaan havaittuaan, kuinka helposti muistinhallintavirheitä ohjelmaan jää. 4.3 Automaattinen tarkastustyökalu Ceilidh Kirsti Ala-Mutka Tausta Perusohjelmointitaitojen oppiminen jo opintojen alkuvaiheessa on tietotekniikan opiskelijalle erittäin tärkeää, koska useimmilla jatkokursseilla tarvitaan ja oletetaan perusohjelmointitaitojen hallintaa. Tämän vuoksi ensimmäisillä ohjelmointikursseilla pyritään opettamaan yleisiä hyviä ohjelmointitapoja sekä tukemaan opetusta käytännön harjoitustöillä. Koska ohjelmointi on taito, jonka oppii vain käytännössä itse kokeilemalla ja tekemällä, käytännön harjoitustyöt ovat olennainen osa opetusta. Esimerkiksi Berglundin ja Danielsin Uppsalan yliopistossa suorittama tutkimus [2] osoitti, että opiskelijoiden oppimistulokset tietorakenteiden ja algoritmien kurssilla paranivat huomattavasti, kun opiskelijoiden käytännön harjoittelua lisättiin viikoittain pakollisilla harjoitustehtävillä. Harjoitustyöt ovat kuitenkin usein eniten henkilökunnan työtä vaativa osa kurssin järjestelyistä. Koska harjoitustöiden tarkastaminen on työlästä ja aikaavievää, palautteen saaminen kestää kauan ja on usein niukkaa, rajoitettu mahdollisesti vain tietoon hyväksynnästä tai hylkäyksestä. Mikäli opiskelija kuitenkin saa vasta kurssin loppuvaiheessa tiedon virheistä, joita hän teki ensimmäisessä harjoitustyössään, hän on jo käyttänyt virheellisiä käsityksiään pohjana muille opituille asioille ja ehkä ehtinyt tehdä käsitystensä perusteella seuraavatkin palautettavat työt. Pahimmassa tapauksessa opiskelijan koko kurssin suoritus keskeytyy, koska virheitä ei oikaistu ajoissa. Esimerkiksi Rekkedal osoitti jo aikaa sitten, että kun harjoitustyöpalautteen saamiseen kulunut aika lyheni 8,2 päivästä 5,6 päivään, kurssin loppuun asti suorittaneiden opiskelijoiden määrä kasvoi 69 prosentista 91 prosenttiin [3]. Myös yhdenmukainen harjoitustöiden arvostelu on vaikea, lähes mahdoton tehtävä. Useiden satojen arvosteltavien töiden käsittelyssä tarvitaan useampi kuin yksi henkilö ja siksi on vaikea taata kaikille töille täsmälleen samat arvosteluperusteet. Ongelmaa helpottavat selkeät yhdenmukaiset arvostelusäännöt. Niistäkään ei silti saada kaikkia mahdollisia tilanteita kattavia ohjeita, jolloin osa arvostelusta jää joka tapauksessa arvostelua suorittavan henkilön harkinnan varaan. Koska tarkastajia on useita, on myös vaikea muodostaa kokonaiskuvaa

Tutnew työkalu C++:n dynaamisen muistinhallinnan testaamiseen

Tutnew työkalu C++:n dynaamisen muistinhallinnan testaamiseen Tutnew työkalu C++:n dynaamisen muistinhallinnan testaamiseen Matti Rintala (matti.rintala@iki.fi) 29. lokakuuta 2007 1 Johdanto C++ on teollisuudessa erittäin suosittu ohjelmointikieli ja siitä johtuen

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

4.1 C++-kielen tyylianalysaattori Style++

4.1 C++-kielen tyylianalysaattori Style++ 40 Harjoitustöiden laadun kehittäminen ihin, joiden tarkastaminen ja ohjaaminen oli aikaisemmin hyvin vaikeaa. Osa näistä työkaluista on havaittu niin hyödyllisiksi, että laitoksen henkilökunta ja opiskelijatkin

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

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017.

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017. C! Dynaaminen muisti 9.2.2017 Agenda Kertausta merkkijonoista Dynaaminen muisti Valgrind-perusteet ja esimerkkejä Seuraava luento to 2.3. Ei harjoituksia arviointiviikolla 13.2. 17.2. 2 Palautetta merkkijonoihin

Lisätiedot

Kääntäjän virheilmoituksia

Kääntäjän virheilmoituksia OHJ-1101 Ohjelmointi 1e 2008-09 1 Kääntäjän virheilmoituksia Kun progvh2 ohjelma käännetään antaa tutg++ seuraavat virheilmoitukset ja varoitukset: proffa> tutg++ progvh2.cc progvh2.cc:29:13: warning:

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

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

Näin järjestän ohjelmointikurssin, vaikka en ole koskaan ohjelmoinut www.helsinki.fi

Näin järjestän ohjelmointikurssin, vaikka en ole koskaan ohjelmoinut www.helsinki.fi Näin järjestän ohjelmointikurssin, vaikka en ole koskaan ohjelmoinut Ohjelmointikurssin järjestäminen Helsingin yliopiston Ohjelmoinnin MOOC-kurssimateriaalin avulla 15.4.2016 1 Linkki Tietojenkäsittelytieteen

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

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki PERL TIE-20306 Principles of Programming Languages Ryhmä 4: Joonas Lång & Jasmin Laitamäki 1. Johdanto Perl on ohjelmointikielten perhe, johon kuuluu Perl 5 ja Perl 6. Kielet ovat kuitenkin erilliset ohjelmointikielet

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

Lisätiedot

C++ Ohjelmoijan käsikirja. Johdanto

C++ Ohjelmoijan käsikirja. Johdanto Johdanto C++ Ohjelmoijan käsikirja Johdanto Tervetuloa Inside C++-kirjan pariin. Tämä on opaskirja standardi C++:n käyttöön. Käsittelemme kirjassa kaikki syntaksin, kieliopin, olio-ohjelmoinnin ja standardikirjastojen

Lisätiedot

Rajapinnat ja olioiden välittäminen

Rajapinnat ja olioiden välittäminen Rajapinnat ja olioiden välittäminen Moduulit/oliot kutsuvat toisiaan kapseloitujen rajapintojen läpi Kutsuissa välitetään usein olioita paikasta toiseen Jos olion omistus (= tuhoamisvastuu) säilyy koko

Lisätiedot

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti C! C-ohjelmoinnin peruskurssi Pasi Sarolahti Mitä haluan oppia C-kurssilla? ja miksi? Tutustu lähimpään naapuriin Keskustelkaa miksi halusitte / jouduitte tulemaan kurssille 3 minuuttia è kootaan vastauksia

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009

Tähtitieteen käytännön menetelmiä Kevät 2009 Tähtitieteen käytännön menetelmiä Kevät 2009 2009-01-12 Yleistä Luennot Luennoija hannu.p.parviainen@helsinki.fi Aikataulu Observatoriolla Maanantaisin 10.00-12.00 Ohjattua harjoittelua maanantaisin 9.00-10.00

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

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

Rakennusautomaation käytettävyys. Rakennusautomaatioseminaari 30.5.2013 Sami Karjalainen, VTT

Rakennusautomaation käytettävyys. Rakennusautomaatioseminaari 30.5.2013 Sami Karjalainen, VTT Rakennusautomaation käytettävyys Rakennusautomaatioseminaari 30.5.2013 Sami Karjalainen, VTT 2 Oma tausta Perusinsinööri DI, lvi-tekniikka, TKK 1993 Herääminen käytettävyysasioihin noin 2002 Tekniikan

Lisätiedot

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

Lisätiedot

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka

Lisätiedot

2 Konekieli, aliohjelmat, keskeytykset

2 Konekieli, aliohjelmat, keskeytykset ITK145 Käyttöjärjestelmät, kesä 2005 Tenttitärppejä Tässä on lueteltu suurin piirtein kaikki vuosina 2003-2005 kurssin tenteissä kysytyt kysymykset, ja mukana on myös muutama uusi. Jokaisessa kysymyksessä

Lisätiedot

Automaattinen muistinhallinta

Automaattinen muistinhallinta Automaattinen muistinhallinta Timo Tapanainen (ttapanai@cs.helsinki.fi) Helsinki 12. huhtikuuta 2004 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö 1 Johdanto...1 2 Automaattinen muistinhallinta...1

Lisätiedot

Ohjelmointi 1. Kumppanit

Ohjelmointi 1. Kumppanit Ohjelmointi 1 Kumppanit November 20, 2012 2 Contents 1 Mitä ohjelmointi on 7 2 Ensimmäinen C#-ohjelma 9 2.1 Ohjelman kirjoittaminen......................... 9 A Liite 11 3 4 CONTENTS Esipuhe Esipuhe 5

Lisätiedot

Automaattinen yksikkötestaus

Automaattinen yksikkötestaus Teknillinen Korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Automaattinen yksikkötestaus Ryhmä Rajoitteiset Versio Päivämäärä Tekijä

Lisätiedot

Johdatus ohjelmointiin

Johdatus ohjelmointiin Johdatus ohjelmointiin EXAM tentin liitetiedostojen lataaminen, käyttäminen ja palauttaminen Kerro mahdolliset puutteet tai parannusehdotukset: pietari.heino@tut.fi Tällä sivulla on selitetty lyhyesti

Lisätiedot

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

Lisätiedot

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaiheet 1 ja 2. Antti Jääskeläinen Matti Vuori

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaiheet 1 ja 2. Antti Jääskeläinen Matti Vuori TIE-21204 Ohjelmistojen testaus 2015 Harjoitustyö Vaiheet 1 ja 2 Antti Jääskeläinen Matti Vuori Työn yleiset järjestelyt 14.9.2015 2 Valmistautuminen Ilmoittaudu kurssille Lue harjoitustyön nettisivut

Lisätiedot

Veli-Matti Taskila asiantuntija Suomen ammattikorkeakouluopiskelijakuntien liitto SAMOK ry. etunimi.sukunimi@samok.fi

Veli-Matti Taskila asiantuntija Suomen ammattikorkeakouluopiskelijakuntien liitto SAMOK ry. etunimi.sukunimi@samok.fi 1 Veli-Matti Taskila asiantuntija Suomen ammattikorkeakouluopiskelijakuntien liitto SAMOK ry. etunimi.sukunimi@samok.fi AMMATTIKORKEAKOULUOPINTOJEN HARJOITTELU OPISKELIJAN SILMIN "Harjoittelun tavoitteena

Lisätiedot

Ei raportteja roskiin

Ei raportteja roskiin Ei raportteja roskiin Wikit ja blogit opetuksessa Sosiaalinen media koulutuksessa Tietotekniikan liitto - Helia 2006-11-16 Ei raportteja roskiin Vanha ja uusi tapa Käytännön kokemuksia Lisenssit Tekniikka

Lisätiedot

KURSSIPALAUTE KÄYTÄNNÖSSÄ: MITÄ JA MITEN?

KURSSIPALAUTE KÄYTÄNNÖSSÄ: MITÄ JA MITEN? KURSSIPALAUTE KÄYTÄNNÖSSÄ: MITÄ JA MITEN? Terhi Skaniakos Erikoissuunnittelija Strateginen kehittäminen Kurssipalautejärjestelmä Tarkoituksena on kerätä systemaattista palautetta yliopiston kaikista tutkinto-opiskelijoille

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

Lisätiedot

Dynaaminen muisti Rakenteiset tietotyypit

Dynaaminen muisti Rakenteiset tietotyypit C! Dynaaminen muisti Rakenteiset tietotyypit 1.3.2016 Agenda Kertausta Dynaaminen muisti Valgrind-perusteet ja esimerkkejä Yhteenveto tietorakenteista Vilkaisu 3. kierroksen tehtäviin Esim: miten linkitetty

Lisätiedot

TIETOKONE JA TIETOVERKOT TYÖVÄLINEENÄ

TIETOKONE JA TIETOVERKOT TYÖVÄLINEENÄ aaro.leikari@hotmail.com TIETOKONE JA TIETOVERKOT TYÖVÄLINEENÄ 25.01.2016 SISÄLLYS 1. Käyttöjärjestelmän asentaminen... 1 1.1 Windowsin asettamia laitteistovaatimuksia... 1 1.2 Windowsin asentaminen...

Lisätiedot

Järjestelmän asetukset. Asetustiedostojen muokkaaminen. Pääkäyttäjä eli root. Järjestelmänhallinnan työkalut

Järjestelmän asetukset. Asetustiedostojen muokkaaminen. Pääkäyttäjä eli root. Järjestelmänhallinnan työkalut Järjestelmän asetukset Järjestelmänhallinnan työkalut Ubuntussa järjestelmän hallintaan ja asetusten muokkaamiseen tarkoitetut ohjelmat on koottu Järjestelmä-valikon alle Asetukset- ja Ylläpito -alavalikoista

Lisätiedot

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1 Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 1.3.2010 1 / 36 Monikko Monikko (engl. tuple) muistuttaa listaa, mutta monikon sisältöä ei voi muuttaa sen jälkeen,

Lisätiedot

UML -mallinnus TILAKAAVIO

UML -mallinnus TILAKAAVIO UML -mallinnus TILAKAAVIO SISÄLLYS 3. Tilakaavio 3.1 Tilakaavion alku- ja lopputilat 3.2 Tilan nimi, muuttujat ja toiminnot 3.3 Tilasiirtymä 3.4 Tilasiirtymän vai tilan toiminnot 3.5 Tilasiirtymän tapahtumat

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

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

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 1 TIE-20100 Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 2 Lähteet Luentomoniste pohjautuu vahvasti prof. Antti Valmarin vanhaan luentomonisteeseen

Lisätiedot

L models. Käyttöohje. Ryhmä Rajoitteiset

L models. Käyttöohje. Ryhmä Rajoitteiset Teknillinen korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Käyttöohje Ryhmä Rajoitteiset Versio Päivämäärä Tekijä Muutokset 0.1

Lisätiedot

Harjoitustyö 3 - Millosemeni

Harjoitustyö 3 - Millosemeni Harjoitustyö 3 - Millosemeni Tampereen kaupunki tarjoaa avoin data -sivuillaan Tampereen joukkoliikenteen aikataulut, reitit sekä rajapinnan joukkoliikenteen reaaliaikaiseen seurantaan. Näinpä erilaisille

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 10: Aliohjelmat, foreign function interface Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 25. 3. 2013 Sisältö 1 Aliohjelmien käyttäminen

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

Ohjelmistojen mallintaminen Olioiden yhteistyö. 18.11.2008 Harri Laine 1

Ohjelmistojen mallintaminen Olioiden yhteistyö. 18.11.2008 Harri Laine 1 Ohjelmistojen mallintaminen Olioiden yhteistyö 18.11.2008 Harri Laine 1 Olioiden yhteistyö Oliokeskeisen ohjelmistonäkemyksen mukaan ohjelmiston palvelut tuotetaan olioiden yhteistyön tuloksena. Ohjelmisto

Lisätiedot

Ohjelmointi 1 / syksy /20: IDE

Ohjelmointi 1 / syksy /20: IDE Ohjelmointi 1 / syksy 2007 10/20: IDE Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/8 Tämän luennon rakenne

Lisätiedot

Alkukartoitus Opiskeluvalmiudet

Alkukartoitus Opiskeluvalmiudet Alkukartoitus Opiskeluvalmiudet Päivämäärä.. Oppilaitos.. Nimi.. Tehtävä 1 Millainen kielenoppija sinä olet? Merkitse rastilla (x) lauseet, jotka kertovat sinun tyylistäsi oppia ja käyttää kieltä. 1. Muistan

Lisätiedot

9. Luento: Ohjelmistotyö. Tommi Mikkonen, tommi.mikkonen@tut.fi

9. Luento: Ohjelmistotyö. Tommi Mikkonen, tommi.mikkonen@tut.fi 9. Luento: Ohjelmistotyö Tommi Mikkonen, tommi.mikkonen@tut.fi Agenda Johdanto Ristikäännös Testaus ja virheen jäljitys Yleensä Kehitysympäristössä Käyttöympäristössä Laitteiston testaus Iteratiivisesta

Lisätiedot

Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3

Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3 Uutisjärjestelmä Vaatimusmäärittely Versio 1.3 Sisällys 1 Muutoshistoria... 4 2 Viitteet... 4 3 Sanasto... 4 3.1 Lyhenteet... 4 3.2 Määritelmät... 4 4 Johdanto...5 4.1 Järjestelmän yleiskuvaus... 5 4.2

Lisätiedot

C++11 lambdat: [](){} Matti Rintala

C++11 lambdat: [](){} Matti Rintala C++11 lambdat: [](){} Matti Rintala bool(*)(int) Tarve Tarve välittää kirjastolle/funktiolle toiminnallisuutta Callback-funktiot Virhekäsittely Käyttöliittymät Geneeristen kirjastojen räätälöinti STL:n

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 VIII Poikkeusten ja tapahtumien käsittely Sisältö 1. Poikkeusten käsittelyn käsitteitä ja suunnittelukriteerejä 2. Poikkeusten käsittely C++:ssa 3. Poikkeusten

Lisätiedot

Automaattinen regressiotestaus ilman testitapauksia. Pekka Aho, VTT Matias Suarez, F-Secure

Automaattinen regressiotestaus ilman testitapauksia. Pekka Aho, VTT Matias Suarez, F-Secure Automaattinen regressiotestaus ilman testitapauksia Pekka Aho, VTT Matias Suarez, F-Secure 2 Mitä on regressiotestaus ja miksi sitä tehdään? Kun ohjelmistoon tehdään muutoksia kehityksen tai ylläpidon

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015 TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 30. marraskuuta 2015 Sisällys t Väitöstilaisuus 4.12.2015 kello 12 vanhassa juhlasalissa S212 saa tulla 2 demoruksia

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli TIE-20306 PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli Seminaariesitelmä ryhmä 24 Markku Ahokas Jani Kuitti i SISÄLLYSLUETTELO 1. YLEISTÄ EIFFELISTÄ... 1 1.1 Historia ja tausta... 1 1.2

Lisätiedot

GSRELE ohjeet. Yleistä

GSRELE ohjeet. Yleistä GSRELE ohjeet Yleistä GSM rele ohjaa Nokia 3310 puhelimen avulla releitä, mittaa lämpötilaa, tekee etähälytyksiä GSM-verkon avulla. Kauko-ohjauspuhelin voi olla mikä malli tahansa tai tavallinen lankapuhelin.

Lisätiedot

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER Group 16 Ville Laatu Henri Myllyoja - i SISÄLLYSLUETTELO 1. DEBUGGERI YLEISESTI... II 1.1 Debuggerin käyttämien... ii 1.2 Debuggerin käynnistäminen... ii

Lisätiedot

<e.g. must, essential, conditional>

<e.g. must, essential, conditional> Käyttötapaukset Kurssin malli käyttötapauksille: Tila < List of users and the other systems that interacts directly with a system>

Lisätiedot

Muuttujien roolit Kiintoarvo cin >> r;

Muuttujien roolit Kiintoarvo cin >> r; Muuttujien roolit Muuttujilla on ohjelmissa eräitä tyypillisiä käyttötapoja, joita kutsutaan muuttujien rooleiksi. Esimerkiksi muuttuja, jonka arvoa ei muuteta enää kertaakaan muuttujan alustamisen jälkeen,

Lisätiedot

Näkökulmia tietoyhteiskuntavalmiuksiin

Näkökulmia tietoyhteiskuntavalmiuksiin Näkökulmia tietoyhteiskuntavalmiuksiin Tietotekniikka oppiaineeksi peruskouluun Ralph-Johan Back Imped Åbo Akademi & Turun yliopisto 18. maaliskuuta 2010 Taustaa Tietojenkäsittelytieteen professori, Åbo

Lisätiedot

C-ohjelmointikielen perusteet, osa 1

C-ohjelmointikielen perusteet, osa 1 C-ohjelmointikielen perusteet, osa 1 Kurssi johdattaa sinut askel askeleelta C-ohjelmoinnin perusteisiin. Kurssi suoritetaan kokonaan netissä vuorovaikutteisella alustalla itseopiskeluna tutorin avustuksella.

Lisätiedot

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli Dart Ryhmä 38 Ville Tahvanainen Juha Häkli 1.LYHYESTI Dart on luokkapohjainen, yksiperintäinen, puhdas olio-ohjelmointikieli. Dart on dynaamisesti tyypitetty. Sovellukset on organisoitu modulaarisiksi

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

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

Lisätiedot

Kiinan kursseilla 1 2 painotetaan suullista kielitaitoa ja kurssista 3 alkaen lisätään vähitellen myös merkkien lukemista ja kirjoittamista.

Kiinan kursseilla 1 2 painotetaan suullista kielitaitoa ja kurssista 3 alkaen lisätään vähitellen myös merkkien lukemista ja kirjoittamista. Kiina, B3kielen opetussuunnitelma (lukiossa alkava oppimäärä) Kiinan kursseilla tutustutaan kiinankielisen alueen elämään, arkeen, juhlaan, historiaan ja nykyisyyteen. Opiskelun ohessa saatu kielen ja

Lisätiedot

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Viimeksi muokattu 5. toukokuuta 2012 Maastotietokannan torrent-jakeluun sisältyy yli 5000 zip-arkistoa,

Lisätiedot

Electronic Frontier Finland ry

Electronic Frontier Finland ry Lausunto luonnoksesta hallituksen esitykseksi laiksi sähköisen viestinnän tietosuojalain muuttamisesta 17.8.2007 17.08.09 Electronic Frontier Finland ry www.effi.org 1. Yleistä Electronic Frontier Finland

Lisätiedot

Tik-76.115 Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu. LiKe Liiketoiminnan kehityksen tukiprojekti

Tik-76.115 Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu. LiKe Liiketoiminnan kehityksen tukiprojekti Tik-76.115 Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu TESTIRAPORTTI LiKe Liiketoiminnan kehityksen tukiprojekti Versio: 1.1 Tila: hyväksytty Päivämäärä: 13.2.2001 Tekijä:

Lisätiedot

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

System.out.printf(%d / %d = %.2f%n, ekaluku, tokaluku, osamaara); Kysy Karilta tai Kimmolta, jos tehtävissä on jotain epäselvää. Kerro WETOon liittyvät ongelmat suoraan Jormalle sähköpostitse (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja

Lisätiedot

1. Algoritmi 1.1 Sisällys Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Sami Hirvonen. Ulkoasut Media Works sivustolle

Sami Hirvonen. Ulkoasut Media Works sivustolle Metropolia ammattikorkeakoulu Mediatekniikan koulutusohjelma VBP07S Sami Hirvonen Ulkoasut Media Works sivustolle Loppuraportti 14.10.2010 Visuaalinen suunnittelu 2 Sisällys 1 Johdanto 3 2 Oppimisteknologiat

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

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b Pythonin Kertaus Cse-a1130 Tietotekniikka Sovelluksissa Versio 0.01b Listat 1/2 esimerkkejä listan peruskäytöstä. > lista=['kala','kukko','kissa','koira'] ['kala','kukko','kissa','koira'] >lista.append('kana')

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

etunimi, sukunimi ja opiskelijanumero ja näillä Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin perusteet, syksy 2006 Ohjelmoinnin perusteet, syksy 2006 Esimerkkivastaukset 1. harjoituksiin. Alkuperäiset esimerkkivastaukset laati Jari Suominen. Vastauksia muokkasi Jukka Stenlund. 1. Esitä seuraavan algoritmin tila jokaisen

Lisätiedot

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.

Lisätiedot

TIE-20200 Ohjelmistojen suunnittelu

TIE-20200 Ohjelmistojen suunnittelu TIE-20200 Ohjelmistojen suunnittelu Luento 9: Kirjastot, pluginit jne. TIE-20200 Samuel Lahtinen 1 Ajankohtaista Viikkoharjoituksissa kirjastojen käyttöä & toteuttamista Kurkkaaminen viime viikon viikkoharkkajuttuihin

Lisätiedot

Seuraavat Windowsin käyttöjärjestelmäversiot tukevat Novell Filr -työpöytäsovellusta:

Seuraavat Windowsin käyttöjärjestelmäversiot tukevat Novell Filr -työpöytäsovellusta: Novell Filr -työpöytäsovellus lueminut Huhtikuu 2015 1 Tuotteen yleiskatsaus Novell Filr -työpöytäsovelluksella voit synkronoida Novell Filr -tiedostoja tietokoneesi tiedostojärjestelmän kanssa ja muokata

Lisätiedot

PROBYTE GSM ALARM #6d

PROBYTE GSM ALARM #6d PROBYTE GSM ALARM #6d PROBYTE GSM ALARM #6 toimii GSM-hälyttimenä ja kaukoohjaimena. Soitto- tai SMS-hälytysviestien vastaanottajia voidaan hallita etäohjatusti. Ohjusrelettä voidaan ohjata SMS-viestillä.

Lisätiedot

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

SÄHKÖTEKNIIKAN KOULUTUSOHJELMAN KANDIDAATINTYÖOHJE

SÄHKÖTEKNIIKAN KOULUTUSOHJELMAN KANDIDAATINTYÖOHJE SÄHKÖTEKNIIKAN KOULUTUSOHJELMAN KANDIDAATINTYÖOHJE Ohje hyväksytty osastoneuvostossa 17.8.2005 1 Sisällys 1. Kandidaatintyö ja sen tarkoitus...2 2. Kandidaatintyön aihe ja tarkastaja...3 3. Kandidaatintyön

Lisätiedot

PÄÄOMINAISUUDET KÄYTTÖOHJE

PÄÄOMINAISUUDET KÄYTTÖOHJE KÄYTTÖOHJE CONQUEST V.H.P. Monien vuosien kvartsikokemuksella siivekkäästä tiimalasilogostaan tunnettu Longines esittelee nyt uuden Conquest V.H.P -kellonsa, jossa on ainutlaatuinen huippuluokan koneisto.

Lisätiedot

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant Versio: V0.3

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant Versio: V0.3 AgilElephant SEPA Diary Petri Kalsi 55347A Heikki Salminen 51137K Tekijä: Petri Kalsi Omistaja: ElectricSeven Aihe: PK&HS Sivu 1 / 7 Dokumenttihistoria Revisiohistoria Revision päiväys: 29.11.2004 Seuraavan

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

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta. Tehtävä 63. Kirjoita oma versio funktiosta strcmp(),joka saa parametrinaan kaksi merkkiosoitinta. Tee ohjelma, jossa luetaan kaksi merkkijonoa, joita sitten verrataan ko. funktiolla. Tehtävä 64. Kirjoita

Lisätiedot

SEPA-päiväkirja: Käytettävyystestaus & Heuristinen testaus

SEPA-päiväkirja: Käytettävyystestaus & Heuristinen testaus SEPA-päiväkirja: Käytettävyystestaus & Heuristinen testaus Lehmus, Auvinen, Pihamaa Johdanto Käyttäjätestauksella tarkoitetaan tuotteen tai sen prototyypin testauttamista todellisilla käyttäjillä. Kehittäjät

Lisätiedot

Harjoitus 3 (viikko 39)

Harjoitus 3 (viikko 39) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Vältä liian pitkiä rivejä. Ohjelmointitehtävien

Lisätiedot

Heuristisen arvioinnin muistilista - lyhyt versio

Heuristisen arvioinnin muistilista - lyhyt versio Alla oleva kymmenkohtainen muistilista on sovellettu Jakob Nielsenin heuristisen arvioinnin muistilistasta (Nielsen, 1994), hyödyntäen Keith Instonen wwwpalveluiden arviointiin muokattua samaista listaa

Lisätiedot

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 12. Periytyminen Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi

Lisätiedot

TURNITIN-OHJELMAN KÄYTTÖ - OPISKELIJAN OHJE

TURNITIN-OHJELMAN KÄYTTÖ - OPISKELIJAN OHJE TURNITIN-OHJELMANKÄYTTÖ-OPISKELIJANOHJE Opettaja voi käyttää Turnitin-ohjelmaa opiskelijoiden kirjallisten töiden tarkastuksessa. Turnitin vertaa opiskelijan tekstiä kansainväliseen tietokantaan ja tekee

Lisätiedot

ENE-C2001 Käytännön energiatekniikkaa. Aloitustapaaminen 11.4.2016. Osa III: Tekninen raportointi

ENE-C2001 Käytännön energiatekniikkaa. Aloitustapaaminen 11.4.2016. Osa III: Tekninen raportointi ENE-C2001 Käytännön energiatekniikkaa Aloitustapaaminen 11.4.2016 Osa III: Tekninen raportointi Sisältö Raportoinnin ABC: Miksi kirjoitan? Mitä kirjoitan? Miten kirjoitan? Muutamia erityisasioita 1 Miksi

Lisätiedot

Objective-C. Ryhmä 35: Ilpo Kärki Aleksi Pälä

Objective-C. Ryhmä 35: Ilpo Kärki Aleksi Pälä Objective-C Ryhmä 35: Ilpo Kärki Aleksi Pälä Sisällysluettelo 1 Yleistä...3 1.1 Lyhyesti...3 1.2 Historiaa...3 1.3 Hybridikieli...3 2 Muistinhallinta...5 2.1 Manual Retain Release (MRR)...5 2.2 Automatic

Lisätiedot

Menetelmäraportti - Konfiguraationhallinta

Menetelmäraportti - Konfiguraationhallinta Menetelmäraportti - Konfiguraationhallinta Päiväys Tekijä 22.03.02 Ville Vaittinen Sisällysluettelo 1. Johdanto... 3 1.1 Tärkeimmät lyhenteet... 3 2. Konfiguraationhallinnan tärkeimmät välineet... 4 2.1

Lisätiedot

Kansainvälisyys osana korkeakouluopintoja kokemuksia ja haasteita suomalaisista korkeakouluista

Kansainvälisyys osana korkeakouluopintoja kokemuksia ja haasteita suomalaisista korkeakouluista Kansainvälisyys osana korkeakouluopintoja kokemuksia ja haasteita suomalaisista korkeakouluista Irma Garam, CIMO Kv kevätpäivät Lahti 22.5.2012 Jun- 12 Selvitys: Kansainvälisyys osana korkeakouluopintoja

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot