TAMPEREEN TEKNILLINEN YLIOPISTO Tietotekniikan osasto. ANTTI VIRTANEN Visuaalinen tulkki ohjelmoinnin opetukseen Diplomityö

Koko: px
Aloita esitys sivulta:

Download "TAMPEREEN TEKNILLINEN YLIOPISTO Tietotekniikan osasto. ANTTI VIRTANEN Visuaalinen tulkki ohjelmoinnin opetukseen Diplomityö"

Transkriptio

1 TAMPEREEN TEKNILLINEN YLIOPISTO Tietotekniikan osasto ANTTI VIRTANEN Visuaalinen tulkki ohjelmoinnin opetukseen Diplomityö Aihe hyväksytty osastoneuvoston kokouksessa Tarkastajat: Prof. Hannu-Matti Järvinen (TTY) DI Essi Lahtinen (TTY) 1

2 Alkulause Haluan kiittää työn ohjaajia professori Hannu-Matti Järvistä ja tutkija Essi Lahtista, jotka pysyivät kärsivällisinä tekemisen kangerrellassa. Molemmat jaksoivat korjata kirjoitusvirheitäni ja antoivat hedelmällistä palautetta sisällöstä ahkerasti. Lämpimät kiitokset kaikille työn tekemisessä kannustaneille ja auttaneille ystäville ja kollegoille. Erityiskiitokset Mira Tammiselle, Mika Valtolalle sekä #titeplanets IRCkeskustelukanavan väelle, jotka saivat suurimman osan työhön liittyvästä tilityksestä. Tampereella Antti Virtanen Insinöörinkatu 68 B

3 Sisällysluettelo 1 Johdanto Ohjelmien visualisointi TTY:n perusohjelmoinnin opetus Tietokonepohjaisen visualisoinnin tarve Visualisoinnin hyödyt Visualisoinnin käyttöönoton ongelmat Hyvän visualisointityökalun ominaisuudet Visualisoinnin hyötyjen arviointi Olemassaolevat järjestelmät Tango, X-Tango, Polka Trakla, Trakla Blue, BlueJ Jeliot-perhe SDE (SIMPLESEM) Yhteenveto Lausekielten jäsentäminen Formaalit kielet ja kielioppi Vasemmalle rekursiivisuus Säännöllisten kielten luokittelu (LALR, LR, LL) Kurkistus Lausekielten määrittely Jäsennyspuu Yksikäsitteisyys Presedenssi ja sitovuus Jäsennystekniikat Lausekielten jäsentäminen käytännössä Selaaja Jäsentäjä Välikieli Postfix Yleisassembler Tavukoodi

4 3.4.4 Puurakenne (AST) Tulkit ja virtuaalikoneet Kääntämisen ja tulkkaamisen ero Virtuaalikone Tulkkaamisen edut Tulkkien toteuttaminen Symbolitulkin perusrakenne Käskykanta Puurakenne (AST) tulkin välikielenä Tulkkaamisen nopeus Konekielelle kääntäminen tulkissa Muistimalli Automaattinen roskienkeruu Symbolitaulu Aktivaatiopino Ajonaikaiset semanttiset tarkistukset VIP visualisaattorin toteutus Perusrakenne Käytetyt apukirjastot Ongelmat CUP:n kanssa Välikieli Suoritusaskel Kääntäjä Staattiset semanttiset tarkistukset Profiloija Testaus Loki Regressiotestaus Käyttöliittymä Muuttujien ja funktiokutsujen esittäminen Hallintapainikkeet Visualisointien tekeminen Ohjekommentit

5 5.10 Koodieditori Lausekkeiden evaluoinnin esittäminen Tulkki Tulkkialgoritmi Dynaamiset semanttiset tarkistukset Symbolitaulu Aktivaatiopino Muisti Muuttujien toteutus VIP:n ohjelmointikieli C Tyypitys ja tietotyypit Ominaisuuksia, joita ei ole toteutettu Tiedon luku ja kirjoitus Funktiot Lauseet Jatkokehitysajatuksia Räätälöinti Kielen muokkaaminen Välikielen esittäminen Muisti-ikkuna Uudet C-- ominaisuudet Askelten rajoittaminen Undo-toiminto Käyttöliittymä C++:n STL-standardikirjaston toteuttaminen Yhteenveto Lähdeluettelo...63 Liite 1 Selaajan JFlex-tiedosto Liite 2 Jäsentäjän CUP-tiedosto 5

6 TAMPEREEN TEKNILLINEN YLIOPISTO Tietotekniikan osasto Ohjelmistotekniikka VIRTANEN, ANTTI: Visuaalinen tulkki ohjelmoinnin opetukseen Diplomityö, 51 s., 21 liites. Tarkastajat: prof. Hannu-Matti Järvinen, tutkija Essi Lahtinen Rahoittajat: TTY, Codewitz/Minerva, Virtuaali-yliopisto. Toukokuu 2005 Avainsanat: tulkki, C++, visualisointi, opetus Ohjelmien visualisointia on tutkittu paljon ja visualisointiin on kehitetty erilaisia työkaluja. Opetuskäyttössä erityisesti tietorakenteiden ja algoritmien visualisointi on osoittautunut hyödylliseksi. Oppikirjoissa esitetään usein ohjelmien toimintaa kuvien ja symbolien avulla esimerkiksi piirtämällä nuolia kuvaamaan osoittimia. Tässä työssä toteutettiin visuaalinen tulkki C++-kielen osajoukolle ohjelmoinnin peruskurssin tarpeisiin. Toteutettu tulkki visualisoi ohjelman tilan ja esittää suorituksen etenemisen askel kerrallaan. Tulkki on suunniteltu ohjelmoinnin perusopetukseen, joten tehokkuuteen ei ole kiinnitetty erityistä huomiota. C++-kielen perusrakenteet toteutettiin työn puitteissa, mutta mallit, oliot ja poikkeukset jätettiin toteuttamatta. Vastaavia järjestelmiä on toteutettu muissa yliopistoissa, mutta mikään tutkituista vaihtehdoista ei soveltunut TTY:n käyttöön, joten tässä työssä toteutettiin kokonaan itse tehty visualisaattori. Erityistä huomiota kiinnitettiin helppokäyttöisyyteen sekä opiskelijan että opettajan näkökulmasta. Järjestelmän lähdekoodi on kokonaisuudessaan saatavilla ilmaiseksi ei-kaupalliseen käyttöön. Tulkki on toteutettu Java-applettina, joten sitä voi käyttää millä tahansa käyttöjärjestelmällä. WWW-palvelinta sijaan visualisointeja voidaan ajaa paikalliselta kovalevyltä selaimella. Tulkkia on käytetty TTY:llä perusohjelmoinnin opetuksessa ja uusien visualisointien luominen on osoittautunut helpoksi. Työkalun käytöstä on kerätty opiskelijapalautetta, joka on ollut melko neutraalia. Tulkin käyttö on ollut täysin vapaaehtoista, joten aineiston pohjalta on vaikea arvioida sen hyödyllisyyttä. 6

