14/20: Keittokirja I



Samankaltaiset tiedostot
17/20: Keittokirja IV

8/20: Luokat, oliot ja APIt

7/20: Paketti kasassa ensimmäistä kertaa

11/20: Konepelti auki

5/20: Algoritmirakenteita III

Ohjelmointi 1 / syksy /20: IDE

13/20: Kierrätys kannattaa koodaamisessakin

19/20: Ikkuna olio-ohjelmoinnin maailmaan

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

4. Lausekielinen ohjelmointi 4.1

Ohjelmoinnin perusteet, syksy 2006

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

9/20: Puhu mun stdinille

Tietotekniikan valintakoe

Javan perusteita. Janne Käki

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

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

Tutoriaaliläsnäoloista

etunimi, sukunimi ja opiskelijanumero ja näillä

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

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

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

Java-kielen perusteet

1. Olio-ohjelmointi 1.1

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

Java-kielen perusteet

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Algoritmit 1. Luento 1 Ti Timo Männikkö


6/20: Tietorakenteita

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Alkukartoitus Opiskeluvalmiudet

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

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmointi 1. Kumppanit

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

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A Kandidaatintyö ja seminaari

Ohjelmistojen mallintaminen, mallintaminen ja UML

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

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

Ohjelmoinnin perusteet Y Python

Ohjelmistojen mallintaminen

4/20: Algoritmirakenteita II

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

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

Koodaamme uutta todellisuutta FM Maarit Savolainen

811120P Diskreetit rakenteet

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

811120P Diskreetit rakenteet

12/20: Bitit talteen

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

1. Omat operaatiot 1.1

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Ohjelmistojen suunnittelu

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

2 Konekieli, aliohjelmat, keskeytykset

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

Java kahdessa tunnissa. Jyry Suvilehto

ELM GROUP 04. Teemu Laakso Henrik Talarmo

1. Mitä tehdään ensiksi?

Algoritmit 1. Luento 3 Ti Timo Männikkö

Predikaattilogiikkaa

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

811120P Diskreetit rakenteet

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

Taulukot. Jukka Harju, Jukka Juslin

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

LOGIIKKA johdantoa

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

16. Ohjelmoinnin tekniikkaa 16.1

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Ohjelmointi 1 C#, kevät 2014, 2. uusintatentti NIMI:

Java-kielen perusteita

Ohjelmoinnin perusteet Y Python

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

18. Abstraktit tietotyypit 18.1

Pikapaketti logiikkaan

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016

Antti-Jussi Lakanen Ohjelmointi 1, C# / kevät 2011

Muistutus aikatauluista

Zeon PDF Driver Trial

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmoinnin peruskurssi Y1

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

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

13. Loogiset operaatiot 13.1

16. Ohjelmoinnin tekniikkaa 16.1

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

Muutamia peruskäsitteitä

Transkriptio:

Ohjelmointi 1 / syksy 2007 14/20: Keittokirja I Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/13

Tämän luennon rakenne Yhteenveto kurssin sisällöstä (== asiat sillä tavoin kuin ne piti heti alussa sanoa, mutta en vielä tiennyt, mitä ne sanat ehkä kannattaisi olla) Aloitetaan Keittokirja-osio: miten tehdään ohjelmia käyttämällä aiemmin nähtyjä yksityiskohtia työkaluna. Eli miten kirjoitetaan reseptejä, kun tunnetaan keittovälineet ja raaka-aineet. [Jatkossa esiin tulee pala kerrallaan vähän lisää Javan APIa (mm. tietorakenneluokkia sekä joitain rajapintoja metodeineen) ja syvällisyyttä virtuaalikoneen toimintaan (mm. roskienkeruu). Ei tosiaan enää paljon uutta!] Ohjelmointi 1 / syksy 2007 p.2/13

Yhteenvetoa mihin kaikki kiteytyy Neljä fundamentaalia asiaa ohjelmoinnissa: Rakenteet: miten algoritmia ajatellaan (suoritusjärjestys, kontrollirakenteet ja aliohjelmat, muuttujat ja tietorakenteet, rajapinnat) Syntaksi: miten on sallittua kirjoittaa rakenteita esim. Javassa. Suoritus: miten kone laskee asioita Suunnittelu: miten tehtävän määrittely täsmennetään ja muunnetaan algoritmiksi. Tämän nelikon keskinäinen tärkeysjärjestys on vaikea pähkinä; kaikki tarvitaan, että on lopulta mahdollista ohjelmoida. Ohjelmointi 1 / syksy 2007 p.3/13

