3/20: Algoritmirakenteita I

Samankaltaiset tiedostot
5/20: Algoritmirakenteita III

4/20: Algoritmirakenteita II

Mieleni minun tekevi (tavoiteasettelua)

9/20: Puhu mun stdinille

7/20: Paketti kasassa ensimmäistä kertaa

11/20: Konepelti auki

Java-kielen perusteet

12/20: Bitit talteen

Java-kielen perusteet

7. Näytölle tulostaminen 7.1

8/20: Luokat, oliot ja APIt

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

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

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

1. Omat operaatiot 1.1

13/20: Kierrätys kannattaa koodaamisessakin

Ohjelmointi 1 / syksy /20: IDE

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

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

17/20: Keittokirja IV

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

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

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Javan perusteita. Janne Käki

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

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

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

ITKP102 Ohjelmointi 1 (6 op)

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

ITKP102 Ohjelmointi 1, syksy 2007

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

19/20: Ikkuna olio-ohjelmoinnin maailmaan

Metodien tekeminen Javalla

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

ITKP102 Ohjelmointi 1, syksy 2007

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

Java kahdessa tunnissa. Jyry Suvilehto

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

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

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

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

Java-kielen perusteita

812341A Olio-ohjelmointi, Olio-ohjelmoinnin peruskäsitteet ja Java-kieli

Java-kielen perusteet

13. Loogiset operaatiot 13.1

16. Ohjelmoinnin tekniikkaa 16.1

Muuttujat ja kontrolli. Ville Sundberg

7. Oliot ja viitteet 7.1

19. Olio-ohjelmointia Javalla 19.1

6/20: Tietorakenteita

14/20: Keittokirja I

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

1. luento. Ohjelmointi (C) T0004 Syksy luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

ITKP102 Ohjelmointi 1 (6 op)

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

Rajapinta (interface)

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Tietotyypit ja operaattorit

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

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

16. Ohjelmoinnin tekniikkaa 16.1

ITKP102 Ohjelmointi 1, syksy 2007

11. Javan valintarakenteet 11.1

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

ITKP102 Ohjelmointi 1, syksy 2007

4. Lausekielinen ohjelmointi 4.1

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

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

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

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

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

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

ITKP102 Ohjelmointi 1 (6 op)

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

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

13. Loogiset operaatiot 13.1

11. Javan valintarakenteet 11.1

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Java-kielen perusteita

11. Javan toistorakenteet 11.1

TIE Principles of Programming Languages CEYLON

Lauseet. Ehdollinen lause. Tämän osan sisältö. Ehdollinen lause. Esimerkkejä. Yksinkertainen ehto. Lohkosulut ja sisennys. Ehdollinen lause if

Palautetta viime luennosta

9. Periytyminen Javassa 9.1

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

6. Muuttujat ja Java 6.1

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

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

16. Javan omat luokat 16.1

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Sisällys JAVA-OHJELMOINTI Osa 3: Laskennan ohjaus. Lohkolause (block) Peräkkäinen laskenta. Lohkon käyttö. Esimerkki

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Apuja ohjelmointiin» Yleisiä virheitä

2 Konekieli, aliohjelmat, keskeytykset

15. Ohjelmoinnin tekniikkaa 15.1

Olio-ohjelmointi Javalla

Transkriptio:

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

Tämän luennon aiheet Tulee jonkun verran tiukkaa asiaa: Syntaksin mukaisen ohjelman kirjoittaminen. Kommentit. Koodauskäytänteet. Tulostaminen standardiulostuloon Ohjelman toimintaympäristön ilmeneminen Javassa. Mikä olikaan virtuaalikone. Peräkkäissuoritus, ensimmäisiä lauseita ja lausekkeita. Muuttujat, tyyppijärjestelmä, literaalit, literaalien syntaksi Javassa. primitiivin tallennus tietokoneen muistissa. Sijoituslause. Operaattorit, presedenssi alustavasti. Aliohjelmat. Algoritmi ja alialgoritmi alustavasti. Esimerkin kautta: aliohjelman kutsuminen, parametrinvälitys ja paluuarvon sijoittaminen. Ensi viikolla täsmällisempi kuva. Ohjelmointi 1 / syksy 2007 p.2/27

Käsittelytapa Luentokalvot vähenevät; käytännön esimerkkien määrä kasvaa. Yksityiskohtien määrä ylittää luentoajan mahdollisuudet; pakko opiskella myös itse kirjasta, ohjeista, netistä, kokeilemalla, tekemällä, yrittämällä, erehtymällä... Luennolla näytetään esimerkkejä, toimintamalleja, selitetään ajatuksenkulkua. Nyanssit on aina tarkistettava speksistä - esim. kielen määrittelystä tai API-dokumentaatiosta. Dokumentaatioiden lukemista ryhdytään jossain vaiheessa opettelemaan. Ohjelmointi 1 / syksy 2007 p.3/27