7 TAMPERE UNIVERSITY OF TECHNOLOGY Department of Computer Science, Institute of Software Systems VIRTANEN, ANTTI: Visual interpreter for learning programming Master of Science Thesis, 51 pages, 21 enclosure pages Examiner: Dr. Hannu-Matti Järvinen and Res. Essi Lahtinen May 2005 Keywords: interpreter, C++, visualization, learning Programming books often present the structure and behavior of programs using pictures and symbols. For example, arrows commonly present pointers. Consequently, there has been significant amount of research on visualizing programs and a variety of tools have been developed. A visual interpreter for a subset of C++ programming language was developed in this project. The interpreter visualizes the state of a given program and it's execution step by step. The interpreter has not been optimized for speed as the system was desigend for teaching introductory programming. The basic constructs of C++ were implemented but advanced features like templates, object oriented programming and exceptions were left out. Similar systems have been developed in other universities but all examined systems lacked some important features from our point of view. Thus, a completely new system was developed instead of tailoring an existing one. Ease of use, from both student's and teacher's point of view, was considered especially important. The full source code of the system is available on request for non-commercial use. Being a Java-applet, the interpreter is available on virtually all platforms. The system is still a stand-alone program and can be used without a WWW server. The interpreter has been used on Tampere University of Technology for introductory programming course and creating new visualizations has proven to be easy. Survey was made among the students and generally the feedback was neutral. As using the system has been voluntary it is difficult to estimate whether the visualization had any impact on the students. 7

8 Termit ja lyhenteet Työssä käytettyjen termien ja lyhenteiden selityksiä. Mikäli työssä on haluttu viitata tiettyyn versioon esimerkiksi JDK:sta, versio on mainittu erikseen. lyhenne selitys viite Java Java-ohjelmointikieli yleensä AWT Abstract Window Toolkit, Javan alkuperäinen käyttöliittymäkirjasto JDK Java Developer's Kit, Sun Microsystemsin julkaisema Javan kehitysympäristö Swing Javan nykyinen käyttöliittymäkirjasto JIT Just-In-Time, (virtuaalikoneissa) konekielelle kääntäminen juuri ennen operaation suorittamista WWW World Wide Web HTTP HyperText Transfer Protocol CGI Common Gateway Interface MVC Model-View-Controller, arkkitehtuurimalli TTY Tampereen Teknillinen Yliopisto VIP Visual InterPreter Perl Perl-ohjelmointikieli LR Left-to-right, Right-most derivation LALR Left-to-right, Right-most derivation AST Abstract Syntax Tree, ohjelmaa esittävä puurakenne BNF Backus-Naur Form 8

9 lyhenne selitys viite CFG Context-Free Grammar UML Unified Modeling Language ITiCSE Information Technology in Computer Science Education STL Standard Template Library HTML HyperText Mark-up Language ACM Association for Computing Machinery SIGCSE The ACM Special Interest Group on Computer Science VM Virtual Machine, virtuaalikone SDE Simplesem Development Environment, visualisointiympäristö ja virtuaalikone Simplesemarkkitehtuurille TRAKLA Teknillisessä Korkeakoulussa kehitetty järjestelmä tietorakententeiden ja algoritmien visualisointiin 9

10 1 Johdanto Ohjelmien, tietorakenteiden ja algoritmien koneellista visualisointia ja opettamista on tutkittu kauan. Tutkimus ja kehitystyö on eriytynyt käsittelemään ohjelmien eri piirteiden visualisointia ohjelmistokehityksessä ja ohjelmoinnin opetuksessa. Ohjelmoinnin eri osa-alueille on havaittu hedelmälliseksi käyttää erilaisia visualisointeja: erityisesti tietorakenteet ja algoritmit esitetään usein abstraktilla tasolla nuolien, laatikoiden yms. avulla. Laajasta tutkimuksesta huolimatta visualisoinnin hyödyllisyydestä oppimisen kannalta ei ole selvyyttä. Yleisesti kuitenkin oletetaan visualisoinnista olevan hyötyä oppimisen kannalta. Interaktiivisuus on nähty olennaiseksi itseopiskeluun ja opetuksen tueksi tarkoitetuissa visualisoinneissa. Mikäli opiskelija voi kokeilla eri lähestymistapoja ja ratkaisuja, ongelman eri aspektien ymmärtäminen on syvällisempää. Vapaan interaktiivisuuden saavuttaminen ohjelmien visualisoinnissa edellyttää mahdollisuutta muokata visualisoitavaa ohjelmakoodia ja siten jonkinlaisen tulkin toteuttamista. Ohjelmointikielten tulkin toteuttaminen mielivaltaiselle ohjelmointikielelle on kääntäjän toteuttamiselle läheinen ongelma. Kuten kääntäjän, tulkin täytyy jäsentää lähdekoodi, suorittaa sille syntaksin ja semantiikan tarkistuksia ja muodostaa ohjelmasta välikielinen versio. Konekielikoodin generoinnin sijaan tulkki voi toteuttaa kielen operaatiot korkean tason kielellä, jolla tulkki itse on kirjoitettu. Koska tulkkaaminen hidastaa ohjelman suoritusta, erityistä huomiota tulkkien tutkimuksessa on kiinnitetty tehokkuuteen. Tehokkaiden tulkkien toteuttaminen on kuitenkin erittäin monimutkaista. Tämän diplomityön tavoitteena oli rakentaa erityisesti ohjelmoinnin perusopetukseen soveltuva visuaalinen tulkki, jossa yksinkertaisten ohjelmien ajonaikaista toimintaa voi tarkastella yksityiskohtaisella tasolla. Tavoitteena oli, että työssä kehitetty visuaalinen tulkki (Visual InterPreter, VIP) tukisi mahdollisimman hyvin ohjelmoinnin perusopetusta TTY:n kurssilla Laaja 10

11 ohjelmointi. Koska tulkkia oli tarkoitus käyttää perusohjelmoinnin opetuksessa, tulkilla suoritettavat koodiesimerkit olivat yksinkertaisia. Näin ollen tulkin tehokkuus oli toissijaista ylläpidettävyyden ja selkeyden rinnalla. Jotta tulkin käyttö olisi mahdollisimman helppoa uusien esimerkkien tuottamisen piti vaatia mahdollisimman vähän vaivaa opettajalta, eikä työkalun asentaminen ja käyttöönotto saanut olla työlästä. VIP:n simuloima ohjelmointikieli on C++:n aito osajoukko, jolle on annettu nimi C--. C-- sisältää C++:n perusrakenteet, mutta olio-ohjelmointi, vuot ja poikkeukset on jätetty toteuttamatta. Luvussa 2 luodaan katsaus muihin ohjelmoinnin opetukseen tarkoitettuihin visualisointiympäristöihin ja määritellään perusohjelmoinnin opetuksen kannalta olennaisia ominaisuuksia sekä käsitellään työkalujen arviointikriteereitä. Lausekielten jäsentämisen teoriaa, tulkkien ja kääntäjien eroja sekä tulkkien toteutustekniikoita käsitellään luvuissa 3-5. Tulkkien ja virtuaalikoneiden tehokkuusoptimointia ja lausekielten erityiskysymyksiä ei käsitellä. Luvussa 6 esitetään varsinainen toteutettu visualisointiympäristö. Luvut 7 ja 8 käsittelevät työn onnistumista ja jatkokehitysajatuksia. 11

