Tietorakenteet op, 50 h. Luennot alkavat 7.9. ja päättyvät



Samankaltaiset tiedostot
A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007

Algoritmit 1. Luento 1 Ti Timo Männikkö

Tietorakenteet ja algoritmit - syksy

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Ohjelmointi II. Erkki Pesonen Luennot ja harjoitukset. Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015

Algoritmit 1. Luento 3 Ti Timo Männikkö

Ohjelmistojen mallintaminen

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

Tietueet. Tietueiden määrittely

Tietorakenteet ja algoritmit

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

811312A Tietorakenteet ja algoritmit I Johdanto

Ohjelmiston toteutussuunnitelma

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

etunimi, sukunimi ja opiskelijanumero ja näillä

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu


812341A Olio-ohjelmointi, I Johdanto

Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmistojen mallintaminen, mallintaminen ja UML

Algoritmit 1. Luento 10 Ke Timo Männikkö

Muutamia peruskäsitteitä

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

ELM GROUP 04. Teemu Laakso Henrik Talarmo

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

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

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Toinen harjoitustyö. ASCII-grafiikkaa

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet Kevät Olio-ohjelmoinnin perusteet (5 op) Tavoitteena

Ohjelmistoarkkitehtuurit. Syksy 2008

P e d a c o d e ohjelmointikoulutus verkossa

13/20: Kierrätys kannattaa koodaamisessakin

T harjoitustyö, kevät 2012

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Algoritmit 2. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Ohjelmistoarkkitehtuurit. Syksy 2010

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

Oliot ja tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

Ohjelmoinnin perusteet Y Python

Matematiikan tukikurssi

A4.1 Projektityö, 5 ov.

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

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

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

1. Olio-ohjelmointi 1.1

T Ohjelmistojen määrittely- ja suunnittelumenetelmät Harjoitustyöraportti TNT - Tarkistetaan Ne Tentit Analyysimalli

Ohjelmistojen suunnittelu

Kurssiesite Olio-ohjelmoinnin perusteet Kevät Jorma Laurikkala Tietojenkäsittelytieteet Informaatiotieteiden yksikkö Tampereen yliopisto

Johdatus rakenteisiin dokumentteihin

19/20: Ikkuna olio-ohjelmoinnin maailmaan

A TIETORAKENTEET JA ALGORITMIT

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet Kevät Olio-ohjelmoinnin perusteet (TIEA2.1)

Kurssiesite Olio-ohjelmoinnin perusteet Kevät Jorma Laurikkala Tietojenkäsittelytieteet Luonnontieteiden tiedekunta Tampereen yliopisto

Algoritmit 2. Luento 2 Ke Timo Männikkö

18. Abstraktit tietotyypit 18.1

Luento 1 Tietokonejärjestelmän rakenne

15. Ohjelmoinnin tekniikkaa 15.1

Reaalilukuvälit, leikkaus ja unioni (1/2)

Ohjelmoinnin perusteet Y Python

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

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

Ohjelmoinnin perusteet Y Python

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

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Ohjelmistojen mallintaminen kertausta Harri Laine 1


Tehtävä 2: Tietoliikenneprotokolla

811120P Diskreetit rakenteet

Harjoitustehtävät ja ratkaisut viikolle 48

Harjoitustyöinfo kevät TU-A1100 Tuotantotalous 1

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

Kurssiesite Olio-ohjelmoinnin perusteet (TIEA2.1) Kevät 2018

Antitammirobotti. Antti Meriläinen Martin Pärtel 29. toukokuuta 2009

Ohjelmoinnin perusteet Y Python

14/20: Keittokirja I

Ohjelmistotekniikan menetelmät, käyttötapauksiin perustuva vaatimusmäärittely

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Harjoitustyöinfo kevät TU-A1100 Tuotantotalous 1

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet (TIEA2.1) Kevät Olio-ohjelmoinnin perusteet (eli Oope) Laajuus

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmoinnin perusteet Y Python

811120P Diskreetit rakenteet

Algoritmit 1. Luento 2 Ke Timo Männikkö

Internet ja tietoverkot