Käännösyksikön luominen Syntaksin mukaisen ohjelman kirjoittaminen. Merkitysten ja sovittujen asioiden kuten tiedostonimien huomiointi. Kääntäjän virheilmoitusten tulkitseminen Kommentit, käännösyksikkö, luokkamäärittely, metodimäärittely. HelloWorld juurta jaksain ( tehdäänpä luennolla, syntaksiin verraten) Ohjelmointi 1 / syksy 2007 p.4/27

Java-ohjelman syntaksia (typistetty) CompilationUnit PackageStatement ImportDeclaration TypeDeclaration NormalClassDeclarationSTUB TypeDeclaration ClassOrInterfaceDeclaration ; ClassOrInterfaceDeclaration Modifier ClassDeclaration InterfaceDeclaration class Identifier TypeParams extends COIType implements COITypeList ClassBody ClassBodyDeclaration ClassBody { ClassBodyDeclaration } ; static Modifier Block MemberDecl MemberDeclSTUB GenericMethodOrConstructorDecl MethodOrFieldDecl void Identifier FormalParameters throws QIList MethodBody ; Identifier ConstructorDeclaratorRest InterfaceDeclaration ClassDeclaration MethodBody Block Ohjelmointi 1 / syksy 2007 p.5/27

Java-ohjelman syntaksia (typistetty) BlockStatement Block BlockStatements LocalVariableDeclarationStatement ClassOrInterfaceDeclaration { BlockStatements } BlockStatement Identifier : Statement Statement Block assert Expression : Expression ; if ParExpression Statement else Statement for ( ForControl ) Statement while ParExpression Statement do Statement while ParExpression ; Catches try Block Catches finally Block switch ParExpression { SwitchBlockStatementGroups } synchronized ParExpression Block return Expression ; throw Expression ; break continue Identifier Identifier ; StatementExpression ; Identifier : Statement Ohjelmointi 1 / syksy 2007 p.6/27

Ensimmäisiä koodauskäytänteitä Vaadittavat javadoc-kommentit. Koodauskäytänteitä: lohkojen sisentäminen, whitespacen eli tyhjätilamerkkien käyttö. Löyhästi käännettyjä iskulauseita: 80% ohjelmiston elinkaarikustannuksista kertyy ylläpitovaiheesta. Juuri koskaan alkuperäinen tekijä ei ole lopullinen ylläpitäjä. Koodauskäytänteet tekevät ohjelmistosta luettavamman, jolloin uusi kehittäjä ymmärtää aiemmin tuntemattoman koodin nopeammin ja täydellisemmin. Ohjelmointi 1 / syksy 2007 p.7/27

Tulostaminen standardiulostuloon Katsotaan esimerkkien kautta eri tapoja tulostaa standardiulostuloon Javassa. Taikasanat : System.out.println() System.out.print() System.out.printf() ( näytetäänpä esimerkkejä literaaleilla) Ohjelmointi 1 / syksy 2007 p.8/27

Ohjelman toimintaympäristön ilmeneminen Javassa System-luokka ensikatsaus Javan APIin. (Ei vielä tarkemmin) System.in -olio vastaa standardisyöttövirtaa System.out -olio vastaa standarditulostusvirtaa System.err -olio vastaa standardivirhetulostevirtaa Nämä oliot kuuluvat tietovirtojen luokkaan: Ne ovat putkenpäitä, joihin tulee tietoa jostakin (syöttövirta) tai jotka vievät tietoa johonkin (tulostusvirta). Esim. tulostusvirta tarjoaa rajapinnassaan mahdollisuuden merkkijonon vientiin (johonkin, mihin se onkaan toisessa päässä yhdistetty). Ohjelmointi 1 / syksy 2007 p.9/27

Ohjelman toimintaympäristön ilmeneminen Javassa Katsaus mustan laatikon sisään. Aina kun Java-ohjelma käynnistyy, se näkee ulkomaailman kommunikaatiorajapinnat olioina tietovirtoina sekä argumentit merkkijonotaulukkona: Näin se näkyy Java-ohjelmassa, mutta ohjelmaa suoritetaan aina jossakin maailmassa. Katsotaan, millaisessa... Ohjelmointi 1 / syksy 2007 p.10/27

