Ensimmäinen painos julkaistu nimellä Java-ohjelmointi Pro Training

Samankaltaiset tiedostot
Ensimmäinen painos julkaistu nimellä Java-ohjelmointi Pro Training

Ensimmäinen painos julkaistu nimellä Java-ohjelmointi Pro Training

19/20: Ikkuna olio-ohjelmoinnin maailmaan

P e d a c o d e ohjelmointikoulutus verkossa

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Ensimmäinen painos julkaistu nimellä Java-ohjelmointi Pro Training

15. Ohjelmoinnin tekniikkaa 15.1

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

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Algoritmit 1. Luento 3 Ti Timo Männikkö

15. Ohjelmoinnin tekniikkaa 15.1

16. Javan omat luokat 16.1

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

9/20: Puhu mun stdinille

7/20: Paketti kasassa ensimmäistä kertaa

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

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

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

8/20: Luokat, oliot ja APIt

5/20: Algoritmirakenteita III

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

7. Oliot ja viitteet 7.1

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

Rajapinta (interface)

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

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

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

Sopimuspohjainen olio-ohjelmointi

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

ULLA SANNIKKA. SENIORIN TIETOKONEOPAS Windows 10

HOJ J2EE & EJB & SOAP &...

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

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

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

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

Ohjelmoinnin perusteet Y Python

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

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

17/20: Keittokirja IV

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

P e d a c o d e ohjelmointikoulutus verkossa

1. Omat operaatiot 1.1

Ehto- ja toistolauseet

Ohjelmistotuotanto vs. muut insinööritieteet. (Usein näennäinen) luotettavuus ja edullisuus

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

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

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Listarakenne (ArrayList-luokka)

Paula Niemi SISÄINEN TARKASTUS KÄYTÄNNÖSSÄ

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

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Ohjelmoinnin perusteet Y Python

1. Olio-ohjelmointi 1.1

A TIETORAKENTEET JA ALGORITMIT

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

Groovy. Samuli Haverinen, Aki Hänninen. 19. marraskuuta 2015

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

13/20: Kierrätys kannattaa koodaamisessakin

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

11/20: Konepelti auki

Java kahdessa tunnissa. Jyry Suvilehto

P e d a c o d e ohjelmointikoulutus verkossa

C# 3.0:n uudet ominaisuudet Language Integrated Query...45

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

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Suunnitteluvaihe prosessissa

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

HSMT J2EE & EJB & SOAP &...

12/20: Bitit talteen

Olio-ohjelmointi Syntaksikokoelma

12 Mallit (Templates)

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

Järjestelmäarkkitehtuuri (TK081702) Järjestelmäarkkitehtuuri. Järjestelmäarkkitehtuuri

Ohjelmointi 1 Taulukot ja merkkijonot

Helia Ohjelmointitaito Tuomas Kaipainen Mermit Business Applications Oy Mermit Business Applications

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

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Ohjelmoinnin perusteet Y Python

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

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

C-ohjelmointikielen perusteet, osa 1

Ohjelmoinnin perusteet Y Python

811120P Diskreetit rakenteet

Erlang. Miika Heinonen ja Lassi Uosukainen (Group 92) TIE Principles of Programming Languages Seminaariessee. Yleistä

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

815338A Ohjelmointikielten periaatteet

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

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

Tietokannat II -kurssin harjoitustyö

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

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

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

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

Transkriptio:

Talentum Helsinki 2015

9., uudistettu painos Ensimmäinen painos julkaistu nimellä Java-ohjelmointi Pro Training 2015 Talentum Media Oy ja tekijät Kansi: Outi Pallari Taitto: Sirpa Puntti ISBN 978-952-14-2520-2 ISBN 978-952-14-2632-2 (sähkökirja) ISBN 978-952-14-2521-9 (verkkokirja) BALTO print, Liettua 2015 Palaute kirjasta: www.talentumshop.fi

Sisällys Esipuhe 5 1 Johdanto Javaan 19 1.1 Taustaa 19 1.2 JavaScript ja Ajax 20 1.3 Java ja C/C++ 21 1.4 Javan ominaisuuksia pähkinänkuoressa 22 1.5 Javan kehittyminen 23 2 Ohjelmoinnin historiasta 27 2.1 Ohjelmointikielten historiasta 28 2.2 Oliokielten historiasta 31 3 Ensimmäiset ohjelmat 33 3.1 Ohjelman kirjoittaminen ja kääntäminen 33 3.2 Ensimmäinen sovellus 36 3.2.1 Ohjelmakoodin kirjoittaminen 36 3.2.2 Koodin rakenne 37 3.2.3 Välikielelle kääntäminen 39 3.2.4 Sovelluksen ajaminen 39 3.3 Työskentely Eclipsellä 40 3.3.1 Eclipseen tutustuminen 41 3.3.2 Ensimmäinen projekti 42 3.3.3 Sovellus Eclipsellä 45 3.4 Tehtäviä 47 4 Olioperustainen ohjelman kehittäminen 48 4.1 Johdatus olioperustaiseen ohjelman kehittämiseen 49 4.2 Esitutkimus 51 4.3 Vaatimusanalyysi 53 4.3.1 Käyttötapaukset 53 4.3.2 Luokkien ja attribuuttien tunnistaminen 56 4.3.3 Tietohakemisto 57 11