12 2 Ohjelmien visualisointi Ohjelmointikielten visualisointia opetustarkoituksiin on tutkittu ja kehitetty ainakin 1960-luvulta alkaen [Knowlton 1966]. Graafinen visualisointi on luonnollinen tapa opettaa algoritmeja ja ohjelmointikielten semantiikkaa. Ohjelmoinnin opetuksessa eri kursseilla on erilaiset lähtötasot, tavoitteet ja siten erilaiset tarpeet visualisoinnille. Algoritmien ja tietorakenteiden visualisoinnissa käytetään erilaista asioiden esitystapaa kuin perusohjelmoinnissa. Myös samalla kurssilla voidaan joitakin asioita esittää hyvin abstraktilla tasolla ja toisia hyvin yksityiskohtaisella. Tässä luvussa arvioidaan ja esitellään olemassa olevia visualisointijärjestelmiä, käsitellään TTY:n perusohjelmoinnin opetuksen ongelmia ja määritellään perusteet visualisointityökalujen arviointiin. 2.1 TTY:n perusohjelmoinnin opetus TTY:n perusohjelmointikursseilla on vuosittain noin tuhat opiskelijaa. Näin suuri opiskelijamäärä on itsessään merkittävä haaste kurssien järjestelyille. Opiskelijoiden tarve ohjaukselle on hyvin yksilöllistä, koska osalla opiskelijoista on jo alan työkokemusta opiskelut aloittaessaan. Osa taas ei tiedä ohjelmoinnista ja tietokoneiden toiminnasta mitään. Peruskoulu ja lukio eivät automaattisesti luo riittäviä valmiuksia ohjelmoinnissa tarvittavien abstraktien käsitteiden hahmottamiseen. Matemaattisten formalismien sijaan ohjelmoinnin peruskäsitteiden konkretisointi visualisoimalla ja esimerkeillä onkin oleellinen osa opetusta. TTY:llä on käytetty menestyksellisesti ohjelmoinnin opetuksessa harjoitustöiden automaattiseen tarkistamiseen ja arviointiin Ceilidh- ja Style++-järjestelmiä, jotka arvioivat ohjelmien toteutuksen oikeellisuutta ja ohjelmointityyliä. Automaattitarkistus antaa opiskelijalle välittömästi palautetta, minkä jälkeen kurssihenkilökunta tarkastaa manuaalisesti hyväksytysti palautetut, toimivat ohjelmat. Automaattitarkistimet eivät kuitenkaan yksin auta oppimaan ohjelmointia, eivätkä ne voi täysin korvata opettajia. 12

13 Täysin hyödyttömiä automaattiset tarkistimet eivät oppimisen kannalta kuitenkaan ole. Automaattisen tyylianalysaattorin käyttö kursseilla pakottaa opiskelijat lukemaan ja noudattamaan Ohjelmistotekniikan laitoksen C++tyyliohjetta [Rintala & Jokinen 2004], mikä on selvästi parantanut harjoitustöiden rakennetta ja luettavuutta. 2.2 Tietokonepohjaisen visualisoinnin tarve Algoritmien ja ohjelmien toimintaa voidaan simuloida paperin ja kynän avulla, mutta tämä on usein työlästä ja siinä on helppo tehdä virheitä. Hyvin tehdyssä tietokonepohjaisessa simuloinnissa ohjelman toiminnan seuraaminen on huomattavasti helpompaa. Ensisijaisesti visualisoinnit tukevat itsenäistä opiskelua ja opitun asian kertaamista. Automaattisilla visualisoinneilla on myös mahdollista esittää asioita, joiden simuloiminen manuaalisesti olisi käytännössä mahdotonta. Esimerkiksi lajittelualgoritmien toimintaa isoilla aineistoilla on hyvin näppärää esittää graafisesti simulaattorilla. 2.3 Visualisoinnin hyödyt Visualisointia on tutkittu kauan ja sitä pidetään hyödyllisenä, mutta hyödyn arviointi ja toimivan visualisoinnin suunnittelu ovat kiistanalaisia kysymyksiä, joista on monia eri näkemyksiä. ITiCSE:n vuonna 2002 teettämä tutkimus [Almstrum et al. 2002] esittää pääteesinään, että edistääkseen oppimista visualisoinnin pitää mahdollistaa kokeilu ja aktiivinen oppiminen (käännetty englannista) Visualisoinnin käyttöönoton ongelmat Opettajien mielestä viisi tärkeintä ongelmatekijää visualisoinnin käytössä ohjelmistotekniikan opetukseen olivat SIGCSE:n vuonna 2003 tehdyn kyselyn mukaan [Naps et al. 2003]: 13

14 hyvien esimerkkien etsimiseen kuluva aika uuden työkalun käytön opetteluun kuluva aika uusien visualisointien tekemiseen kuluva aika hyvien kehitystyökalujen puute visualisoinnin integroimiseen kurssin käytäntöihin kuluva aika. Opetushenkilökunnan näkökulmasta työkalun asentamiseen ja visualisointien rakentamiseen kuluva aika on selvästi kriittinen tekijä, joten hyvän työkalun tulee olla mahdollisimman helppokäyttöinen ja helposti asennettava Hyvän visualisointityökalun ominaisuudet Visualisointityökaluilla on aina kaksi käyttäjäryhmää, opettajat ja oppilaat, joilla on hieman erilaiset arviointikriteerit työkalun hyödyllisyydelle. Kuten jo aiemmin todettiin, opettajien näkökulmasta aika ja helppokäyttöisyys ovat kriittisiä tekijöitä. Oppilaan näkökulmasta visualisointien kehittämiseen ja etsimiseen kuluva työmäärä on irrelevanttia. ITiCSE:n tutkimuksessa [Almstrum et al. 2002] määritellään seuraavia ominaisuuksia hyvälle visualsointityökalulle: 1) Visualisoinnin tulkintaohjeet. Opiskelijalle on tarjottava selkeä kuvaus siitä, miten eri asiat visualisoinnissa esitetään. 2) Asioiden oikea esitystaso ja esitystapa. Opiskelijalle pitää esittää asiat riittävällä tarkkuudella ja sopivalla abstraktiotasolla, jotta olennainen ei huku yksityiskohtien sekaan. 3) Useiden eri näkymien tarjoaminen. Ohjelman suoritusta ja toimintaa on hyvä pystyä tarkkailemaan mahdollisimman monesta eri näkökulmasta. Näkökulmaa on voitava vaihtaa kesken ohjelman suorituksen. 14

