Sisällys. 16. Lohkot. Lohkot. Lohkot

Samankaltaiset tiedostot
Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Sisällys. 15. Lohkot. Lohkot. Lohkot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

12. Javan toistorakenteet 12.1

11. Javan toistorakenteet 11.1

12. Javan toistorakenteet 12.1

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

16. Ohjelmoinnin tekniikkaa 16.1

5. HelloWorld-ohjelma 5.1

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

1. Omat operaatiot 1.1

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

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

16. Ohjelmoinnin tekniikkaa 16.1

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

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

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

13. Hyvä ohjelmointitapa (osa 1) 13.1

14. Hyvä ohjelmointitapa 14.1

19. Olio-ohjelmointia Javalla 19.1

5. HelloWorld-ohjelma 5.1

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

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

11. Javan valintarakenteet 11.1

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

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1

4. Olio-ohjelmoinista lyhyesti 4.1

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

Ehto- ja toistolauseet

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

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

2. Olio-ohjelmoinista lyhyesti 2.1

7. Oliot ja viitteet 7.1

11/20: Konepelti auki

Ohjausrakenteet. Valinta:

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

Pakkauksen kokoaminen

11. Javan valintarakenteet 11.1

9. Periytyminen Javassa 9.1

Apuja ohjelmointiin» Yleisiä virheitä

Oliot viestivät metodeja kutsuen

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Java kahdessa tunnissa. Jyry Suvilehto

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

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

Ehto- ja toistolauseet

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

Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Ohjausrakenteet:

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit:

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

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

Rajapinta (interface)

ITKP102 Ohjelmointi 1 (6 op)

Tutoriaaliläsnäoloista

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

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

9. Periytyminen Javassa 9.1

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

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

6. Muuttujat ja Java 6.1

Muistutus aikatauluista

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

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

Muuttujat ja kontrolli. Ville Sundberg

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

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

Olio-ohjelmointi Javalla

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

15. Ohjelmoinnin tekniikkaa 15.1

Java-kielen perusteet

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

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

58131 Tietorakenteet ja algoritmit (syksy 2015)

Ohjelmoinnin perusteet, syksy 2006

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

15. Ohjelmoinnin tekniikkaa 15.1

811120P Diskreetit rakenteet

7. Näytölle tulostaminen 7.1

Pakkauksen kokoaminen

Java-kielen perusteita

5/20: Algoritmirakenteita III

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Liitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

14. Poikkeukset 14.1

811120P Diskreetit rakenteet

Java-kielen perusteet

Java-kielen perusteita

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

6. Muuttujat ja Java 6.1

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

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

Transkriptio:

Sisällys 16. ohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.1 16.2 ohkot aarisulut ({ ) ovat tuttuja ohjausrakenteiden yhteydestä. aarisuluilla kootaan yhteen tiettyyn valintaan tai toistoon liittyvät lauseet kootuksi lauseeksi. oottuja lauseita kutsutaan usein lohkoiksi (block), kun kaari-sulkuparien ajatellaan kokoamisen asemasta jakavan ohjelmaa osiin. ohkot voivat olla sisäkkäin ja peräkkäin. if (ehto1) { if (ehto2) { lause 1;... lause n; else { lause 1;... lause m; ohkot aarisulkuja käytetään myös ohjelman (luokan) ja operaation (metodin) sisällön merkitsemiseen. public class HelloWorld { System.out.println("Hello World!"); Ulompi lohko sisältää HelloWorld-ohjelman ja sisempi lohko main-operaation. 16.3 16.4

ohkot ohkon voi esitellä ilman avainsanaa tai otsikkoa pelkästään aaltosulkuja käyttämällä. Esim. { int i = 1; Joskus kätevää, mutta yleisesti ottaen tällaiseen ei ole tarvetta. Näkyvyys ohkot säätelevät muuttujien (ja vakioiden) elinikää, joka puolestaan ilmenee näkyvyytenä (visibility). Seuraavassa tarkastellaan näkyvyyttä vain operaatioiden sisällä, koska ohjelman (luokan) mittakaavassa näkyvyyssäännöt ovat monimutkaisemmat. oska vakiot pyritään esittelemään aina operaation alussa, keskitytään seuraavassa lähinnä muuttujiin. 16.5 16.6 Ulomman lohkon muuttuja näkyy sisempään lohkoon, mutta sisemmän lohkon muuttuja ei näy ulompaan lohkoon. Huomaa, että ulomman lohkon muuttuja näkyy sisempään lohkoon vain, mikäli se on esitelty ennen sisempää lohkoa. // ääntyy. // Ei käänny. // Ei käänny. int i = 0; do { do { do { int i = 0;... i++;... i++; i++; while (i < 10); while (i < 10); while (i < 10); int i = 0; Yleisesti: Muuttuja (tai vakio) x, joka on esitelty ulommassa lohkossa, on käytettävissä (näkyy) sisemmässä lohkossa, jos se on esitelty ennen lohkoa. x = 2; Yleisesti: Muuttuja (tai vakio) x, joka on esitelty lohkossa, ei ole käytettävissä (ei näy) lohkon ulkopuolella. x = 2; // virhe 16.7 16.8

letetaan, että lohkot ja ovat peräkkäin lohkon sisässä. Yleisesti: ohkossa esitelty muuttuja (tai vakio) x ei ole käytettävissä (ei näy) lohkossa. // virhe x++; public class ohko1 { // un muuttuja x esitellään if (y > 0) { // ulommassa eli operaation x = 2; // lohkossa, x näkyy myös y++; // sisemmässä eli if-lauseen // lohkossa. 16.9 16.10 public class ohko2 { if (y > 0) { // un muuttuja x esitellään y++; // sisemmässä eli if-lauseen // lohkossa, x ei näy ulommassa x = 2; // eli operaation lohkossa // Tästä syystä tämä ohko2.java:8: cannot find symbol symbol : variable x // ohjelma ei käänny. public class ohko3 { if (y > 0) { // Muuttujan x esittely y++; // ensimmäisessä lohkossa. while (y < 10) { y++; // Virhe! Muuttuja x ei näy x++; // toisessa lohkossa. 16.11 16.12

Elinikä Muuttujien (ja vakioiden) näkyvyys liittyy kiinteästi eliniän (lifetime) käsitteeseen. Muuttujan voidaan ajatella syntyvän, kun se esitellään. Tällöin muuttujalle varataan muistialue keskusmuistista. (Alkeis- ja viitetyyppisten muuttujien syntymä on kuitenkin hieman erilainen.) Muuttujan elinikä vaihtelee ohjelman eri tasoilla, mutta operaation sisällä esittelylohko ja elinikä ovat erottamattomat. Elinikä operaation sisällä peraation mittakaavassa alkeistyyppinen muuttuja elää (on käytettävissä) niin kauan kuin ohjelman suoritus viipyy sen esittelylohkossa. Muuttuja kuolee (hävitetään), kun lohkon suoritus loppuu. Tällöin muuttujalle varattu muisti vapautuu eikä sen tunnus ole enää käytettävissä. Tästä syystä sisemmässä lohkossa esitelty muuttuja ei ole käytettävissä ulommassa lohkossa eikä edellisen lohkon muuttuja ole käytettävissä seuraavassa lohkossa. 16.13 16.14 Elinikä operaation sisällä Näkyvyyssääntöjä noudattamalla operaation sisällä voidaan esitellä samannimisiä muuttujia, koska edellinen muuttuja ehtii hävitä ennen seuraavan muuttujan esittelyä. Esimerkiksi peräkkäisissä lohkoissa voidaan käyttää samannimistä muuttujaa. ohkossa esitelty muuttuja (tai vakio) x häviää, ennen lohkon suoritusta. Molemmat lohkot sijaitsevat ulommassa lohkossa. Jos sisäkkäisissä lohkoissa elää yhtä aikaa samannimisiä muuttujia (tai vakioita), tapahtuu niin sanottu nimikonflikti (name conflict), joka estää ohjelman kääntämisen. Tässä on huomioitava vielä esittelykohta: Nimikonflikti vältetään, jos ulomman lohkon muuttuja (tai vakio) esitellään vasta sisemmän lohkon jälkeen, koska sisempi muuttuja ehtii hävitä ennen ulompaa esittelyä. Huom! äytännössä samannimiset muuttujat ovat täysin turhia - eikä niitä ole siten syytä käyttää! 16.15 16.16

lkoon ulompi lohko ja lohko lohkon sisäinen lohko. Mikäli lohkossa esitellään samanniminen muuttuja kuin ulommassa lohkossa, sisempi esittely onnistuu vain, mikäli se tehdään ennen ulompaa esittelyä. Väärin: ikein: public class ohko4 { // Esittely pääohjelman lohkossa. if (x == 0) { // Esittely if-lauseen lohkossa ei onnistu, // koska operaation lohkossa on esitelty // samanniminen muuttuja ennen if-lohkoa! ohko4.java:9: x is already defined in main(java.lang.string[]) ^ 16.17 16.18 public class ohko5 { int y = 0; if (y == 0) { // Esittely if-lauseen lohkossa onnistuu, // koska operaation lohkossa on esitelty // samanniminen muuttuja if-lohkon jälkeen. // Tulostaa if-lauseen muuttujan arvon (1). // Esittely pääohjelman lohkossa. // Tulostaa operaation muuttujan arvon (0). 16.19 Muuttujien paikka operaatiossa? Esittely operaation alussa. Perinteinen tapa, jota on käytetty toistaiseksi näkyvyysongelmien välttämiseksi. Näkyvyys taattu; muuttuja saatavilla kaikkialla operaation lohkossa. Muuttujat löytyvät helposti yhteen paikkaan koottuina. Muuttujan esittely ja käyttöpaikka saattavat olla kaukana toisistaan. oodia vaikeampi seurata. hjelmasta hieman pitempi kuin tarpeen, koska alustaminen ei ole aina mahdollista esittelyn yhteydessä. Esittely käyttöpaikan lähellä. Modernimpi tapa. oodi selkeämpää. Esittely ja alustus voidaan tehdä yhdellä lauseella. Näkyvyyden kanssa pitää olla tarkkana. Muuttujat hajallaan koodin seassa. Joissakin kielissä vaarana tehottomuus silmukan lohkon sisäisissä esittelyissä. Java-kääntäjä osaa optimoida jonkin verran. 16.20