JAVA-OHJELMOINTI 4.3.4 Assosiaatiot 59 4.3.5 Luokkakaavio 60 4.4 Järjestelmäsuunnittelu 65 4.4.1 Arkkitehtuuri 65 4.4.2 Suunnittelumallit 66 4.5 Oliosuunnittelu 70 4.5.1 Luokkien toimintojen määrittäminen 70 4.5.2 Assosiaatioiden tarkastelu ja suunnittelu 72 4.5.3 Luokkakaavion viimeistely 73 4.5.4 Algoritmien suunnittelu 75 4.6 Toteutuksen kautta ylläpitoon 78 4.6.1 Toteutus ja testaus 78 4.6.2 Käyttöönotto ja ylläpito 78 4.7 Tehtäviä 79 5 Luokat ja oliot 80 5.1 Olio-ohjelmoinnin peruskäsitteitä 80 5.2 Luokkien määrittely 82 5.3 Tunnukset ja Javan avainsanat 84 5.4 Muuttujat ja attribuutit 86 5.4.1 Muuttujien määrittely ja tietotyypit 87 5.4.2 Muuttujien arvojen tulostaminen 93 5.4.3 Muotoiltu tulostus 94 5.4.4 Tyyppimuunnokset primitiivityyppien välillä 98 5.4.5 Literaalit ja lukujärjestelmät 99 5.4.6 Muunnokset lukujärjestelmien välillä 101 5.4.7 Attribuuttien määrittely 102 5.4.8 Operaattorit 105 5.4.9 Käyttäjän kanssa keskusteleva ohjelma 112 5.5 Metodit 116 5.5.1 Metodien määrittely 117 5.5.2 Metodien kutsuminen 120 5.5.3 Metodien kuormittaminen 123 5.6 Olioiden elinkaari 126 5.6.1 Olioiden luonti 127 5.6.2 Olion tilan alustaminen 127 5.6.3 Olioihin viittaavat muuttujat 128 5.6.4 Olion metodien kutsuminen 130 5.6.5 Olioiden tuhoaminen 132 5.6.6 Muistinhallinta 134 5.7 JavaBeans 134 5.8 Koodin muotoilusta 135 5.9 Luokkakaavion luokan toteuttaminen 137 5.10 Tehtäviä 143 12

SISÄLLYS 6 Kontrollirakenteet 147 6.1 Logiikkaa ja ehtolausekkeita 147 6.1.1 Yhtäsuuruusoperaattorit 148 6.1.2 Vertailuoperaattorit 149 6.1.3 Loogiset operaattorit 150 6.2 Valintalauseet 152 6.2.1 if-lauseet 152 6.2.2 Ehto-operaattori 161 6.2.3 switch-lause 162 6.3 Toistolauseet 163 6.3.1 while 164 6.3.2 do while 168 6.3.3 for 172 6.3.4 Parannettu for-silmukka 175 6.3.5 Yleisiä virheitä 177 6.4 Hyppylauseet 178 6.4.1 return-lause 179 6.4.2 break-lause 181 6.4.3 continue-lause 181 6.5 Tehtäviä 182 7 Merkit ja merkkijonot 187 7.1 Merkit ja merkistöt 187 7.2 Merkkijonot ja String-luokka 189 7.3 Merkkien ja merkkijonojen käsittely 195 7.3.1 Character-luokka 196 7.3.2 StringBuilder 197 7.3.3 StringTokenizer 202 7.4 Merkkijonojen muuntaminen primitiivityypeiksi 204 7.5 Säännölliset lausekkeet 205 7.5.1 Merkkijoukot ja toisto 207 7.5.2 Javan regexp API 208 7.5.3 Rajahahmot ja tunnistajan ahneus 212 7.6 Tehtäviä 214 8 Taulukot 217 8.1 Taulukkoon viittaavat muuttujat ja taulukon luonti 217 8.2 Taulukon alkioon viittaaminen 219 8.3 Taulukko metodin parametrina 222 8.4 Taulukon sisällön kopiointi toiseen taulukkoon 224 8.5 2-ulotteiset taulukot 225 8.6 Vaihteleva määrä metodin parametreja 227 8.7 Esimerkki: ajat järjestyksessä 230 8.8 Tehtäviä 232 13

