Osio2, olio-ohjelmointi: Luokkien ja olioiden käyttäminen Jukka Juslin



Samankaltaiset tiedostot
Taulukot. Jukka Harju, Jukka Juslin

20. Javan omat luokat 20.1

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

17. Javan omat luokat 17.1

Olio-ohjelmointi Javalla

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

17. Javan omat luokat 17.1

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

Osio2: Taulukot Jukka Juslin

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

16. Javan omat luokat 16.1

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

7/20: Paketti kasassa ensimmäistä kertaa

Java-kielen perusteet

Metodien tekeminen Javalla

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

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

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

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Ohjelmoinnin jatkokurssi, kurssikoe

ict02d Osio2- luento 3 Olio-ohjelmointi: Luokkien kirjoittaminen

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Mikä yhteyssuhde on?

Java-kielen perusteet

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

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

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

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

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

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

1. Omat operaatiot 1.1

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

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

UML ja luokkien väliset suhteet

Java-kielen perusteita

Java-kielen perusteet

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

7. Oliot ja viitteet 7.1

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

7. Näytölle tulostaminen 7.1

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

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

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

Rajapinta (interface)

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

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

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

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

2. Olio-ohjelmoinista lyhyesti 2.1

Listarakenne (ArrayList-luokka)

Java kahdessa tunnissa. Jyry Suvilehto

ITKP102 Ohjelmointi 1 (6 op)

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

Luokan muodostimet (Constructors)

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

Java-API, rajapinnat, poikkeukset, UML,...

9. Periytyminen Javassa 9.1

1 Tehtävän kuvaus ja analysointi

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

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

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

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

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

9. Periytyminen Javassa 9.1

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

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

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

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

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

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

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

15. Ohjelmoinnin tekniikkaa 15.1

Oliosuunnittelu ja luokkakohtaiset komponentit

Javan perusteita. Janne Käki

1. Olio-ohjelmointi 1.1

Luokan sisällä on lista

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi.

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Tietotyypit ja lausekkeet. Lewis & Loftus & Jukka Juslin 1

14. Poikkeukset 14.1

4. Olio-ohjelmoinista lyhyesti 4.1

19. Olio-ohjelmointia Javalla 19.1

ELM GROUP 04. Teemu Laakso Henrik Talarmo

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

Osoitin ja viittaus C++:ssa

Tietokannat II -kurssin harjoitustyö

812347A Olio-ohjelmointi, X Reflektiivisyys

Ohjelmoinnin perusteet, kurssikoe

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

ITKP102 Ohjelmointi 1 (6 op)

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

13 Operaattoreiden ylimäärittelyjä

Transkriptio:

Osio2, olio-ohjelmointi: Luokkien ja olioiden käyttäminen Jukka Juslin Jukka Juslin 1

Luokkien ja olioiden käyttäminen Voimme luoda mielenkiintoisia ohjelmia käyttämällä Java API:sta jo löytyviä luokkia ja tekemällä niistä olioita Seuraavassa tutustumme näihin: Olion luonti ja olioon viittaaminen String luokasta lisää ja sen metodeista Javan standardi luokkakirjasto Random ja Math luokat Wrapper luokat Jukka Juslin 2

Missä ollaan? Olioiden luonti String luokka Paketit Wrapper luokat Jukka Juslin 3

Olioiden luonti Muuttuja pitää sisällään joko primitiivityyppiä tai viittausta olioon Luokan nimeä voidaan käyttää tyyppinä kun tehdään tietyn luokan tyyppinen attribuutti String nimi; Tämä lauseke ei luo oliota Olion viittausmuuttuja sisältää osoitteenolioon Olio itse on luotava erikseen (kun sellainen halutaan luoda) Jukka Juslin 4

Olioiden luonti Yleisesti käytämme new operaattoria olioden luomiseen nimi = new String ( Jukan JavaKirja ); Tämä kutsuu Stringin muodostinta (konstruktoria, constructor), joka on metodi, joka luo olion annetuilla arvoilla Olion luontia kutsutaan instantioinniksi Olio on tietyn luokan instanssi Jukka Juslin 5

Oletusmuodostimista eli konstruktoreista (constructors) Seuraavassa on esimerkki luokasta, jolla on oletuskonstruktori: public class JukanInttiTaulukko { private int elementtimaara; private int taulukko[] = new int[25]; } public JukanInttiTaulukko() { elementtimaara = 25; } Jukka Juslin 6