Tietoturva. 0. Tietoa kurssista P 5 op. Oulun yliopisto Tietojenkäsittelytieteiden laitos Periodi / 2015

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin?

Tietojenkäsittelytieteiden 26 op:n perusopinnot

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

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

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

ARVO - verkkomateriaalien arviointiin

811120P Diskreetit rakenteet

Transkriptio:

Tietorakenteet 2016 Martti Juhola luennot: Ke 7.9.2016-23.11.2016 viikoittain klo 10-12, Pinni ls B1097, huom. Aloitus päätalolla! Poikkeus: 7.9.2016 klo 10 12, PÄÄTALO ls D11 To 8.9.2016 klo 10-12, Pinni ls B1097 Ti 13.9.2016-29.11.2016 viikoittain klo 10-12, Pinni ls B1097 Poikkeukset: 20.9.2016 klo 10 12, Pinni B1096 25.10.2016 klo 10 12, Pinni B3107 Luennot alkavat 7.9. ja päättyvät 29.11. 10 op, 50 h http://www.uta.fi/sis/tie/tira/ 1

Viikkoharjoitukset ja harjoitustyö Viikkoharjoitukset: 26 h, alkavat 13.9. ja päättyvät 7.12.2016 Henry Joutsijoki : Ryhmä 1 Ti 13.9.2016-29.11.2016 viikoittain klo 12-14, Linna K110 Ke 7.12.2016 klo 12-14, Pinni B0020, ti 6.12. korvaava harjoitus Ryhmä 2 Ti 13.9.2016-29.11.2016 viikoittain klo 14-16, Pinni B0016 Ke 7.12.2016 klo 14-16, Pinni B0020, ti 6.12. korvaava harjoitus Ryhmä 3 Ti 13.9.2016-29.11.2016 viikoittain klo 16-18, Pinni B0016 Ke 7.12.2016 klo 16-18, Pinni B0020, ti 6.12. korvaava harjoitus Jyrki Rasku, harjoitustyö: aihe loka- tai marraskuussa Lisäksi tulee tehdä silmänliiketesti (n. ½ h) laboratoriossa B1071 (ajankohta ilmoitetaan myöhemmin, mittauksen hoitaa Jyrki Rasku); Tästä saa 4 ylimääräistä suoritetta viikkoharjoituksiinsa. Lähdeteos: Michael T. Goodrich ja Roberto Tamassia: Data Structures and Algorithms in Java, John Wiley & Sons (lähteinä pääosin 4. painos, 2006, ja osin 1. painos, 1998 (4. ja 5., 2011, erot aika vähäiset)) 2

Kurssin arvostelu Tentit: perjantai 16.12.2016 klo 10-14 D10a+b perjantai 20.1.2017 klo 10-14 D10a+b pisteitä välillä 0-30, läpipääsyraja 12 pistettä Viikkoharjoitukset: suoritettava vähintään 30 % tehtävistä, pisteitä 0-5 (lisäpisteinä tentin ja harjoitustyön päälle) Harjoitustyö: suoritettava hyväksytysti, pisteitä 0-10 Silmänliiketesti (saa 4 lisäsuoritetta viikkoharjoituksiin) Näiden suoritusten jälkeen koko kurssi on suoritettu. Arvosana lasketaan pisteiden 12-40 mukaan. 3

1.1. Tietorakenteet ja algoritmit 1. Suunnitteluperiaatteista Tietorakenne tarkoittaa tiedon (data) saannin ja organisoinnin järjestelmällistä esitystä. Algoritmi on vaiheittainen kuvaus jonkin tehtävän suorittamista varten äärellisessä ajassa. Nämä käsitteet ovat pohjimmiltaan keskeisiä missä tahansa tietokoneen suorittamassa tietojenkäsittelyssä. Suunnittelupäämäärät Kaksi tärkeää päämäärää tietorakenteiden ja algoritmien ylätason suunnittelussa ovat: oikeellisuus tehokkuus 1. luku 4