15 4) Tehokkuusanalyysin esittäminen. Algoritmien tehokkuuden analysointi on usein hyödyllinen ja olennainen osa niiden ymmärtämistä. 5) Ohjelman suoritushistorian esittäminen. Algoritmien toiminnan ymmärtämistä helpottaa, jos aiemmin suoritettujen operaatioiden suoritusjärjestys voidaan nähdä. 6) Joustavien suoritusmahdollisuuksien tarjoaminen. Ohjelman tai algoritmin toimintaa pitäisi pystyä kontrolloimaan ja suoritusaskelia peruuttamaan. 7) Mahdollisuus kokeilla ja tutkia eri vaihtoehtoja interaktiivisesti. Staattisen visualisoinnin sijaan opiskelijalla tulisi olla mahdollisuus muokata algoritmia ja kokeilla eri vaihtoehtoja mahdollisimman vapaasti. 8) Mahdollisuus kokeilla eri syötteitä. Ohjelman syötettä ei tulisi kiinnittää, vaan opiskelijalle pitää antaa mahdollisuus omien mielivaltaisten syötteiden käyttämiseen. 9) Dynaamisten kysymysten esittäminen. Visualisoinnin lisäksi opiskelijalle olisi hyvä esittää kysymyksiä ohjelmasta. Erityisesti kysymykset, jotka pyytävät opiskelijaa ennustamaan ohjelman tulevaa käyttäytymistä, ovat oppimisen kannalta hyödyllisiä. 10)Automaattisen palautteen antaminen. Hyvä visualisointi antaa ajonaikaisesti automaattista palautetta opiskelijan osaamisesta. 11)Selitysten integroiminen visualisointiin. Hyvä visualisointi ei pohjaudu pelkästään asioiden esittämiseen graafisesti, vaan opettajan tulee voida liittää visualisointiin erillisiä selittäviä tekstejä. Käytännössä kaikki menestyneet visualisointityökalut ohjelmoinnin opetuksessa noudattavat näitä perusperiaatteita. Näiden periaatteiden noudattaminen käytännössä edellyttää visualisoinnin toteuttamista jonkinlaisen tulkin avulla, mikä tekee hyvän visualisointityökalun toteuttamisesta haastavaa. 15

16 2.3.3 Visualisoinnin hyötyjen arviointi Aiemmin todettiin visualisoinnin hyötyjen arvioinnin olevan hankalaa ja saatujen tulosten ristiriitaisia. Hyötyjen arviointia varten olisi hyvä kerätä ainakin seuraavia tietoja visualisointityökalun käytöstä [Naps et al. 2003]: opiskelijoiden tarkkailu työkalun käytön yhteydessä työkalun käyttöön kulunut aika opiskelijoille tehdyt kyselyt kollegoiden arviot työkalusta opiskelijoiden haastattelu. Näin kerätyn informaation analysointi ja kyselyjen suunnittelu on oma ongelmakenttänsä, eikä sen käsittely kuulu tämän diplomityön piiriin. Haastattelujen ja opiskelijoiden suoranaisen tarkkailun toteuttaminen on rahallisesti ja ajallisesti kallista ja hankalaa, joten sitä ei yleensä tehdä. Sen sijaan työkalun käyttöön kulunutta aikaa ja työkalun käyttöä voidaan tilastoida epäsuorasti minimaalisin kustannuksin, mikäli työkalu mahdollistaa käyttöä koskevien tietojen keräämisen näkymättömästi. 2.4 Olemassaolevat järjestelmät Tässä kohdassa luodaan lyhyt katsaus olemassaoleviin visualisointijärjestelmiin. Katsaus ei ole kattava, vaan esittää poikkileikkauksen erilaisista lähestymistavoista visualisointiin ohjelmoinnin opetuksessa. Järjestelmien yksityiskohtiin ei mennä Tango, X-Tango, Polka Tango on 1993-kehitetty visualisointiympäristö algoritmien visualisointiin. X- Tango on X-Window toteutus Tangosta ja Polka on myöhemmin tehty Javatoteutus. 16

17 Tango on tarkoitettu 2-ulotteisten algoritmianimaatioiden tekoon. Animaatiot rakennetaan Tangon omalla ohjelmointikielellä, jonka jälkeen niitä voidaan askeltaa ja ajaa Tangolla. Tangon ohjelmointikieli tarjoaa yksinkertaiset grafiikkaprimitiivit, kuten laatikon ja ympyrän, sekä rakenteita näiden liikuttamiseen ja manipulointiin [Hartley 1994] Trakla, Trakla2 Trakla on Teknillisessä korkeakoulussa kehitetty järjestelmä tietorakenteiden ja algoritmien opettamiseen. Jatkokehitysversiot Matrix ja Trakla2 osaavat esittää graafisesti algoritmeja ja perustietorakenteita sekä sisältävät tarvittavat työkalut erilaisten visualisointien ja testien rakentamiseen. Trakla mahdollistaa interaktiivisten visualisointien tekemisen sekä erilaisten tehtävien tarjoamisen opiskelijalle. Trakla esittää algoritmien ja tietorakenteiden toiminnan abstraktilla tasolla, eikä visualisointia sidota minkään tietyn ohjelmointikielten rakenteisiin. Trakla2 kerää taustalla hyvin yksityiskohtaista tietoa opiskelijoiden toimenpiteistä työkalua käyttäessä. Kyseisistä tiedoista on jo nyt ollut selvää etua opiskelijoiden oppimisen analysoinnissa. [Korhonen et al. 2002] Blue, BlueJ Blue on erityisesti opetuskäyttöön suunniteltu oliokieli ja sen päälle rakennettu visuaalinen kehitysympäristö. Bluen kehittäminen ja tukeminen loppui vuonna BlueJ on Bluesta saatujen kokemusten pohjalta rakennettu Javaohjelmointikielen opetukseen tarkoitettu visuaalinen kehitysympäristö. BlueJ antaa opiskelijoille mahdollisuuden editoida ohjelman lähdekoodia, katsella oliohierarkiaa graafisesti ja tarjoaa debuggausmahdollisuudet jne. BlueJ:n käyttö käytännössä vaatii perinteisestä poikkeavaa lähestymistapaa ohjelmoinnin opetukseen siten, että ohjelmoinnin perusrakenteita lähdetään opettamaan rinnan olio-ohjelmoinnin kanssa [Kolling et al. 2003]. BlueJ on osoittautunut käytännössä erittäin hyväksi [Kolling et al. 2003], mutta kaikki opettajat eivät ole yhtä mieltä opetettavien asioiden jaksottamisesta eri kurssien kesken. TTY:llä käytetään perinteistä jakoa olio-ohjelmointia käsittelevään ja ohjelmoinnin 17