Oletuskonstruktoreista Kun uusi String-luokan olio luotiin kaksi kalvoa sitten, silloin tultiin new-avainsanan myötä kutsuneeksi Stringluokan konstruktoria Konstruktori on erityinen metodi, jolla ei ole palautustyyppiä (ei edes void, eli ei mitään) Jos konstruktorille erehtyy laittamaan palautustyypin konstruktori käyttäytyy kuten metodi, esimerkiksi jos olisi olemassa Math.Math(luku) metodi, jonka oli tarkoitus olla konstruktori Jukka Juslin 7

UML luokkakaavioista JukanInttiTaulukko-luokalle UML luokkakaavio näyttäisi seuraavalta: Miinusmerkki tarkoittaa private näkyvyyttä! Luokan nimet Attribuutit Plusmerkki tarkoittaa public näkyvyyttä! Palautustyypit (void eli ei mitään) Set-void: SEVO sääntö Riippuvuus koostumussuhde Metodit Jukka Juslin 8

JukanInttiTaulukon lähdekoodi JukanInttiTaulukon lähdekoodiin ja sen testaamiseen käytetyt luokat voit ladata tästä hakemistosta: http://myy.helia.fi/~ict02d/luennot/koodit/jukaninttitaulukko.java http://myy.helia.fi/~ict02d/luennot/koodit/taulukkotesteri.java http://myy.helia.fi/~ict02d/luennot/koodit/pvm.java Jukka Juslin 9

Luokkakaavion merkityksestä Luokkakaavio on hyödyllinen väline kuvattaessa esimerkiksi Java-ohjelmien ns. staattista eli pysähtynyttä rakennekuvaa luokkakaavio ei siis kuvaa ohjelman dynaamista toimintaa Luokkakaavio mahdollistaa ohjelman helpomman hahmottamisen graafisen esitystapansa vuoksi! Hyvä suunnitteluväline Useat nykytyökalut, esim. MS Visual Studio 2005 ja perinteisesti Rational Rose tuottavat luokkakaavioita automaattisesti Java-ohjelmakoodista Näistä sinun ei tarvitse välittää tällä kurssilla Jukka Juslin 10

Metodien kutsuminen Kun olio on luotu, voidaan käyttää piste (.) operaattoria kutsumaan yhtä olion metodeista pituus = nimi.length(); Metodi voi palauttaa arvon, jota voidaan käyttää sijoituksessa tai parametrinä esim. Toiselle metodille Metodin kutsumista voidaan ajatella niin, että pyydämme oliota suorittamaan tietyn palvelun (pyydämme pankkitiliämme antamaan rahaa yms.) Jukka Juslin 11

tostring() metodi Luokkaan voidaan (ja kannattaa) toteuttaa metodi nimeltään tostring() Esim: public String tostring() { String out = etunimi + + sukunimi; return(kokonimi) } tostring metodin merkitys on, että kun kutsumme käyttävästä luokasta esimerkiksi System.out.println(olionNimi); -> saamme tulostettua ko. olion sisältämät tiedot -> mitä tulostuu esim. Nimi oliosta ilman tostringiä? Jukka Juslin 12

this avainsana Kun java-luokkia tehdään, usein on tarpeen tehdä set-metodi ko. luokalle: Esim: public class Nimi { private etunimi; private sukunimi; } public void setnimi(string etunimi, String sukunimi) { this.etunimi = etunimi; this.sukunimi = sukunimi; } Tässä Java ei pysty erottelemaan parametrinä tullutta String etunimeä ja String sukunimeä: this auttaa ja Java Tietää kyseessä olevan private etunimi ja sukunimi, jotka tehdään luokan alussa. Jukka Juslin 13

Viittaukset Huomaa, että primitiivityyppi sisältää itse arvon mutta muusta luokasta tehty olio sisältää olion osoitteen Olioviittaus voidaan ajatella kuin osoittimena olion paikkaan (käytännössä on ns. Oid tunnus) Usein mieluummin kuvaamme viittausta mieluummin graafisesti, kuin käytämme muistiosoitteita kuvaamaan olion sijaintia num1 38 nimi1 Bill Gates" Jukka Juslin 14

Muuttujien sijoitus (=) Sijoituksessa otetaan kopio arvosta ja sijoitetaan se muuttujaan Tavallaan Java kielen virhe käyttää = merkkiä sijoittamista merkitsemään, esim =: olisi saattanut olla parempi. Mutta: That s Life. Java kieli perustuu syntaksiltaan eli kielen sanoiltaan C-ohjelmointikieleen josta ko. asiat ovat jääneet. Primitiivityypeille: Ennen: num1 38 num2 96 num2 = num1; Jälkeen: num1 38 num2 38 Jukka Juslin 15