Virtuaalikoneet ja JVM Java-ohjelman alla pyörii aina virtuaalikone (Java Virtual Machine). Se auttaa siirrettävyysongelmaan ja toisaalta suorituskykyyn verrattuna tulkattavaan kieleen: Java-ohjelma käännetään, mutta se käännetään standardiksi tavukoodiksi (.class -tiedostoksi) eikä natiiviksi. Virtuaalikone abstrahoi laitteiston täysin. Ohjelmointi 1 / syksy 2007 p.11/27

Mitä se on, kun suoritetaan Ohjelman merkitys on suorittaa jotakin laskentaa. Suoritus tapahtuu pieni operaatio kerrallaan, määrätyssä järjestyksessä. Syntaksissa olevat lauseet ja lausekkeet muuntuvat käännöksessä konekielikoodiksi (Javassa tavukieleksi ) jota kone (tai virtuaalikone) suorittaa. Yksi pieni operaatio tapahtuu kerrallaan. Jo yksi lausekekin voi sisältää monen operaation suorittamisen. Kontrollirakenteilla saadaan suoritusjärjestys hyppäämään ajon aikana tarkoituksenmukaiseen kohtaan ohjelmaa. Ohjelmointi 1 / syksy 2007 p.12/27

Peräkkäissuoritus Peräkkäissuoritus on lähtökohta, joka pitää ymmärtää: Jos ei muita rakenteita ole kirjoitettu, peräkkäiset toimenpiteet, eli laskutoimitukset ja aliohjelmakutsut, tapahtuvat aina perä perää toistensa jälkeen, lähdekoodin mielessä alaspäin. Aliohjelmaan siirtyminen tietysti tapahtuu, sitten sen suoritus, ja lopuksi paluu. Kutsutun ohjelman sisällä suoritus etenee vastaavalla tavoin. Suoritusjärjestys määräytyy arvatenkin lähdekoodissa ohjelmointikielen lauseilla kommunikoitujen rakenteiden perusteella. Ajonaikaiset poikkeustilanteet voivat muuttaa tätä kuviota. Ohjelmointi 1 / syksy 2007 p.13/27

Lausekelause on yksinkertaisin Statement Block : Expression assert Expression ; else Statement if ParExpression Statement for ( ForControl ) Statement while ParExpression Statement do Statement while ParExpression ; try Block Catches Catches finally Block switch ParExpression { SwitchBlockStatementGroups } synchronized ParExpression Block Expression return ; throw Expression ; Identifier break Identifier continue ; Katsotaan taas Javan mahdollisia lauseita (engl. statement ). Helpoimmin käsitettävä niistä on lausekelause (engl. statement expression), joka itse asiassa on vain lauseke. Lauseke on, kuten matematiikassa, sellainen ilmaus, jonka lukuarvo on määrättävissä laskutoimituksella. Arvon laskeminen voi silti olla monivaiheista. StatementExpression ; Identifier : Statement Ohjelmointi 1 / syksy 2007 p.14/27

Muuttujien käyttö mahdollistaa mm. Java-ohjelmoinnin Jotta voidaan ymmärtää Java-kielen lauseita tai edes lausekkeita, pitää ottaa esille tärkeä käsite nimeltä muuttuja: Kaikki edellyttää muuttujien käyttöä, koska muuttuja vastaa tiedon tallennuspaikkaa tietokoneessa eikä mitään voida laskea tallentamatta välituloksia ja apuarvoja! Muuttujalla on aina lähdekoodissa määritelty nimi ja tyyppi. Nimetyn muuttujan tyyppi ei koskaan muutu (ns. vahvasti tyypitetyssä kielessä kuten Javassa). Ohjelmointi 1 / syksy 2007 p.15/27

Muuttujan esittelyn syntaksi LocalVariableDeclarationStatement final Type VariableDeclarators ; VariableDeclarators VariableDeclarator VariableDeclarator, VariableDeclarator Identifier VariableDeclaratorRest Type ClassOrInterfaceType byte short [] char int long float double boolean Ohjelmointi 1 / syksy 2007 p.16/27

Muuttujien käyttö on tietokoneen muistin käyttöä Suorituksen aikana muuttujalla on: Tarvittu määrä muistitilaa (määrä riippuu tyypistä) Arvo (tyypin mukainen esitysmuoto, joka on sijoitettu muuttujalle varattuun muistitilaan) Muuttujan idea on useimmiten, että se muuttuu. Arvo siis vaihtelee suorituksen etenemisen mukaan. Joskus tarvitaan kuitenkin nimenomaan muuttumattomia vakiomuuttujia. Ohjelmointi 1 / syksy 2007 p.17/27