18 perusrakenteita käsittelevään kurssiin Jeliot-perhe Jeliot on joukko hieman toisistaan poikkeavia visualisointiympäristöjä. Jeliotin uusin versio, Jeliot 3 on Java-pohjainen ympäristö, jossa Java-ohjelmien toimintaa voidaan visualisoida dynaamisesti ja editoida niitä. Jeliot voidaan integroida osaksi BlueJ ympäristöä ja siinä on sama lähestymistapa ohjelmoinnin opetukseen: Kielenä on Java ja olio-ohjelmoinnista aletaan puhua heti alkeita opetettaessa. Jeliotin toimivuutta on tutkittu runsaasti. Helsingin yliopistolla havaittiin 1998, että Jeliotin käyttö ja hyöty jäi vähäiseksi [Lattu, Meisalo, Tarhio 1998]. Jeliotin uudemmat versiot ovat kuitenkin osoittautuneet hyödyllisemmiksi. Tulokset ovat kuitenkin edelleen ristiriitaisia Uusimman Joensuun yliopistolla tehdyn tutkimuksen mukaan noin 15% opiskelijoista koki hyötyvänsä Jeliotista, mutta noin 30% koki Jeliotin hidastavan opiskelua [Kannusmäki et al. 2002] SDE (SIMPLESEM) Simplesem on kuvitteellinen tietokonearkkitehtuuri, joka on esitelty kirjassa Programming Language Concepts [Ghezzi & Mehdi 1997]. SDE on Javapohjainen toteutus tästä arkkitehtuurista [Hauswirth et al. 1998]. Simplesemmäärittely kuvaa yksinkertaisen suorittimen ja sen käskykannan. SDE mahdollistaa Simplesem-ohjelman suorituksen seuraamisen konekielitasolla ja esittää ohjelman käytössä olevien rekisterien ja muistin visuaalisesti. SDE:n käyttö perusohjelmoinnin opetuksessa on hankalaa, koska opiskelijan on ymmärrettävä suorittimien yleiset toimintaperiaatteet, eikä korkean tason ohjelman toiminnan hahmottaminen suoritettavasta konekielisestä koodista ole helppoa. SDE ja Simplesem soveltuvat parhaiten konekielen, suorittimien ja matalan tason ohjelmoinnin opetukseen. 18

19 2.4.6 Yhteenveto Vaikka kaikissa järjestelmissä on omat vahvuutensa, yksikään niistä ei sellaisenaan soveltunut TTY:n tarpeisiin. Jeliotin ja BlueJ:n käyttö vaatii opetuskieleksi Javan, minkä lisäksi BlueJ vaatii erilaista lähestymistapaa kuin TTY:llä on valittu. Jeliotia ei myöskään ole tarkoitus laajentaa ymmärtämään muita ohjelmointikieliä [Levy, Ben-Ari, Uronen 2003]. Sekä Jeliot että BlueJ noudattavat aiemmin esitettyjä hyvien visualisointien suunnitteluperiaatteita esimerkillisesti. Tango:n ja SDE:n abstraktiotaso sopii huonosti perusohjelmointiin. SDE:n käyttö vaatisi prosessorin ja konekielen selittämistä opiskelijoille aivan alussa. Tango taas soveltuu parhaiten algoritmien ja abstraktien asioiden visualisointiin. Trakla on on hyvä järjestelmä tietorakenteiden ja algoritmien visualisointiin abstraktilla tasolla, mutta siitä on vain vähän hyötyä ohjelmoinnin perusopetuksessa. 19

20 3 Lausekielten jäsentäminen Tässä luvussa esitetään aluksi formaalien kielten teoriaa ja joukko määritelmiä, joita tarvitaan käytännön sovellusten ymmärtämiseksi. Myöhemmin esitetään lausekielten jäsentämisen yleisiä tekniikoita. Virheenkorjausta jäsentämisessä ei käsitellä. 3.1 Formaalit kielet ja kielioppi Formaali kieli koostuu joukosta aakkosia ja määrittelee mitkä kaikista aakkosista muodostettavissa olevista aakkosten jonoista (merkkijonoista) kuuluvat kieleen. Formaalin kielen aakkoset ovat abstrakteja symboleita, eikä niillä välttämättä ole suoraa kytkentää reaalimaailman aakkosiin ja merkkeihin. Mikäli kieli on äärellinen, se voidaan määritellä luettelemalla kaikki kieleen kuuluvat merkkijonot. Kieleen kuuluvia leksikaalialkioita, jakamattomia äärellisiä merkkijonoja, kutsutaan terminaaleiksi. Terminaaleista käytetään myös termejä terminaalisymboli ja päätemerkki. Äärettömiä merkkijonoja sisältäville kielille voidaan rakentaa määritelmä neljästä elementistä: Ei-terminaalien äärellinen joukko N. Terminaalien äärellinen joukko T, T N =. Aloitussymboli S, S N. Reduktiosääntöjen joukko P. Jokainen P:n alkio on muotoa u v, missä u ( N T )+ j a v ( N T)*. Mielivaltainen merkkijono kuuluu kieleen, jos ja vain jos se voidaan sääntöjen avulla redusoida aloitussymboliksi. 20

21 3.1.1 Vasemmalle rekursiivisuus Kieliopin sääntö on vasemmalle rekursiivinen, mikäli kaikki sen säännöt ovat muotoa: A t tai A tb, missä t on terminaalisymboli ja B ja A ovat ei-terminaaleja. Oikealle rekursiiviset kieliopit ovat myös mahdollisia, mutta usein lausekielet esitetään käytännön syistä vasemmalle rekursiivisina tai muunnetaan vasemmalle rekursiivisiksi. Vasemmalle rekursiivisuudesta käytetään myös ilmausta vasemmalle lineaarinen. Mikäli kielioppi on vasemmalle rekursiivinen tai oikealle rekursiivinen, kielioppi on säännöllinen. Säännöllinen kielioppi määrittelee säännöllisen kielen Säännöllisten kielten luokittelu (LALR, LR, LL) Säännölliset kielet voidaan jakaa eri luokkiin, joista LL, LR ja LALR ovat tärkeimmät. LR-kieliopilla määritelty kieli voidaan jäsentää lukemalla symbolijonoa vasemmalta oikealle (left-to-right), käyttämällä pelkistyssäännöistä valintatilanteissa aina oikeanpuolimmaisen osan luetusta redusoivaa sääntöä (rightmost reduction). LALR on LR:n osajoukko, joka on hyödyllinen kahdesta syystä: Käytännössä kaikki mielenkiintoiset LR-kieliopit ovat LALR-kielioppeja LALR-kieliopin jäsentäminen on huomattavasti helpompaa kuin LR-kielen. LL-kieliopit ovat tärkeä luokka, koska ne voidaan jäsentää tekniikalla, josta käytetään nimeä rekursiivinen laskeutuminen (recursive descent) tai kokoava jäsentäminen. Rekursiivinen laskeutuminen on erittäin yksinkertainen toteuttaa, mikäli jäsentäjä joudutaan tekemään ilman automaattityökaluja. 21