Viittausmuuttuja (reference assignment) Olioviittauksille, sijoitus kopioi osoitteen (OID) eikä itse oliota: Ennen: nimi1 nimi2 Bill Gates" Paul Allen" nimi2 = nimi1; Jälkeen: nimi1 nimi2 Bill Gates" Eikä tässä vielä kaikki! Jukka Juslin 16

Aliakset Kahta tai useampaa viittausta, jotka viittavaat samaan olioon kutsutaan toistensa aliaksiksi Se luo mielenkiintoisen tilanteen: yhteen olioon päästään käsiksi käyttäen erilaisia viittausmuuttujia Aliakset voivat olla hyödyllisiä, mutta niitä pitää hallita erittäin viisaasti Olion muuttaminen yhden viittauksen kautta päivittää olion näkymään uudella tavalla kaikista aliaksista käsin. Kyseessä on aina yksi ja sama olio, eikä sen kopiot Jukka Juslin 17

Roskien keruu (garbage collection) Kun olioon ei enää ole viittauksia, siihen ei enää päästä käsiksi ohjelman kautta Näin oliosta tule hyödytön, ja siksi sitä kutsutaan roskaksi (garbage) Java suorittaa automaattista roskienkeruuta ajoittain, palauttaen olion käyttämän muistitilan järjestelmän myöhempään käyttöön Muissa ohjelmointikielissä ohjelmoija on vastuussa roskien keruun suorittamisesta Jukka Juslin 18

Missä ollaan? Olioiden luominen String luokka Paketit EXTRA: Tulosteen muokkaaminen EXTRA: Enumeroidut tyypit Wrapper luokat Jukka Juslin 19

String luokka Koska merkkijonot ovat niin yleisiä, meidän ei tarvitse käyttää new-operaattoria luodessamme String oliota kirja = "Javan perusteet"; Tämä erikoissyntaksi (eli kirjoitusmuoto) koskee ainoastaan merkkijonoja (Stringejä) Jokainen string literaali (laitettuna lainausmerkkeihin) esittää String oliota Jukka Juslin 20

String metodit Kun String olio on luotu, sen arvoa eikä pituutta ei voi muuttaa Siksi sanomme, että String luokan olio on pysyvä (immutable). Eli mutaattoreilla eli settereillä ei tälläisia voi muutella. Kuitenkin, monet String luokan metodit palauttavat uusia String olioita, jotka ovat muutettuja versiota alkuperäisestä Katso lista String metodeista Java API:sta (Application Programming Interface): http://java.sun.com/j2se/1.5.0/docs/api/index.html Jukka Juslin 21

String indeksit Joskus on hyödyllistä viitata tiettyyn merkkiin Stringin sisällä Tämä voidaan tehdä määrittämällä merkin numeerinen indeksi Indeksit alkavat nollasta jokaisessa stringissä Stringissä Moro", merkki M' on indeksissä 0 ja merkki 'o' is at indeksissä 1 ja 3 Jukka Juslin 22

Missä ollaan? Olioiden luominen String luokka Paketit EXTRA:Tulosteen muotoileminen EXTRA:Enumeroidut tyypit Wrapper luokat Jukka Juslin 23

Luokka (Class) kirjastot Luokkakirjasto (class library) on kokoelma luokkia, joita voimme käyttää kun kehitämme ohjelmia Javan standardi luokkakirjasto on osa mitä tahansa Java kehitysympäristöä http://java.sun.com/j2se/1.5.0/docs/api/index.html Luokkakirjaston luokat eivät ole osa Java-kielen ydintä, mutta jo yksinkertainenkin ohjelma luottaa ko. Luokkiin vahvasti Useita luokkia on jo käytetty System, String (esimerkki hyödyllisestä luokasta on uusi Scanner luokka). Nämä kaikki ovat osa Javan standardi luokkakirjastoa Muihin luokkakirjastoihin voidaan päästä käsiksi kolmannen osapuolen vendorien kautta (alihankkijat), tai voit luoda oman peruskirjastosi itse! Jukka Juslin 24

Paketit Java standardin luokkakirjaston luokat on organisoitu paketeiksi paketeiksi. Voit kysyä harjoituksissa, kuinka voit itse tehdä ko. paketteja. Muutamia paketteja Javan standardissa luokkakirjastossa ovat: Paketti java.lang java.applet java.awt javax.swing java.net java.util javax.xml.parsers Tarkoitus Yleinen tuki Appletit www:tä varten Grafiikka ja GUI:t Lisää GUI toiminnallisuutta Verkkoviestintä Työkaluja XML tiedoston käsittely Jukka Juslin 25