Yhteenvetoa 1/4: Rakenteet Rakenteet ohjelmoinnissa ovat samoja kuin ne, joilla reaalimaailmassa tehdään toimintasuunnitelmia: Peräkkäinen suunnitelma: Ensin keitän kahvin; sitten kaadan sen kuppiin; juon; huuhdon kupin. Ehdollinen suunnitelma: Jos sattuu satamaan, otan sateenvarjon. Jos on kuuma, riisun paidan. Toistot suunnitelmissa: Luen tenttiin kirjan jokaisen luvun ykkösestä seiskaan järjestyksessä. Toistan lukemista kunnes ymmärrän. Parametroidut alialgoritmit : Kirjatenttiin luen aina samalla tavoin, kirja vain on eri kursseilla eri kirja. Tämä on menetelmä, metodi, jolla toteutan oppimisen. Ohjelmointi 1 / syksy 2007 p.4/13

Yhteenvetoa 2/4: Syntaksi Kielioppi reaalimaailman toimintasuunnitelmalle on luonnollista kieltä, jota algoritmin toteuttaja osaa usein täydentää ja soveltaa taitojensa puitteissa: Keitä kahvi; kaada kuppeihin; tarjoile vieraille. Yhtä hyvin: toteuta kahvitarjoilu Jos sataa, ota sateenvarjo. Jos on kuuma, riisu paita. Tai: varaudu sään mukaan Lue kirjasta luvut ykkösestä seiskaan aina uudelleen, kunnes koet osaavasi. Opiskele Klassinen mekaniikka ; opiskele kvanttimekaniikka. Reaalimaailmassa toteuttaja harvoin ei tiedä, miten otetaan sateenvarjo tmv. Kielioppi ohjelmoinnissa sisältää samat rakenteet, mutta kieliopissa ei ole tulkinnan varaa, ja se riippuu valitusta työkalusta: kahvi = keitakahvi(); kaadakuppeihin(kahvi); tarjoile(kahvi, vieraat); if (israining) preparetouseumbrella(); while (!issufficientknowledge()) { for (int chapter=1; chapter <= 7; chapter++) readchapter(chapter); } studyusingbook(getfromlibrary( Klassinen mekaniikka )); studyusingbook(getfromlibrary( Kvanttimekaniikka )); Ohjelmointi 1 / syksy 2007 p.5/13

Yhteenvetoa 3/4: Suoritus Tietokone on tyhmä väline, joka osaa vain siirtää bittejä paikasta toiseen, tehden niille yksinkertaisen operaation kerrallaan (esim. kahden luvun välisen matemaattisen operaation). Niinpä: Ohjelman täytyy suorittaa asiat pohjimmiltaan lukuarvoja käyttäen Operaatioita tarvitaan niin paljon, ettei ihminen pysty tekemään ohjelmaa, johon kirjoitettaisiin suoraan kaikki tietokoneen laskutoimitukset siten kuin kone ne suorittaisi. Sen sijaan suoritusta abstrahoidaan hierarkkisesti: Korkean tason sovellusohjelma käyttää aliohjelmia. Ne käyttävät edelleen matalamman ja matalamman tason aliohjelmia jne. kunnes kaikkein matalimmalla tasolla tietokone saa yksinkertaisia käskyjä. Tätä tapahtuu usein perustietorakenteita kuvaavien luokkien metodeissa (esim. String, StringBuilder, InputStream, Integer... ). Abstrahointi ja hierarkkinen mallintaminen ovat siis tärkeitä, ja keino tähän ovat aliohjelmat (metodit) ja oliot sekä rajapintojen määrittely. Virheiden välttämiseksi ohjelman tekijän täytyy ymmärtää, miten nämä käsitteet toimivat, kun ohjelmaa suoritetaan, ja miten niitä käytetään sovellusongelman ratkaisemiseksi. Ohjelmointi 1 / syksy 2007 p.6/13

Yhteenvetoa 4/4: Suunnittelu On siis käytössä tyhmä väline, jota on osattava käyttää fiksusti. Ohjelman kehitys kannattaa tehdä pienin askelin, mm. koska ihmisen työmuisti on rajallinen eikä virheiltä ole helppo välttyä ilman ajoittaista testaamista. Alussa on syytä tehdä aina vähintään pienimuotoinen analyysi ongelmakentästä ( domain analysis ): Millaista dataa käsitellään, miten se koodautuu tietokoneessa; mikä sen merkitys on käyttäjälle. Millainen on syötettävän datan muoto, millainen tulostettavan datan? Millainen on se muunnos, joka syötteelle tehdään. Ja edelleen: mitä osatehtäviä tämän muunnoksen tekeminen edellyttää. Konkreettinen ajattelu auttaa: voinko piirtää tämän paperille tai tehdä asian itse ilman tietokonetta (pienemmälle tai yksinkertaisemmalle datalle)? Miten? Suuremmassa mittakaavassa analyysi on laajempi: Mitä erilaisia datoja käsitellään, mitkä niiden merkitykset ovat kokonaisuuden kannalta. Mitä erilaisia muunnoksia, syötteitä, tulosteita, tallenteita, päämääriä? Tavoite on aina hallita kokonaisuus paloittelemalla se pienempiin osiin, olivatpa osat aliohjelmia, aliohjelmakirjastoja, olioita, paketteja skaala riippuu ongelman koosta; koskaan sitä ei voi toteuttaa loppuun ennen kuin yksittäinen osaongelma on riittävän pieni. Ohjelmointi 1 / syksy 2007 p.7/13