JAVA-OHJELMOINTI 9 Javan perusteet 235 9.1 Luokkakohtaiset piirteet 235 9.1.1 Vakioarvot ja vakiomuuttujat 238 9.1.2 Tehdasmetodit ja ainokaiset 241 9.2 Pakkaukset ja luokkien tuonti 242 9.3 Luokkakohtaisten piirteiden tuonti 246 9.4 Kääreluokat ja primitiivityyppien automaattinen käärintä 247 9.5 Liittymät 249 9.6 Periytyminen 254 9.6.1 Abstraktit luokat 260 9.6.2 Dynaaminen sidonta ja monimuotoisuus 267 9.6.3 Rakentajien kutsuminen 269 9.6.4 Luokan muiden rakentajien kutsuminen 270 9.6.5 this ja super 272 9.6.6 Object-luokan metodit 273 9.7 Tyyppimuunnokset ja olion tyypin tutkiminen 274 9.8 Geneeriset tyypit 276 9.8.1 Geneeristen tyyppien määrittely 277 9.8.2 Geneeristen tyyppien alityypitys ja jokerityyppi 279 9.8.3 Uuden ja vanhan koodin yhteiskäyttö 281 9.9 Sisäluokat 282 9.10 Lueteltu tietotyyppi 286 9.11 Rekursio 289 9.12 Metaluokka Class 289 9.13 Sivuhuomautukset 292 9.14 Luokkien paketointi 293 9.15 Tehtäviä 295 10 Kokoelmat olioiden säilyttäjät 298 10.1 Tiedon lajittelu 298 10.1.1 Kuplalajittelu 299 10.1.2 Valintalajittelu 299 10.1.3 Lisäyslajittelu 300 10.1.4 Lomituslajittelu 301 10.1.5 Pikalajittelu 302 10.2 Tiedon haku 303 10.3 Algoritmien vaativuus 304 10.4 Yleisiä tietorakenteita 305 10.5 Kokoelmat ja olioiden vertailu 308 10.5.1 Object.equals 308 10.5.2 Object.hashCode 311 10.5.3 Comparable 313 10.5.4 Comparator 315 10.6 Kokoelmakehys 317 14

SISÄLLYS 10.7 Yleinen kokoelma Collection 319 10.8 Iteraattori Iterator 321 10.9 Joukot HashSet ja TreeSet 324 10.10 Javan listarakenteet ArrayList ja LinkedList 326 10.11 Avainnetut kokoelmat HashMap ja TreeMap 330 10.12 Yhteenveto kokoelmista 333 10.13 Kokoelmakehyksen algoritmit 336 10.14 Luokkakaavion viittausten toteuttaminen 339 10.15 Ohjelman suorituskyvyn parantaminen 343 10.15.1 Pullonkaulojen tunnistaminen 343 10.15.2 Yleisiä ohjeita 344 10.15.3 Turhien olioiden välttäminen 346 10.15.4 Merkkijonojen käsittely 348 10.15.5 Vältä muistin turhaa varaamista 350 10.15.6 Välimuistit ja resurssivarannot 351 10.16 Tehtäviä 352 11 Funktionaalinen ohjelmointi 354 11.1 Lambda-lausekkeet 354 11.2 Metodeihin viittaaminen 357 11.3 Javan funktionaaliset liittymät 359 11.4 Stream API 361 11.4.1 Virran luominen 362 11.4.2 Liukuhihnan määrittely 363 11.4.3 Päättävät operaatiot 366 12 Kun jokin menee kuitenkin pieleen poikkeukset 370 12.1 Erilaisia poikkeuksia 370 12.2 Poikkeuksen aiheuttajan paikallistaminen 372 12.3 Poikkeustilanteen käsittely try, catch ja finally 374 12.4 Resurssit sulkeva try 377 12.5 Käsiteltävät poikkeukset 378 12.6 Omat poikkeukset ja poikkeuksen aiheuttaminen 379 12.7 Ohjeita poikkeusten käyttämiseen 382 12.8 Tehtäviä 384 13 Testaus ja virheiden etsintä 386 13.1 Käännösaikaiset virheet 387 13.2 Ajonaikaiset ja loogiset virheet bugit 388 13.3 Virheiden etsintää yksikkötestein 390 13.4 Testien kattavuus 396 13.5 Assert ja sopimuspohjainen suunnittelu 401 13.6 Tehtäviä 403 15