Muuttujien käyttötarkoituksia Paikallisia muuttujia tässä ja nyt Aliohjelman parametreja tulivat jostakin tähän Globaaleja muuttujia joka paikassa häsläämässä (vaarallisia!) Olion attribuutteja sisäinen tila; ei näy ulos Ohjelmointi 1 / syksy 2007 p.18/27

Muuttujien tyyppijärjestelmä Javassa muuttuja on joko primitiivialkio tai viite tietyntyyppiseen olioon. (Ks. syntaksi aiemmalla kalvolla). Viitteen merkitykseen palaamme olioiden yhteydessä. Taulukot ja merkkijonot ovat Javassa olioita, joten niidenkin käsittely tehdään myöhemmin. Aloitetaan primitiiveillä. Ne ovat tietynmittaisia bittijonoja tietokoneen muistissa. Ohjelmointi 1 / syksy 2007 p.19/27

Javan primitiivityypit Javan primitiivityypit ovat: byte, short, char, int, long, float, double, boolean. Muistitilaa varataan seuraavasti: byte 1, short 2, char 2, int 4, long 8, float 4, double 8 tavua. Tyyppi char on merkkejä varten, float ja double liukuluja, boolean totuusarvoja, ja loput etumerkillisiä kokonaislukuja varten. Java virtuaalikoneen määritelmä abstrahoi laitteiston ominaisuudet piiloon; Java-ohjelmoija voi luottaa ylläkirjattuihin muistinvarauksiin missä tahansa fyysisessä tietokoneympäristössä. Ohjelmointi 1 / syksy 2007 p.20/27

Literaalit eli lähdekoodin vakiot Lähdekoodiin kirjoitettua irtonaista vakiota sanotaan literaaliksi. Literaalien tyypit ovat samoja kuin muuttujilla, paitsi että merkkijonot ovat olioita, joten niiden literaalit toimivat hiukan eri tavoin kuin numeroliteraalit. Literal IntegerLiteral FloatingPointLiteral CharacterLiteral StringLiteral BooleanLiteral NullLiteral Ohjelmointi 1 / syksy 2007 p.21/27

Muuttujia, literaaleja, lausekelauseita ( käytännön esittely videonäytöllä) Muuttujia, sijoituslauseita ja lausekkeita. Literaalien syntaksit: merkkijono, kokonaisluku, liukuluku Kokonaislukujen eri esitysmuodot: oktaali, heksaja desimaalimuodot. Ohjelmointi 1 / syksy 2007 p.22/27

Operaattorit, presedenssi InfixOp && ^ & == AssignmentOperator!= = < += > = <= *= >= /= << &= >> PrefixOp = >>> ++ ^= + %=! <<= * ~ PostfixOp >>= / + ++ >>>= % Ohjelmointi 1 / syksy 2007 p.23/27

Operaattorit, presedenssi Lausekkeessa on usein mukana operaattoreita, että mitään järkevää tapahtuisi Operaattorilla on yksi tai kaksi (tai yhdellä tietyllä Java-operaattorilla kolme) operandia, joiden perusteella operaattori toimii. Operaation tulos voi tallentua joko oikealla tai vasemmalla puolella olevaan muuttujaan, tai sitten tulosta vain käytetään myöhemmässä operoinnissa lausekkeen arvon selvittämiseksi. Operandit itsessään voivat olla lausekkeita, joiden arvo lasketaan loppuun ennen operaattorin suorittamista. Operaattoreilla on suoritusjärjestys eli presedenssi, Ohjelmointi 1 / syksy 2007 p.24/27

Aliohjelmista ennakkokatsaus Katsotaan esimerkkien kautta: Aliohjelmakutsun syntaksi; formaalit parametrit. Aliohjelman aktivointi suoritusmielessä: parametrinvälitys, lokaalit muuttujat ja paluuarvon sijoittuminen kutsuvassa ohjelmassa lausekkeen arvoon tai operandiksi. Ohjelmointi 1 / syksy 2007 p.25/27

Seuraavat demot Tehtävänä lauseita ja lausekkeita (lukeminen ja ymmärtäminen, syntaktinen jäsentäminen, kirjoittaminen); Tulostamista standardiulostuloon. Peräkkäisohjelmien tekemistä aliohjelmia hyödyntäen. Ohjelmointi 1 / syksy 2007 p.26/27

Ensi viikkoon! Seuraavalla kerralla: Jatketaan aliohjelmista, syvennetään vähän ymmärrystä Java virtuaalikoneen toiminnasta Jatketaan loogisista operaatioista, totuusarvoista ja niihin liittyvistä kontrollirakenteista. Ohjelmointi 1 / syksy 2007 p.27/27