22 3.1.3 Kurkistus Sääntöjen jäsentäminen yksikäsitteisesti vaatii useimmiten vähintään yhden symbolin mittaisen ikkunan käsittelemättömään osaan symbolijonoa. Seuraavaksi tulevaa symbolia tutkimalla voidaan ratkaista joitakin muuten hankalia ristiriitatilanteita. Jäsennettävän symbolijonon esikatselusta käytetään nimitystä kurkistus (look-ahead englanninkielisessä materiaalissa). LR(k) tarkoittaa LR-kielioppia, jossa esikatselupuskurin koko on k symbolia. Vastaavasti käytetään merkintöjä LALR(k) ja LL(k). Erityisesti LALR(1) ja LR (1) ovat tärkeitä luokkia, koska näille tunnetaan tehokkaita jäsennystekniikoita, joita ei voida kuitenkaan soveltaa yleisesti LALR(k)-kielen jäsentämiseen Lausekielten määrittely Useimmat ohjelmointikielet voidaan esittää LR(1)-kielioppina [Backhouse 1979, sivu 172]. Matemaattisen määrittelyn sijaan lausekielen kielioppi esitetään yleensä BNF-notaatiolla, joka sallii muunmuassa loogisen TAI-operaation käytön. Usein terminaalit erotetaan ei-terminaaleista kirjoittamalla terminaalit isoilla kirjaimilla ja ei-terminaalit pienillä. Kuvassa 3.1 on esimerkki yksinkertaisesta lausekkeita kuvaavasta kieliopista. lauseke ::= tekijä tekijä + lauseke tekijä ::= termi termi * tekijä termi ::= MUUTTUJA VAKIO Kuva 3.1 Yksinkertainen kielioppi Jäsennyspuu Aiemmin esitetty riittää määrittelemään yksikäsitteisesti, mitkä merkkijonot kuuluvat kieleen ja mitkä eivät. Merkkijonoa tutkittaessa voidaan rakentaa jäsennyspuu, joka esittää kuinka kieliopin sääntöjä on käytetty. Jokaista käytettyä sääntöä kuvaa solmu, ja kunkin solmun lapsina ovat rekursiivisesti jäsennyksessä käytetyt säännöt. 22

23 3.1.6 Yksikäsitteisyys Kielioppi on yksikäsitteinen, mikäli jokaista laillista (kieleen kuuluvaa) merkkijonoa kohti on vain yksi jäsennyspuu. Kuvan 3.1 kielioppi on esitetty yksinkertaisemmassa muodossa kuvassa 3.2. Kuvan 3.2 kielioppi ei kuitenkaan ole yksikäsitteinen. termi ::= MUUTTUJA VAKIO lauseke ::= termi termi + lauseke termi * lauseke Kuva 3.2 Monikäsitteinen kielioppi Lause i = 2 * kuuluu molempiin kieliin, mutta kuvan 3.2 kieliopissa se voidaan tulkita joko muodossa i = (2 * 3) + 4 tai i = 2 * (3 + 4) Presedenssi ja sitovuus Presedenssi tarkoittaa operaattoreiden (sääntöjen) keskinäistä merkitsevyysjärjestystä. Mikäli kertolaskulle määritellään yhteenlaskua korkeampi presedenssi, se suoritetaan ensin, jolloin edellisen kappaleen kieliopista saadaan yksikäsitteinen. Sitovuus määrittelee suoritusjärjestyksen vasemmalta tai oikealta aloitettavaksi. Useimmiten lausekkeet sidotaan vasemmalle, mutta muun muassa potenssilasku sidotaan oikealle. Joissakin operaatiossa sitomissuunnalla ei ole merkitystä lopputuloksen kannalta (esimerkiksi yhteenlasku). Esimerkkikielioppiin voidaan lisätä vähennyslasku esimerkiksi muuttamalla lausekkeen määrittelevää sääntöä. lauseke ::= tekijä tekijä + termi tekijä - termi 23

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

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

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

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

DIPLOMITYÖ ARI KORHONEN

DIPLOMITYÖ ARI KORHONEN DIPLOMITYÖ ARI KORHONEN TEKNILLINEN KORKEAKOULU Diplomityö Tietotekniikan osasto 20.5.1997 Ari Korhonen WORLD WIDE WEB (WWW) TIETORAKENTEIDEN JA ALGORITMIEN TIETOKONEAVUSTEISESSA OPETUKSESSA Työn valvoja

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

.NET ajoympäristö. Juha Järvensivu 2007

.NET ajoympäristö. Juha Järvensivu 2007 .NET ajoympäristö Juha Järvensivu juha.jarvensivu@tut.fi 2007 Käännösprosessi C# lähdekoodi C# kääntäjä CILtavukoodi JITkäännös Ajettava natiivikoodi Kehitysympäristössä ohjelmoijan toimesta Ajonaikana.NET

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 10. kesäkuuta 2013

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 10. kesäkuuta 2013 TIEA241 Automaatit ja kieliopit, kesä 2013 etenevä Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 10. kesäkuuta 2013 Sisällys etenevä etenevä Chomskyn hierarkia (ja muutakin) kieli säännöllinen LL(k) LR(1)

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

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen

Lisätiedot

Ohjelmistojen mallintaminen

Ohjelmistojen mallintaminen Ohjelmistojen mallintaminen - Mallit - Ohjelmiston kuvaaminen malleilla 31.10.2008 Harri Laine 1 Malli: abstraktio jostain kohteesta Abstrahointi: asian ilmaiseminen tavalla, joka tuo esiin tietystä näkökulmasta

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op FT Ari Viinikainen Tietokoneen rakenne Keskusyksikkö, CPU Keskusmuisti Aritmeettislooginen yksikkö I/O-laitteet Kontrolliyksikkö Tyypillinen Von Neumann

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Kurssin sisältö pääpiirteittäin Tarvittavat pohjatiedot Avainsanat Abstraktio Esimerkkiohjelman tehtäväkuvaus Abstraktion käyttö tehtävässä Abstrakti tietotyyppi Hyötyjä ADT:n

Lisätiedot

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

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 811122P (5 op.) 12.12.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

Jäsennysalgoritmeja. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 29. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Jäsennysalgoritmeja

Jäsennysalgoritmeja. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 29. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Jäsennysalgoritmeja TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. syyskuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe B tiistai 6.10. klo 10 selaaja ja jäsentäjä toimivat Kääntäjän

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

UML-kielen formalisointi Object-Z:lla

UML-kielen formalisointi Object-Z:lla UML-kielen formalisointi Object-Z:lla Kalvot ja seminaarityö WWW:ssä: http://users.jyu.fi/~minurmin/opiskelu/form/ UML UML == Unified Modelling Language. OMG:n standardoima kieli ohjelmistojärjestelmien,

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

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...

Lisätiedot

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Ohjelmistojen mallintaminen. Luento 11, 7.12. Ohjelmistojen mallintaminen Luento 11, 7.12. Viime viikolla... Oliosuunnittelun yleiset periaatteet Single responsibility eli luokilla vain yksi vastuu Program to an interface, not to concrete implementation,

Lisätiedot

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 27. lokakuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe D tiistai 10.11. klo 10 välikielen generointi Kääntäjän rakenne

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

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

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista 582101 - Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista 1 Ohjelmistotuotannon työkaluuista Projektinhallintatyökalut (ei käsitellä tällä kurssilla) CASE- ja mallinnustyökalut (esim. Poseidon)

Lisätiedot

uv n, v 1, ja uv i w A kaikilla

uv n, v 1, ja uv i w A kaikilla 2.8 Säännöllisten kielten rajoituksista Kardinaliteettisyistä on oltava olemassa (paljon) ei-säännöllisiä kieliä: kieliä on ylinumeroituva määrä, säännöllisiä lausekkeita vain numeroituvasti. Voidaanko

Lisätiedot

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 8. Aluekyselyt. 8.1 Summataulukko Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