import lause Kun haluat käyttää luokkaa paketista, voit aina käyttää luokan täydellistä nimeä (fully qualified name). Pitkien nimien kirjoittaminen moneen kertaan on vain aika työlästä. Esimerkki: java.util.scanner Tai voit ns. importata eli tuoda luokan aivan ohjelman alussa ja sitten käyttää vain luokan nimeä: import java.util.scanner; Jos haluat tuoda kaikki luokat tietystä paketista, voit käyttää * villiäkorttia (wildcard) import java.util.*; Jukka Juslin 26

import lause Kaikki luokat java.lang paketista tuodaan automaattisesti kaikkiin ohjelmiin Aivan kuin kaikki ohjelmat näkymättömästi sisältäisivät rivin: import java.lang.*; Tämän vuoksi meidän ei täytynyt tuoda System tai String luokkia aikaisemmissa ohjelmissa Scanner luokka esimerkiksi, toisaalta on osa JDK 1.5:den java.util pakettia ja siksi se pitää tuoda kirjoittamalla ko. import rivi Jukka Juslin 27

Random luokka Random luokka on osa java.util pakettia Se tarjoaa metodeita luoda satunnaislukuja (todella satunnaisia) Random olio suorittaa monimutkaisia laskutoimituksia perustuen siemenarvoon (seed value) tuottaakseen virran lukuja, jotka näyttävät satunnaisilta Jukka Juslin 28

Math luokka Math luokka on osa java.lang pakettia Math luokka sisältää metodit, jotka suorittavat muutamia matemaattisia funktioita Näihin sisältyvät: Absoluuttisen arvon laskeminen Neliöjuuri Eksponentit (potenssiin laskeminen) Trigonometriset funktiot Jukka Juslin 29

Math luokka Math luokan metodit ovat staattisia metodeita (kutsutaan myös luokkametodeiksi) Staattisia metodeja voidaan kutsua luokan nimen kautta, Math luokan oliota ei tarvitse ensin tehdä! arvo = Math.cos(90) + Math.sqrt(delta); Staattisia metodeja käsitellään myöhemmin opintojaksolla lisää Jukka Juslin 30

Missä ollaan? Olioiden luominen String luokka Paketit EXTRA:Tulosteen muotoilu EXTRA: Enumeroidut tyypit Wrapper luokat Jukka Juslin 31

Tulosteen muotoilu On usein tarpeen muotoilla arvoja niin, että ne voidaan esittää sopivalla tavalla. Ajatellaan esimerkiksi eurosumman tulostamista double muuttujasta. Tässä olisi toivottavaa että desimaaleja esitettäisiin vain kaksi (eli sentit) Javan standardi luokkakirjasto sisältää luokkia, jotka tarjoavat tulosteen muotoiluun (formatting) keinoja NumberFormat luokka muotoilee lukuja automaattisesti esimerkiksi valuutaksi (rahaksi) tai prosenteiksi DecimalFormat luokka mahdollistaa arvojen muotoilun perustuen vapaavalintaiseen patterniin (malliin) Molemmat ovat osa java.text pakettia Jukka Juslin 32

Tulosteen muotoilu NumberFormat luokalla on staattiset metodit, jotka palauttavat muotoillun olion: getcurrencyinstance() getpercentinstance() Jokaisella formatter oliolla on metodi nimeltään format, joka palauttaa stringin halutussa muodossa ja halutulla sisällöllä Jukka Juslin 33

Tulosteen muotoilu DecimalFormat luokkaa voidaan käyttää liukuluvun (double) muotoilemiseen monella tavoin Esimerkiksi, voit määritellä että numero pitää katkaista kolmen desimaalin tarkkuuteen (ota huomioon pyöristäminen ) DecimalFormat luokan konstruktori ottaa stringin parametrinä, joka esittää mallia (patternia) johon muokattu olio halutaan Jukka Juslin 34

Missä ollaan? Olioiden luonti String luokka Paketit EXTRA: Tulosteen muotoileminen EXTRA: Enumeroidut tyypit Wrapper luokat Jukka Juslin 35

Enumeroidut tyypit Java mahdollistaa sinulle määrittää enumeroidun tyypin, jota voidaan sitten käyttää muuttujien esittelemisessä (käytössä) Enumeroitu tyyppi luo kaikki mahdolliset arvot tämän tyyppiselle muuttujalle Arvot ovat tunnisteita, jotka Sinä valitset tunnistamaan muutujan eri tiloja Seuraavat määritteet luovat enumeroidun tyypin nimeltään Vuodenaika enum Vuodenaika {talvi, kevät, kesä, syksy}; Mikä tahansa määrä arvoja voidaan listata Miten määrittelisit Kurssi enum-muutujan, jossa on ict02d ja ict01d? Jukka Juslin 36