Oikeellisuus tarkoittaa tietorakenteiden ja algoritmien ylätason suunnittelussa, että ne toimivat oikeeellisesti kaikille mahdollisille syötteille, joita voi esiintyä määrätyssä tehtävässä. Jos esim. tietorakenteen oletetaan tallettavan joukon lukuja järjestetyssä muodossa, lukujoukkoa ei pitäisi koskaan käsitellä ei-järjestetyllä tavalla. Järjestyksessä lukuja käsittelevää algoritmia ei myöskään koskaan pitäisi soveltaa ei-järjestettyyn käsittelyyn. Täten oikeellisuuden käsite riippuu aina ongelmasta, jota varten tietorakenne ja algoritmi on tarkoitettu. Tehokkuus tarkoittaa tietojenkäsittelytehtävän riittävän nopeaa suoritusta muistitilaakaan tarpeettomasti käyttämättä. Toisinaan nämä tekijät, käytetty suoritusaika ja muistitila, voivat olla aivan keskeisiä. 1. luku 5

Reaaliaikaisessa tietojärjestelmässä, esimerkiksi lentokoneen, avaruusaluksen tai robotin, aikavaatimus on luonnollisesti olennainen. Tehokkaiden tietorakenteiden ja algoritmien suunnittelu on monesti vaikea ja haastava tehtävä. Niiden tehokkuus on kuitenkin usein tärkeä kysymys tehtävän monimutkaisuuden ja tiedon suuren määrän vuoksi sekä riittävän nopean suoritusajan saavuttamiseksi. Toteutuspäämäärät Luotettavien ja tehokkaiden tietorakenteiden ja algoritmien tuottamiseksi on toteutuksessa otettava huomioon myös muita tärkeitä seikkoja: vahvuus mukautuvuus uudelleenkäytettävyys 1. luku 6

Vahvuus Hyvän ohjelman tulee olla vahva (robust), jolloin se antaa oikeat tulokset kaikille syötteille laiteympäristöstä riippumatta. Sellaisen ohjelman pitäisi käsitellä jopa syötteitä, joita ei ole eksplisiittisesti määritelty kyseisellä syötteiden määrittelyalueella. Jos esim. ohjelman odotetaan toimivan kokonaislukusyötteellä, mutta sille syötetään (reaali-) liukulukuja, sen tulisi kyetä toipumaan virheestä mielekkäällä tavalla. On olemassa tietojärjestelmiä, joilta vaaditaan tarkkaan oikeellista ja vahvaa toimintaa. Esim. sairaaloiden tehohoidon järjestelmät ovat tällaisia. Mukautuvuus Tietokoneohjelmien tulisi kyetä mukautumaan ajan mukana muuttuvassa ympäristössä ja vaatimuksissa. Monet nykyiset ohjelmat käsittävät hyvin laajoja kokonaisuuksia, kuten tekstinkäsittelyssä, verkkoselaimissa tai hakukoneissa. Näiden täytyy kehittyä muuttuvien vaatimusten mukana. 1. luku 7

Esim. keskusyksiköiden tai tietoverkkojen nopeudet kasvavat tai näihin voi tulla uusia toimintoja. Yllättäviin tilanteisiin pitäisi osata varautua. Tällaisesta yllätyksestä oli hyvä esimerkki vuoden 2000 ongelma, kun joissakin vanhoissa, aiemmilta vuosikymmeniltä periytyneissä ohjelmissa oli käytetty ainoastaan ykkösiä ja kymmeniä vuosilukujen ilmaisemiseen. Uudelleenkäytettävyys Edelliseen liittyy käsite uudelleenkäytettävyys eli tarve, että sama ohjelmakoodi voi olla erilaisten järjestelmien osana eri sovellusalueilla. Ohjelmakoodin uudelleenkäytettävyys myöhemmin tuotettavissa ohjelmissa on taloudellista, mutta monesti se on vaikea vaatimus ja se on laadittava huolella, jotta uudessa sovelluksessa vältyttäisiin sen aiheuttamista rajoituksista ja pahimmillaan virheistä. 1. luku 8