Lisätiedot

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö Algoritmit 1 Luento 2 Ke 11.1.2017 Timo Männikkö Luento 2 Algoritmin esitys Algoritmien analysointi Suoritusaika Asymptoottinen kertaluokka Peruskertaluokkia NP-täydelliset ongelmat Algoritmit 1 Kevät

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

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 4 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten lauseisiin, lausekkeisiin ja aliohjelmiin liittyvät kysymykset. Tehtävä 1. Mitä

Lisätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

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

Yhteydettömät kieliopit [Sipser luku 2.1]

Yhteydettömät kieliopit [Sipser luku 2.1] Yhteydettömät kieliopit [ipser luku 2.1] Johdantoesimerkkinä tarkastelemme kieltä L = { a n b m a n n > 0, m > 0 }, joka on yhteydetön (mutta ei säännöllinen). Vastaavan kieliopin ytimenä on säännöt eli

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Opiskelijat valtaan! TOPIC MASTER menetelmä lukion englannin opetuksessa. Tuija Kae, englannin kielen lehtori Sotungin lukio ja etälukio

Opiskelijat valtaan! TOPIC MASTER menetelmä lukion englannin opetuksessa. Tuija Kae, englannin kielen lehtori Sotungin lukio ja etälukio Opiskelijat valtaan! TOPIC MASTER menetelmä lukion englannin opetuksessa Tuija Kae, englannin kielen lehtori Sotungin lukio ja etälukio Päättääkö opettaja ohjelmasta? Vai voisivatko opiskelijat itse suunnitella

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

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

S BAB ABA A aas bba B bbs c

S BAB ABA A aas bba B bbs c T-79.148 Kevät 2003 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut 4. Tehtävä: Laadi algoritmi, joka testaa onko annetun yhteydettömän kieliopin G = V, Σ, P, S) tuottama

Lisätiedot

Järjestelmäarkkitehtuuri (TK081702)

Järjestelmäarkkitehtuuri (TK081702) Järjestelmäarkkitehtuuri (TK081702) yleistyvät verkkopalveluissa Youtube Google... Avaavat pääsyn verkkopalvelun sisältöön. Rajapintojen tarjoamia tietolähteitä yhdistelemällä luodaan uusia palveluja,

Lisätiedot

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät Tenttikysymykset 1. Selitä mitä asioita kuuluu tietojärjestelmän käsitteeseen. 2. Selitä kapseloinnin ja tiedon suojauksen periaatteet oliolähestymistavassa ja mitä hyötyä näistä periaatteista on. 3. Selitä

Lisätiedot

7/20: Paketti kasassa ensimmäistä kertaa

7/20: Paketti kasassa ensimmäistä kertaa Ohjelmointi 1 / syksy 2007 7/20: Paketti kasassa ensimmäistä kertaa Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007

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

TIE-20200 Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

TIE-20200 Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely Lyhyt UML-opas UML -pikaesittely UML, Unified Modeling Language Standardoitu, yleiskäyttöinen mallinnuskieli, jota ylläpitää/hallitsee (Object Management Group) OMG Historiaa: 90-luvulla oli paljon kilpailevia

Lisätiedot

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu Liite 1: skenaariot ja PoC tulokset 1. Palvelun kehittäjän näkökulma Tilanne Vaatimus Ongelma jos vaatimus ei toteudu Palvelun uusi versio on Palveluiden kehittäminen voitava asentaa tuotantoon vaikeutuu

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

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Automaattinen semanttinen annotointi

Automaattinen semanttinen annotointi Automaattinen semanttinen annotointi Matias Frosterus, Reetta Sinkkilä, Katariina Nyberg Semantic Computing Research Group (SeCo) School of Science and Technology, Department of Media Technology and University

Lisätiedot

Injektio (1/3) Funktio f on injektio, joss. f (x 1 ) = f (x 2 ) x 1 = x 2 x 1, x 2 D(f )

Injektio (1/3) Funktio f on injektio, joss. f (x 1 ) = f (x 2 ) x 1 = x 2 x 1, x 2 D(f ) Injektio (1/3) Määritelmä Funktio f on injektio, joss f (x 1 ) = f (x 2 ) x 1 = x 2 x 1, x 2 D(f ) Seurauksia: Jatkuva injektio on siis aina joko aidosti kasvava tai aidosti vähenevä Injektiolla on enintään

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

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

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 81122P (4 ov.) 30.5.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

Tutkittua tietoa. Tutkittua tietoa 1

Tutkittua tietoa. Tutkittua tietoa 1 Tutkittua tietoa T. Dybå, T. Dingsøyr: Empirical Studies of Agile Software Development : A Systematic Review. Information and Software Technology 50, 2008, 833-859. J.E. Hannay, T. Dybå, E. Arisholm, D.I.K.

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy 2015. Antti-Juhani Kaijanaho. 3. joulukuuta 2015

TIEA241 Automaatit ja kieliopit, syksy 2015. Antti-Juhani Kaijanaho. 3. joulukuuta 2015 TIEA241 Automaatit ja, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. joulukuuta 2015 Sisällys Formaalisti Määritelmä Nelikko G = (V, Σ, P, S) on kontekstiton kielioppi (engl. context-free

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

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015 ja ja TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho NFA:ksi TIETOTEKNIIKAN LAITOS 16. marraskuuta 2015 Sisällys ja NFA:ksi NFA:ksi Kohti säännöllisiä lausekkeita ja Nämä tiedetään:

Lisätiedot

Dokumentin nimi LOGO:) Tampereen teknillinen yliopisto. Ryhmä XXX: Projektiryhmän nimi Projektin nimi

Dokumentin nimi LOGO:) Tampereen teknillinen yliopisto. Ryhmä XXX: Projektiryhmän nimi Projektin nimi Tampereen teknillinen yliopisto Ohjelmistotekniikan laitos OHJ-3500 Ohjelmistotuotannon projektityö LOGO:) Ryhmä XXX: Projektiryhmän nimi Projektin nimi Dokumentin nimi Jakelu: (Ryhmä) (Kurssihenkilökunta)

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

.NET ja C# Virtuaalikone. Common Language Infrastructure (CLI) Periaate. Etuja. Haittoja. Mikä on CLI. CLI standardin merkitys (CLS, Ecma)

.NET ja C# Virtuaalikone. Common Language Infrastructure (CLI) Periaate. Etuja. Haittoja. Mikä on CLI. CLI standardin merkitys (CLS, Ecma) .NET ja C# Virtuaalikone Periaate Virtuaalikone on tapa abstrahoida allaoleva toteutus yhteisen rajapinnan taakse. Virtuaalikoneet muodostavat hierarkian. Hierarkiassa ylempänä oleva käyttää alemman tarjoamaa

Lisätiedot

Sisällys. 15. Lohkot. Lohkot. Lohkot

Sisällys. 15. Lohkot. Lohkot. Lohkot Sisällys 15. Lohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.1 15.2 Lohkot Aaltosulkeet

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 06.09.2005 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

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

Johdatus rakenteisiin dokumentteihin

Johdatus rakenteisiin dokumentteihin -RKGDWXVUDNHQWHLVLLQGRNXPHQWWHLKLQ 5DNHQWHLQHQGRNXPHQWWL= rakenteellinen dokumentti dokumentti, jossa erotetaan toisistaan dokumentin 1)VLVlOW, 2) UDNHQQHja 3) XONRDVX(tai esitystapa) jotakin systemaattista

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