Enumeroidut tyypit Kun tyyppi on määritetty, ko. Tyypin mukainen muuttuja voidaan esitellä Vuodenaika vuodenaika; ja esim. vuodenaika voidaan sijoittaa tähän muuttujaan vuodenaika = Vuodenaika.syksy; Arvot määritellään käyttäen määrittelyssä enumeroidun tyypin nimeä Enumeroidut tyypit ovat tyyppiturvallisia (type-safe) vrt. Tilanne, jossa loppukäyttäjät ovat osaamattomia/huolimattomia ja antavat ohjelmalle yhdeltä merkiltään poikkeavaa syötettä (vertaa ict02d vs. ICT02D) et voi sijoittaa Enum-tyyppiin muuta kuin niitä joita on tyypin tekemisen yhteydessä lueteltu Enum. tyyppi vastaa siis hiukan esim. www-sivuilla olevia alasvetolistoja. Estää väärän syötteen tulemista ohjelmaan. Jukka Juslin 37

Järjestysluvut Sisäisesti, jokaisen enumeroidun tyypin arvo talletetaan integerinä, jota kutsutaan järjestysluvuksi (ordinal value) Ensimmäiselläl arvolla enumeroidussa tyypissä on järjestyslukuarvo 0, toisella 1, ja niin edelleen Kuitenkin, et voi sijoittaa numeerista arvoa enumeroituun tyyppiin, et vaikka se vastaisi järjestyslukua johon listassa numero laitettaisiin Jukka Juslin 38

Enumeroidut tyypit Enumeroidun tyypin määrittely on erityinen tyyppi luokasta, ja tässä jokainen muuttuja on olio (enumeroidun tyypi määrittelyn sisällä) ordinal metodi (järjestysluku) palauttaa olion järjestysluvun name metodi palauttaa tunnistimen (ns. avaimen) nimen, joka viittaa ko. arvoon Jukka Juslin 39

Missä ollaan? Olioiden luonti String luokka Paketit (vrt. Jar-paketit) EXTRA: Tulosteen muotoilu EXTRA: Enumeroidut tyypit Wrapper luokat Jukka Juslin 40

Wrapper luokat java.lang paketti sisältää wrapper luokkia jotka vastaavat kutakin primitiivityyppiä: Primitiivityypp i byte short int long float double char boolean void Wrapper luokka Byte Short Integer Long Float Double Character Boolean Void Jukka Juslin 41

Wrapper luokat Seuraava rivi luo Integer olion, joka esittää integerin (muuttujan tyyppiä int) 40 oliona Integer ikä = new Integer(40); Wrapper luokan oliota voidaan käyttää missä tahansa tilanteessa, kun primitiivityyppinen int-arvo ei riitä. Integerillä on laaja määrä metodeja, joita voi käyttää: http://java.sun.com/j2se/1.5.0/docs/api/index.html Esimerkiksi tietyssä oliossa voidaan säilyttää muutamaa Integer arvoa. Wrapper olio voi toimia tälläisenä säilönä (container), mutta Wrapper containeriin ei voi primitiivityyppisiä arvoa (kuten int) vaan intit pitäisi ilmaista Integerinä Jukka Juslin 42

Wrapper luokat Wrapper luokat sisältävät myös staattisia metodeja, jotka auttavat hallitsemaan luokan määrittämään tyyppiä Esimerkiksi Integer luokassa on metodi, jonka avulla Stringistä saadaan int arvo parsittua. Eli konvertoitua String int-tyyppiseksi arvoksi. Integer-luokka voidaan ajatella wrapper luokkana ja parseint on staattinen metodi. Integeriä ei siis tarvitse erikseen luoda vaan se on jo olemassa staattisena num = Integer.parseInt(str); Wrapper luokissa on myös usein hyödyllisiä vakioita, kuten seuraavasta huomaammel Esimerkiksi, Integer luokka sisältää MIN_VALUE ja MAX_VALUE vakiot, jotka pitävät muistissa pienintä ja suurinta int arvoa (katsotaan esimerkkinä Java APIA http://java.sun.com/j2se/1.5.0/docs/api/index.html) Jukka Juslin 43

Yhteenveto Tänään käsittelimme seuraavat asiat: Olion luonti ja olioviittaukset (object reference) String luokka ja sen metodit Java standardi luokkakirjasto (API: SUN www-sivut!) Random ja Math luokat EXTRA: Tulosteen muotoilu (JDK 1.5) EXTRA: enumeroidut tyypit Wrapper luokat Jukka Juslin 44