Tyvestä vai latvasta puuhun? Ihan sama; sieltä mistä pääsee! Lähestymistapoja ohjelman toteuttamiseen: top-down eli ajatellaan kokonaisuuksista yksityiskohtiin päin. bottom-up eli nähdään ruohonjuuritason kohteita ja yhdistellään näitä kohti kokonaisuutta. from-the-middle eli keskitytään jonnekin ruohonjuuritason ja kokonaiskuvan välille, jos sieltä sattuu löytymään kouriintuntuvia osaongelmia; edetään näistä molempiin suuntiin top-down ja bottom-up periaatteilla. Yhteen kohteeseen kerrallaan keskittyen. Eri lähestymistapoja voidaan soveltaa myös yhtäaikaa. Tärkeätä on yrittää monesta suunnasta, kunnes joku lähestymistapa alkaa vaikuttaa lupaavalta lähtökohdalta ja suunnittelu pääsee käyntiin. Toteutusta helpottaa havainto: korkeimmankin abstraktiotason voi suunnitella ja jopa toteuttaa (!) välittömästi raakileena, joka käyttäisi aliohjelmia, jos ne saataisiin myöhemmin toimimaan. sama kaikilla muillakin abstraktiotasoilla ruohonjuuritason ( bottom ) operaatiot ovat selkeästi toteutettavissa itsenäisinä aliohjelmina; se on niiden idea. Ohjelmointi 1 / syksy 2007 p.8/13

Tarpeellista Muuttujat ja logiikka Johtuen koneesta ja suorituksesta, ohjelmoinnissa tarvitaan muuttujia. Muuttujia käytetään tietyntyyppisen informaatioyksikön tallentamiseen, ja sitä voi käyttää laskemisessa. Aliohjelmille syötettävät tiedot tulevat käyttöön muuttujina (joita sanotaan parametreiksi). Jotta aliohjelman laskema tulos olisi käytettävissä myöhemmin, se pitää sijoittaa muuttujaan kutsuvassa ohjelmassa. Olioiden sisäinen tila ilmenee muuttujina, (joita vaan sanotaan attribuuteiksi). Muuttujien (ja mahdollisesti vakioiden) arvoja voi vertailla (yhtäsuuruus, erisuuruus, järjestys), jolloin syntyy totuusarvo. Totuusarvoja voi yhdistellä loogisilla operaatioilla; esim. C olkoon tosi täsmälleen silloin kun sekä A että B ovat tosia (ns. JA-operaatio; vastaavasti on TAI ja JOKO-TAI sekä EI -operaatiot.). Ohjelmointi 1 / syksy 2007 p.9/13

Mitäs nyt taas onkaan nähty? Kurssilla on ollut kalvosarjoissa ja demoissa kaikenlaista; miten kaikki liittyy kokonaiskuvaan... Syntaksin ideaahan jossain vaiheessa käytiin läpi... ja siihen on viitattu aina silloin tällöin. Ohjelmointi 1 / syksy 2007 p.10/13

Syntaksi ja semantiikka Ohjelmoinnin oppikirjat ja työkalujen manuaalit kuvailevat usein kaksi asiaa: Tietyn rakenteen syntaksi enemmän tai vähemmän formaalisti käyttäen jotakin notaatiota, jossa on symboleita. Kielellä kirjoitettujen rakenteiden merkitys ( semantiikka ). Usein selitys on luonnollisella kielellä kuten suomeksi tai englanniksi. Syntaksi tarvitaan että kommunikointi ohjelmointikielellä mahdollistuu. Sen pitäisi olla lopulta pikkujuttu. Tärkeämpää on kommunikoidun rakenteen merkitys. Eli toki ohjelman teko edellyttää, että ohjelmoijan päässä on ensin idea esim. suomen kielellä. Idea soveltaa samoja rakenteita, jotka on sitten mahdollista kirjoittaa ohjelmointikielellä. vois katsoa uudelleen alkupään kalvoja, syntaksin ideaa ja verrata sitä rakenteiden merkitykseen sekä esim. oppikirjassamme käytettyyn notaatioon... Ohjelmointi 1 / syksy 2007 p.11/13

Miten tehdään ohjelma Tehdään pienen mittakaavan ohjelma käyden läpi kaikki domain-analyysistä toteutukseen asti. Ensinnä kertauksen vuoksi esim. 5 ensimmäisen Fibonaccin luvun tulostaminen. Ohjelmointi 1 / syksy 2007 p.12/13

Miten ohjelma toimii tietokoneessa Käytetään Joensuulaisten animointityökalua. Vapaan lähdekoodin projekti; saatavilla siis helposti kotikäyttöön, jos kokee että tuosta on apua. Verrataan Eclipsen debuggeriin. Ohjelmointi 1 / syksy 2007 p.13/13