Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

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

Samankaltaiset esitykset


Esitys aiheesta: "Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Standardi- ja tietorakenneluokkia."— Esityksen transkriptio:

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

2 Standardi- ja tietorakenneluokkia Javan API, ArrayList  Ohjelmointirajapinta (Application Programming Interface, API) tarjoaa ohjelmistokehittäjille  luokkia  rajapintoja  Dokumentaatio Sun Microsystemsin sivuilla:  http://download.oracle.com/javase/1,5.0/docs/api/ → APIs http://download.oracle.com/javase/1,5.0/docs/api/  Dokumentaatio sisältää pakkausten ja niiden luokkien kuvauksen. Esim. pakkauksista:  java.lang sisältää kielen ytimen  javax.swing sisältää käyttöliittymäkomponentteja Vesa Ollikainen & Outi Grotenfelt220.9.2012

3 Esimerkki: java.lang.String-luokka  Luokka String  toteuttaa merkkijonotyypin  sisältää merkkijonojen käsittelyoperaatioita. Vesa Ollikainen & Outi Grotenfelt320.9.2012

4 Esimerkki: String-luokka  Esimerkissä metodit concat() ja toUpperCase() palauttavat viittaukset uusiin olioihin, jotka metodi luo. Vesa Ollikainen & Outi Grotenfelt420.9.2012 concat -metodin kutsu voitaisiin korvata + -operaattorilla. Kääntäjä muuntaa + -operaattorin sen toteuttaviksi metodikutsuiksi automaattisesti package testiprojekti; import java.util.*; public class Sanat { public static Scanner lukija = new Scanner(System.in); public static void main(String[] args) { String alkuosa, loppuosa, kokonaan; System.out.print("Anna alkuosa: "); alkuosa = lukija.nextLine(); System.out.print("Anna loppuosa: "); loppuosa = lukija.nextLine(); kokonaan = alkuosa.concat(loppuosa); System.out.println("Kokonaan: "+kokonaan); System.out.println("Pituus: "+kokonaan.length()); System.out.println("Isoilla: "+kokonaan.toUpperCase()); } run: Anna alkuosa: MunAlku Anna loppuosa: ToinenLoppu Kokonaan: MunAlkuToinenLoppu Pituus: 18 Isoilla: MUNALKUTOINENLOPPU BUILD SUCCESSFUL (total time: 13 seconds)

5 split() -metodi  String -luokan split() -metodi pilkkoo merkkijonon osiin erotinlausekkeen esiintymien kohdalta.  Erotinlauseke ilmaistaan ns. säännöllisenä lausekkeena.  Säännöllisissä lausekkeissa:  piste (. )täsmää mihin tahansa merkkiin  hakasulkeissa ( [] ) esitetään vaihtoehtoiset merkit  asteriski ( * ) täsmää mihin tahansa merkkijonoon. Vesa Ollikainen & Outi Grotenfelt520.9.2012 Voidaan tehdä myös vanhemman StringTokenizer -luokan avulla.

6 Esimerkki: split()  Merkkijono jono jaetaan alijonoihin kaksoispisteen kohdalta.  Alijonot tallentuvat taulukkoon pilkotut.  Erotinmerkit eivät tule mukaan taulukkoon. Vesa Ollikainen & Outi Grotenfelt620.9.2012 public class Pilkkominen { public static void main(String[] args) { String jono = "Ville:Virtanen:Jokitie 2 A 4:45100:Kouvola"; String pilkotut[]; pilkotut = jono.split(":"); for (int i=0; i<pilkotut.length; i++) System.out.println(pilkotut[i]); } run: Ville Virtanen Jokitie 2 A 4 45100 Kouvola BUILD SUCCESSFUL (total time: 1 seconds)

7 Esimerkki 2: split()  Tässä erottimena on jokin kirjaimista X, Y ja Z sekä sen jälkeen mitkä tahansa kaksi merkkiä. Vesa Ollikainen & Outi Grotenfelt720.9.2012 public class Pilkkominen { public static void main(String[] args) { String jono = "X00MieleniY15minunYaatekeviZ99aivoniY88ajatteleviZ14lähteäni"; String pilkotut[]; pilkotut = jono.split("[XYZ].."); for (int i=0; i<pilkotut.length; i++) System.out.println(pilkotut[i]); } run: Mieleni minun tekevi aivoni ajattelevi Lähteäni BUILD SUCCESSFUL (total time: 1 seconds)

8 StringBuilder -luokka  StringBuilder -luokkaa käytetään muuttuvan mittaisten merkkijonojen käsittelyyn.  Sisältää metodeja dynaamisille merkkijonoille:  append() liittää merkkijonon loppuun.  insert() liittää merkkijonon annettuun positioon.  Oliolle on varattu kapasiteetti, jota lisätään ajonaikaisesti, jos osoitettu kapasiteetti ei riitä. Vesa Ollikainen & Outi Grotenfelt820.9.2012 Vastaa oppikirjassa esiteltyä StringBuffer -luokkaa (JDK 5.0:sta alkaen, nopeampi, ei synkronoituva).

9 Esimerkki: StringBuilder  Esimerkissä luetaan merkkijono, käännetään se, lisätään loppuun merkkijono XXX ja lisätään merkkijonon keskelle (positiosta 3 alkaen) merkkijono ***. Vesa Ollikainen & Outi Grotenfelt920.9.2012 import java.util.*; public class SBKokeilu { public static Scanner lukija = new Scanner(System.in); public static void main(String[] args) { StringBuffer strBuffer = new StringBuffer(); String uusi; do{ uusi = lukija.nextLine(); strBuffer.append(uusi); } while (uusi.length()>0); System.out.println(strBuffer.toString()); strBuffer.reverse(); System.out.println(strBuffer.toString()); strBuffer.append("XXX"); System.out.println(strBuffer.length()); if (strBuffer.length()>= 3) strBuffer.insert(3, "***"); System.out.println(strBuffer.toString()); } run: tämäonekaluettava t � m � onekaluettava avatteulakeno � m � t 20 ava***tteulakeno � m � tXXX BUILD SUCCESSFUL (total time: 23 seconds)

10 Math -luokka ja static import  Math -luokka kuuluu java.lang-pakettiin.  Paketin julkiset luokat tuodaan käyttöön automaattisesti, joten import -lausetta ei tarvita.  Luokka sisältää kokoelman matemaattisia funktioita.  pow(), round(), sin(), max(), min(), …  Esimerkin ns. staattinen tuonti hakee luokan java.lang.Math staattiset metodit ja muuttujat siten että niihin voi viitata ilman luokkanimeä. –notaation Math.PI tilalla voidaan käyttää notaatiota PI. Vesa Ollikainen & Outi Grotenfelt1020.9.2012 import static java.lang.Math.*;

11 java.util -pakkaus  java.util-pakkaus sisältää monia hyödyllisiä luokkia.  Date ajan esittämiseen  Calendar päivämäärille  Scanner syötteiden lukemiseen.  Scanner -luokan avulla voidaan lukea eri tyyppisiä syötteitä käyttäen tyyppikohtaisia metodeja:  nextInt() lukee int -tyypisen syötteen  nextDouble() lukee double -tyyppisen syötteen  next() lukee String -tyyppisen syötteen  nextLine() lukee loput rivistä ( String ) ja rivinvaihdon Vesa Ollikainen & Outi Grotenfelt1120.9.2012

12 Esimerkki: Scanner  Esimerkissä luetaan ja tulostetaan kokonaisluku, liukuluku ja kaksi merkkijonoa.  Kukin edeltää rivinvaihtoa. Vesa Ollikainen & Outi Grotenfelt1220.9.2012 import java.util.*; public class LukijaLuokka { public static void main(String[] args) { Scanner input = new Scanner(System.in); int kokoLuku; double liukuLuku; String mJono1, mJono2; kokoLuku = input.nextInt(); input.nextLine(); liukuLuku = input.nextDouble(); input.nextLine(); mJono1 = input.nextLine(); mJono2 = input.nextLine(); System.out.println(kokoLuku+" "+liukuLuku+" " +mJono1+" "+mJono2); } run: 23 2,456 kukku muru 23 2.456 kukku muru BUILD SUCCESSFUL (total time: 23 seconds)

13 Tietorakenneluokkia  Tietorakenteiden tarkoitus on tallentaa oliot siten, että niiden haku- ja muokkausoperaatiot ovat mahdollisia (ja tehokkaita).  Esimerkkejä tietorakenteista:  taulukko  lista  pino  puu  Java-kielessä on laaja kokoelma valmiita tietorakenneluokkia.  Tarkastellaan aluksi esimerkkinä ArrayList -luokkaa. Vesa Ollikainen & Outi Grotenfelt1320.9.2012

14 ArrayList  ArrayList -tietorakenne on taulukko, jonka koko voi kasvaa dynaamisesti.  Järjestelmä varaa ArrayList -oliolle kapasiteetin, jota se kasvattaa tarvittaessa.  ArrayList -luokka toteuttaa listaluokille määritetyn List -rajapinnan, joka perii Collection -rajapinnan.  List -rajapinta määrittää mm. metodit:  get(int) hakee alkion  set(int, Object) korvaa alkion  Collection -rajapinta määrittää mm. metodit  add() lisää alkion kokoelmaan  clear() poistaa alkiot kokoelmasta Vesa Ollikainen & Outi Grotenfelt1420.9.2012

15 ArrayList-olion luonnin syntaksi  Luotaessa ArrayList -olio on myös määritettävä siihen liitettävien olioiden tyyppi.  Tätä piirettä kutsutaan geneerisyydeksi.  Esimerkissä listaan voidaan tallentaa Henkilö -luokan olioita.  Geneerisyys vähentää tyypinmuunnosten tarvetta verrattuna vanhempiin Java-versioihin, jotka eivät tukeneet geneerisyyttä.  Luokan alkiot voidaan läpikäydä for-each -rakenteella. Vesa Ollikainen & Outi Grotenfelt1520.9.2012 ArrayList henkilöt = new ArrayList ();

16 Vesa Ollikainen & Outi Grotenfelt1620.9.2012

17 Alkeistietotyyppien kääreluokat  Alkeistietotyypin muuttujia ei voi käsitellä olioina.  Javan tietorakenneluokkiin voidaan kuitenkin tallentaa vain olioita.  Muuttujat on muutettava tyyppiä vastaavan ns. kääreluokan olioiksi.  Alkeistietotyyppiä vastaavan kääreluokan nimi alkaa isolla alkukirjaimella.  esim. tietotyypin double kääreluokka on Double.  poikkeuksena int -tyypin kääreluokka Integer ja char -tyypin kääreluokka Character. Vesa Ollikainen & Outi Grotenfelt1720.9.2012

18 Esimerkki kääreluokasta  ArrayList -rakenteeseen voidaan tallentaa Integer -olioita.  int -tyyppiset luvut muutetaan rakenteeseen lisätessä automaattisesti kääreluokkansa edustajiksi (ns. autoboxing).  Tulostuslauseessa kutsutaan automaattisesti kääreluokan ( Integer ) toString()- metodia. Vesa Ollikainen & Outi Grotenfelt1820.9.2012

19 Kääreluokista  Alkeistietotyypin edustaja voidaan välittää kääreluokan olion konstruktorille.  Myös muunnos toiseen suuntaan onnistuu. Kalvosarjan tekijän nimi19 double luku = 3.2; Double d = new Double(luku); double luku2 = d.doubleValue();

20 THANK YOU! www.metropolia.fi/en/ www.facebook.com/MetropoliaAMK outi.grotenfelt@metropolia.fi


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

Samankaltaiset esitykset


Iklan oleh Google