1.2 Oliosuunnitteluperiaatteista Olioperustainen ohjelmien suunnittelulähestymistapa pyrkii toisaalta yksinkertaisuuteen, jotta edellä luetellut toteutuspäämäärät olisivat saavutettavissa, ja toisaalta ilmaisuvoimaan, jotta ylätason ratkaisut pystyttäisiin tehokkaasti esittämään. Seuraavat käsitteet tulevat tällöin vastaan: abstraktio kapselointi modulaarisuus Abstraktio Abstraktion tai abstrahoinnin käsite on olennainen ja ilmaisukykyinen tietojenkäsittelytieteessä. Perusideana on eriyttää monimutkainen systeemi perusosiinsa ja kuvata nämä yksinkertaisella, täsmällisellä esityksellä. Osien esittäminen tarkoittaa yleensä niiden nimeämistä ja toiminnan kuvaamista. 1. luku 9

Esimerkiksi tavanomainen tekstinkäsittelyohjelman graafinen käyttöliittymä käsittää edit-valikon abstraktion, joka sisältää useita tekstinkäsittelytoimintoja, kuten leikkaaminen ja liimaaminen. Menemättä monitahoisiin yksityiskohtiin, miten tekstinkäsittelyohjelma toteuttaa ja näyttää teksti- ja graafiset oliot, leikkausliimauskäsitteet ovat yksinkertaiset ja täsmälliset. Leikkaustoiminto poistaa valitun tekstin tai graafisen osan ja sijoittaa sen ulkoiseen muistipuskuriin. Liimaustoiminto toimii käänteisesti. Tekstinkäsittelyvalikon abstraktit toiminnot on määritelty täten riittävän täsmällisellä ja selkeällä kielellä, mutta tarpeeksi yksinkertaisesti tarpeettomien yksityiskohtien abstrahoimiseksi pois. Edellisen menettelytavan soveltaminen tietorakenteiden suunnittelussa nostaa esiin abstraktin tietotyypin. Tämä on tietorakenteen matemaattinen malli, joka määrittelee talletettavan tiedon tyypin, sille käytettävät operaatiot ja operaatioiden parametrien tyypit. Abstrakti tietotyyppi määrää, mitä kukin operaatio tekee, mutta ei periaatteessa (käytännön toteutuksissa usein toki) sitä, miten operaatio sen tekee. 1. luku 10

Kapselointi Kapseloinnissa eli informaation piilottamisessa edellytetään ohjelman osien toteuttamista abstraktioina paljastamatta näiden toteutuksien sisäisiä yksityiskohtia. Etuna tässä on, että käyttäjä voi täysin ymmärtää esim., miten tekstinkäsittelyohjelman toiminnot toimivat, vaikka ei tunne toimintojen yksityiskohtaista toteutusta. Toteutukset eivät olisi käyttäjän kannalta olennaista tietoa. Toisaalta kapselointi antaa ohjelman tekijälle vapauden yksityiskohtien toteutuksessa, kun itse asiassa ainoa rajoitus on ylläpitää käyttäjän näkemä abstrakti rajapinta. 1. luku 11

Modulaarisuus Nykyisten suurien ohjelmien rakentaminen vaatii modulaarisuutta ja hierarkkisuutta. Edellinen tarkoittaa organisointirakennetta, jossa ohjelman eri osat on jaettu erillisiin toimintoyksiköihin. Modulaarisuus tuo luonnollista selkeyttä ohjelman rakenteeseen ja organisointiin ja edistää osien uudelleenkäyttöä. Hierarkkisessa esityksessä samanlaista abstraktia määrittelyä käsittävät osat ryhmitellään yhteen, ja osissa voidaan kulkea hierarkkiassa yksityiskohtaisemmista yleisempiin. Olioperusteiset ohjelman suunnittelumenetelmät Abstraktion, kapseloinnin ja modulaarisuuden saavuttamiseksi muutamat määrätyt ohjelmointitekniikat ovat tarpeellisia. Nämä ovat tuttuja olioohjelmoinnista, joten niitä ei tässä mainintaa tarkemmin kuvata: luokat, oliot, rajapinnat, vahva tyypitys, periytyminen ja polymorfismi. 1. luku 12

suunnittelupäämäärät periaatteet vahvuus kapse- lointi abstraktio tekniikat luokat rajapinnat oliot tyypitys mukautuvuus periytyminen, polymorfismi modulaarisuus uudelleenkäytettävyys 1. luku 13