Sisällys. 15. Lohkot. Lohkot. Lohkot

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

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

Sisällys. 16. Lohkot. Lohkot. Lohkot

5. HelloWorld-ohjelma 5.1

12. Javan toistorakenteet 12.1

1. Omat operaatiot 1.1

11. Javan valintarakenteet 11.1

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

11. Javan toistorakenteet 11.1

12. Javan toistorakenteet 12.1

19. Olio-ohjelmointia Javalla 19.1

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

5. HelloWorld-ohjelma 5.1

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

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

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

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

11. Javan valintarakenteet 11.1

14. Hyvä ohjelmointitapa 14.1

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

16. Ohjelmoinnin tekniikkaa 16.1

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

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

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

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

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

13. Hyvä ohjelmointitapa (osa 1) 13.1

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

4. Olio-ohjelmoinista lyhyesti 4.1

13. Loogiset operaatiot 13.1

9. Periytyminen Javassa 9.1

13. Loogiset operaatiot 13.1

7. Oliot ja viitteet 7.1

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

2. Olio-ohjelmoinista lyhyesti 2.1

Oliot viestivät metodeja kutsuen

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

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

Pakkauksen kokoaminen

Olio-ohjelmointi Javalla

9. Periytyminen Javassa 9.1

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

Metodien tekeminen Javalla

Java-kielen perusteet

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

Ehto- ja toistolauseet

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

7. Näytölle tulostaminen 7.1

Ehto- ja toistolauseet

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

ITKP102 Ohjelmointi 1 (6 op)

Rajapinta (interface)

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Mikä yhteyssuhde on?

Apuja ohjelmointiin» Yleisiä virheitä

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

6. Muuttujat ja Java 6.1

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

ITKP102 Ohjelmointi 1 (6 op)

Muuttujat ja kontrolli. Ville Sundberg

Java kahdessa tunnissa. Jyry Suvilehto

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

Pakkauksen kokoaminen

Java-kielen perusteita

Ohjelmointiharjoituksia Arduino-ympäristössä

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

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

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

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

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

11/20: Konepelti auki

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

ITKP102 Ohjelmointi 1 (6 op)

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Javan perusteita. Janne Käki

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

Ohjelmoinnin perusteet, syksy 2006

58131 Tietorakenteet ja algoritmit (syksy 2015)

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

Ohjausrakenteet. Valinta:

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

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

Listarakenne (ArrayList-luokka)

16. Javan omat luokat 16.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

14. Poikkeukset 14.1

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

15. Ohjelmoinnin tekniikkaa 15.1

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

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

Transkriptio:

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 ({ ) ovat tuttuja ohjausrakenteiden yhteydestä. Kaarisuluilla kootaan yhteen tiettyyn valintaan tai toistoon liittyvät lauseet kootuksi lauseeksi. Koottuja lauseita kutsutaan usein lohkoiksi (block), kun aaltosuljeparien ajatellaan kokoamisen asemasta jakavan ohjelmaa osiin. Lohkot voivat olla sisäkkäin ja peräkkäin. if (ehto1) { if (ehto2) { lause 1;... lause n; else { lause 1;... lause m; Lohkot Aaltosulkeita käytetään myös ohjelman (luokan) ja operaation (metodin) sisällön merkitsemiseen. public class HelloWorld { public static void main (String[] args) { System.out.println("Hello World!"); Ulompi lohko sisältää HelloWorld-ohjelman ja sisempi lohko main-operaation. Operaation otsikon tunnus args kuuluu main-operaation lohkoon. 15.3 15.4

Lohkot Lohkon voi esitellä ilman avainsanaa tai otsikkoa pelkästään aaltosulkuja käyttämällä. Esimerkki: { int Joskus kätevää, mutta yleisesti ottaen tällaiseen ei ole tarvetta. Näkyvyys Lohkot säätelevät muuttujien (ja vakioiden) elinikää, joka puolestaan ilmenee näkyvyytenä (visibility). Seuraavassa tarkastellaan näkyvyyttä vain operaatioiden sisällä, koska ohjelman (luokkien) mittakaavassa näkyvyyssäännöt ovat monimutkaisemmat. Koska vakiot pyritään esittelemään aina operaation alussa, keskitytään seuraavassa lähinnä muuttujiin. 15.5 15.6 Ulomman lohkon muuttuja näkyy sisempään lohkoon, mutta sisemmän lohkon muuttuja ei näy ulompaan lohkoon. Ulomman lohkon muuttuja näkyy sisempään lohkoon vain, mikäli se on esitelty ennen sisempää lohkoa. // Oikein. 15.7 // Muuttuja x näkyy käyttöpaikkaansa. public class Lohko1 { x = 2; y = y + 1; Kun muuttuja x esitellään ulommassa eli operaation lohkossa, x näkyy myös sisemmässä eli if-lauseen lohkossa. 15.8

// Muuttuja x ei näy käyttöpaikkaansa. public class Lohko2 { y = y + 1; x = 2; Lohko2.java:9: cannot find symbol symbol : variable x Kun muuttuja x esitellään sisemmässä eli iflauseen lohkossa, x ei näy ulommassa eli operaation lohkossa. Tästä syystä oheinen ohjelma ei käänny. Lohkossa esitelty muuttuja ei näy lohkoa seuraavaan lohkoon, mikäli lohkot ovat peräkkäisiä, vaikka lohkot ovat samalla tasolla. while (i < 10) { int j = 0; j = j + 1; while (j < 10); 15.9 15.10 // Muuttuja x ei näy käyttöpaikkaansa. public class Lohko3 { // Muuttujan x esittely y = y + 1; // ensimmäisessä lohkossa. while (y < 10) { y = y + 1; // Virhe! Muuttuja x ei näy x = x + 1; // toiseen lohkoon. 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. 15.11 15.12

Elinikä operaation sisällä Operaation 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. public main( ) { // Esittely synnyttää // muuttujan. double paino = 80.5; // Muuttuja elää. // Muuttuja häviää, // kun operaatio on // suoritettu. 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ä. Jos sisäkkäisissä lohkoissa elää yhtä aikaa samannimisiä muuttujia (tai vakioita), tapahtuu niin sanottu nimikonflikti (name conflict), joka estää ohjelman kääntämisen. 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ä. Samannimisten muuttujien käyttö operaatiossa ei ole suositeltavaa, koska nimen jakavat muuttujat on helppo sekoittaa keskenään. 15.13 15.14 Nimikonflikti operaation sisällä // Toisilleen näkyvät x-muuttujat aiheuttavat nimikonfliktin. public class Lohko4 { // Esittely pääohjelman lohkossa. if (x == 0) { // Esittely if-lauseen lohkossa ei onnistu, // koska operaation lohkossa on esitelty // samanniminen muuttuja ennen if-lohkoa! Lohko4.java:10: x is already defined in main(java.lang.string[]) ^ Vältetty nimikonflikti // Kaksi x-muuttujaa mahtuu olemaan, koska vain yksi elää kerrallaan. public class Lohko5 { 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). 15.15 15.16

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. Koodia vaikeampi seurata. Ohjelmasta pitempi kuin tarpeen, koska alustaminen ei ole aina mahdollista esittelyn yhteydessä. Esittely käyttöpaikan lähellä. Modernimpi tapa. Koodi 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. 15.17