Suunnitteluvaihe prosessissa

Suunnitteluvaihe prosessissa Suunnittelu Suunnitteluvaihe prosessissa Silta analyysin ja toteutuksen välillä (raja usein hämärä kumpaankin suuntaan) Asteittain tarkentuva Analyysi -Korkea abstraktiotaso -Sovellusläheiset käsitteet

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 4 Jatkuvuus Jatkuvan funktion määritelmä Tarkastellaan funktiota f x) jossakin tietyssä pisteessä x 0. Tämä funktio on tässä pisteessä joko jatkuva tai epäjatkuva. Jatkuvuuden

Lisätiedot

7. Oliot ja viitteet 7.1

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

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 9. lokakuuta 2016

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 9. lokakuuta 2016 TIEA24 Automaatit ja kieliopit, syksy 206 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 9. lokakuuta 206 Sisällys Kolme laskennan mallia kuvitteellisia (abstrakteja) koneita eli automaatteja lukevat syötteen

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

Test-Driven Development

Test-Driven Development Test-Driven Development Ohjelmistotuotanto syksy 2006 Jyväskylän yliopisto Test-Driven Development Testilähtöinen ohjelmistojen kehitystapa. Tehdään ensin testi, sitten vasta koodi. Tarkoituksena ei ole

Lisätiedot

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 6. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 6. lokakuuta 2016 TIETOTEKNIIKAN LAITOS .. TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 6. lokakuuta 2016 Sisällys. Harjoitustehtävätilastoja Tilanne 6.10.2016 klo 8:28 passed potential redo submitters

Lisätiedot

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit Ohjelmiston testaus ja laatu Ohjelmistotekniikka elinkaarimallit Vesiputousmalli - 1 Esitutkimus Määrittely mikä on ongelma, onko valmista ratkaisua, kustannukset, reunaehdot millainen järjestelmä täyttää

Lisätiedot

Harjoitustehtävät ja ratkaisut viikolle 48

Harjoitustehtävät ja ratkaisut viikolle 48 Harjoitustehtävät ja ratkaisut viikolle 48 1. Tehtävä on jatkoa aiemmalle tehtävälle viikolta 42, missä piti suunnitella älykodin arkkitehtuuri käyttäen vain ennalta annettua joukkoa ratkaisuja. Tämäkin

Lisätiedot

1 Määrittelyjä ja aputuloksia

1 Määrittelyjä ja aputuloksia 1 Määrittelyjä ja aputuloksia 1.1 Supremum ja infimum Aluksi kerrataan pienimmän ylärajan (supremum) ja suurimman alarajan (infimum) perusominaisuuksia ja esitetään muutamia myöhemmissä todistuksissa tarvittavia

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

18. Abstraktit tietotyypit 18.1

18. Abstraktit tietotyypit 18.1 18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

Oleelliset vaikeudet OT:ssa 1/2

Oleelliset vaikeudet OT:ssa 1/2 Oleelliset vaikeudet OT:ssa 1/2 Monimutkaisuus: Mahdoton ymmärtää kaikki ohjelman tilat Uusien toimintojen lisääminen voi olla vaikeaa Ohjelmista helposti vaikeakäyttöisiä Projektiryhmän sisäiset kommunikointivaikeudet

Lisätiedot

TIE-20200 Ohjelmistojen suunnittelu

TIE-20200 Ohjelmistojen suunnittelu TIE-20200 Ohjelmistojen suunnittelu Luento 1: Virtuaalifunktiot, Template method 1 Yleistä asiaa Muistakaa harkkatyöilmoittautuminen 23 ryhmää (mm. lihansyöjäkirahvi), vajaita ryhmiäkin on 44 henkeä vielä

Lisätiedot

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } } Yksikkötestauksella tarkoitetaan lähdekoodiin kuuluvien yksittäisten osien testaamista. Termi yksikkö viittaa ohjelman pienimpiin mahdollisiin testattaviin toiminnallisuuksiin, kuten olion tarjoamiin metodeihin.

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015 TIEA24 Automaatit ja kieliopit, syksy 205 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 5. marraskuuta 205 Sisällys Käsiteanalyysiä Tarkastellaan koodilukkoa äärellisenä automaattina. Deterministinen äärellinen

Lisätiedot

Pitkän matematiikan kertauskurssi *STACKjärjestelmän

Pitkän matematiikan kertauskurssi *STACKjärjestelmän Pitkän matematiikan kertauskurssi *STACKjärjestelmän avulla *System for Teaching and Assessment using a Computer algebra Kernel Mistä on kysymys? Mistä on kysymys? Mistä on kysymys? Mistä on kysymys? Järjestelmä,

Lisätiedot

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet )

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet ) T-79144 Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet 11-22) 26 29102004 1 Ilmaise seuraavat lauseet predikaattilogiikalla: a) Jokin porteista on viallinen

Lisätiedot

Tehtävä 2: Säännölliset lausekkeet

Tehtävä 2: Säännölliset lausekkeet Tehtävä 2: Säännölliset lausekkeet Kun tietokoneohjelmalla luetaan käyttäjän syötettä, olisi syöte aina syytä tarkistaa. Syötteessä voi olla vääriä merkkejä tai merkkejä väärillä paikoilla (syntaktinen

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

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

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Muuttujat eri muisteissa Ohjelman muistialueen layout Paikallisen ja globaalin muuttujan ominaisuudet Dynaamisen muistinkäytön edut Paikallisten muuttujien dynaamisuus ADT

Lisätiedot

Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa k

Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa k 1 Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa ko. toiminnallisuuden hyödyntämisen Web-palveluna.

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

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

Nopea kertolasku, Karatsuban algoritmi

Nopea kertolasku, Karatsuban algoritmi Nopea kertolasku, Karatsuban algoritmi Mikko Männikkö 16.8.2004 Lähde: ((Gathen and Gerhard 1999) luku II.8) Esityksen kulku Algoritmien analysointia (1), (2), (3), (4) Klassinen kertolasku Parempi tapa

Lisätiedot

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Esimerkkejä polynomisista ja ei-polynomisista ongelmista Esimerkkejä polynomisista ja ei-polynomisista ongelmista Ennen yleisempiä teoriatarkasteluja katsotaan joitain tyypillisiä esimerkkejä ongelmista ja niiden vaativuudesta kaikki nämä ongelmat ratkeavia

Lisätiedot

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa WWW ja tietokannat WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa tekstiä, kuvia, hyperlinkkejä Staattiset sivut kirjoitettu kerran, muuttaminen käsin ongelmana pysyminen ajantasalla Ylläpito hankalaa,

Lisätiedot

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä 6.11.2002

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä 6.11.2002 JReleaser Yksikkötestaus ja JUnit Mikko Mäkelä 6.11.2002 Sisältö Johdanto yksikkötestaukseen JUnit yleisesti JUnit Framework API (TestCase, TestSuite) Testien suorittaminen eri työkaluilla Teknisiä käytäntöjä

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys For-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. If-else-lause vaihtoehtoisesti

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