JAVA-OHJELMOINTI 14 Mistä apua? 404 14.1 JDK:n dokumentaatio 404 14.2 Omien luokkien dokumentointi 406 14.3 Tehtäviä 410 15 Graafiset käyttöliittymät 411 15.1 Tapahtumapohjainen ohjelmointi 412 15.2 Ensimmäinen ohjelma 414 15.3 Tapahtumien käsittely 415 15.4 JavaFX-komponentit 420 15.5 Käyttöliittymän ohjelmointi Eclipsellä 423 15.6 Näytölle piirtäminen 425 15.7 Tehtäviä 428 16 Ohjelman kansainvälistäminen 429 16.1 Kielen ja maan määrittely 429 16.2 Merkkijonojen eristäminen 431 16.3 Tulostuksen muotoilu 435 16.4 Merkkijonojen vertailu 440 16.5 Esimerkki: Lintubongari 440 16.6 Tehtäviä 442 17 Tehtävien samanaikainen suorittaminen säikeet 443 17.1 Johdatus rinnakkaisuuteen 443 17.2 Prosessit ja säikeet 445 17.3 Säikeiden suorituksen hallinta 448 17.4 Kommunikointi 453 17.5 Toiminnan tahdistaminen 460 17.6 Rinnakkaisuuden sudenkuopat 464 17.7 Tehtävien rinnakkaistaminen ja ajastaminen 468 17.8 Tehtäviä 471 18 Tiedostot ja tietovirrat 473 18.1 Tietovirtaan kirjoittaminen 473 18.2 Tiedostosta lukeminen 477 18.3 Muita tietovirtoja 478 18.4 Olioiden tallentaminen ja lukeminen 480 18.5 Tiedostojen käsittelyä 481 18.6 Tehtäviä 485 19 Tietoliikenne verkossa 487 19.1 Johdatus tietoliikenteeseen 487 19.2 Tietoliikenne HTTP-protokollaa käyttäen 490 16

SISÄLLYS 19.3 Asiakas ja palvelin 491 19.4 Rupattelusovellus 494 19.5 Tehtäviä 501 20 Järjestelmäohjelmointi 503 20.1 Sovelluksen parametrit 503 20.2 System ja Runtime 505 20.3 Tehtäviä 509 21 Tietokantojen käyttö 510 21.1 Johdatus tietokantoihin 510 21.2 JDBC yhteys tietokantaan Javalla 513 21.3 Johdatus SQL-kieleen 514 21.4 Apache Derby 518 21.5 Tietokantayhteyden muodostaminen 518 21.6 Tietokannan tietojen muuttaminen 521 21.7 Tietojen hakeminen kannasta 523 21.8 Valmistellut kyselyt 525 21.9 SQL ja sovelluksen tietoturva 526 21.10 Tapahtumat 527 21.11 Taulujen väliset liitokset 530 21.12 Java Persistence API 532 21.12.1 Sovelluksen arkkitehtuuri 535 21.12.2 Entiteettiolioiden suhde tietokantaan 537 21.12.3 Optimistinen lukitus 542 21.12.4 Olioiden etsiminen kyselyin 544 21.12.5 Suhteet 547 21.13 Tehtäviä 551 22 Web-sovellukset 552 22.1 Johdatus HTTP-protokollaan 553 22.2 Web-sovelluksen luominen 554 22.3 Johdatus palvelinsovelmiin 556 22.4 Ensimmäinen palvelinsovelma 557 22.5 Pyynnön otsikon tiedot 560 22.6 POST-viestin käsittely ja parametrit 561 22.7 Evästeet 565 22.8 Istunnot 566 22.9 Pyynnön käsittelyn delegointi 571 22.10 Tiedostojen vastaanottaminen 572 22.11 Tietokannan käyttö palvelinsovelmassa 574 22.12 JavaServer Faces 577 22.13 Expression Language 579 22.14 JSTL-tagikirjasto 580 17

JAVA-OHJELMOINTI 22.15 JSF-esimerkki 582 22.16 Tehtäviä 588 23 Java Enterprise Edition 589 23.1 Enterprise JavaBeans 591 23.1.1 Session Beans 591 23.1.2 Message Driven Beans 593 23.1.3 Ajoympäristön palvelut 595 23.2 Web Services Www-sovelluspalvelut 597 23.2.1 Www-sovelluspalvelujen standardit 598 23.2.2 Www-sovelluspalvelun toteuttaminen 599 23.2.3 Www-sovelluspalvelun käyttäminen 601 24 Työkalupakki 603 24.1 Maven 603 24.2 Versionhallinta 605 24.3 Jenkins 606 24.4 Koodin analysointi 607 24.5 Avoimen lähdekoodin luokkakirjastot 607 24.6 Scala & Groovy 608 25 Viimeinen luku 610 25.1 Javan juuret 610 25.2 Javan tulevaisuus 611 25.3 Loppulause 612 18