55
1 Javan perusteet 2004 1,5 ov Kuopion yliopisto, tietojenkäsittelytieteen laitos Ohjelmistotekniikan maisterikoulutus, Varkaus Tomi Keinonen [email protected].fi

Javan perusteet 2004

  • Upload
    lonna

  • View
    35

  • Download
    0

Embed Size (px)

DESCRIPTION

Javan perusteet 2004. 1,5 ov Kuopion yliopisto, tietojenkäsittelytieteen laitos Ohjelmistotekniikan maisterikoulutus, Varkaus Tomi Keinonen [email protected]. Kurssin suoritus. Luennot 18 h Harjoitukset 4 krt Lopputentti tai harjoitustyö Harjoituksista jaettavat hyvityspisteet - PowerPoint PPT Presentation

Citation preview

Page 1: Javan perusteet 2004

1

Javan perusteet 2004

1,5 ovKuopion yliopisto, tietojenkäsittelytieteen laitosOhjelmistotekniikan maisterikoulutus, Varkaus

Tomi [email protected]

Page 2: Javan perusteet 2004

2

Kurssin suoritus

Luennot 18 h Harjoitukset 4 krt Lopputentti tai harjoitustyö Harjoituksista jaettavat

hyvityspisteet 75 % - 100 % +2 arvosanaa 50 % - 75 % +1 arvosana 25 % - 50 % ei vaikutusta 0 % - 25 % -1 arvosana

Page 3: Javan perusteet 2004

3

Kurssimateriaali

Verkkosivuthttp://www.cs.uku.fi/~tkeinone/java2004/

Kurssi pohjautuu kirjaanMorelli, Ralph: Java, Java, Java! : Object-Oriented Problem Solving1. painos: 2000, ISBN 0-13-011332-82. painos: 2002, ISBN 0-13-033370-0

Kurssikirjan hankinta ei välttämätöntä, mutta varsin suotavaa

Page 4: Javan perusteet 2004

4

Kurssin aikataulu

7.10.2004 16:45-19:45 Luennot 1-4

23.10.2004 9:00-10:30 Harjoitukset 1

B231

C1004TK

To

La

23.10.2004 11:00-14:00 Luennot 5-8 B231La

Harjoitustehtävien 2 palautus sähköpostitse ma 8.11. klo 18 mennessä

9.11.2004 16:45-19:45 Luennot 9-12 B231Ti

Harjoitustehtävien 3 palautus sähköpostitse ti 23.11. klo 18 mennessä

24.11.2004 16:45-19:45 Luennot 13-16 B231Ke

Harjoitustehtävien 4 palautus sähköpostitse ke 8.12. klo 18 mennessä

9.12.2004 16:45-19:45 Tentti B231)(To

15.12.2004 16:45-18:15 Luennot 17-18 B231Ke

(Harjoitustyön palautus sähköpostitse pe 10.12. klo 18 mennessä)

Jompi kumpi,sovitaan kurssilla

Page 5: Javan perusteet 2004

5

Harjoitukset

Tehtävät nettisivulla Ensimmäiset harjoitukset mikroluokassa

Ohjelmalliset ratkaisut mukaan esim. levykkeellä

Harjoitukset 2-4 palautetaan sähköpostina Ratkaisujen ohjelmakoodit liitetiedostoina Mahdolliset kuvat GIF- tai JPEG-muotoisina Osanottajien määrästä riippuen lyhyt palaute

ratkaisusta paluupostina Ratkaisujen ei tarvitse olla täydellisiä

Page 6: Javan perusteet 2004

6

Kurssin sisältö

Java-kieli Luokat ja

oliot

Ehdotja toisto

Aritmetiikka

Taulukot

Metodit

Rekursio

J2SE API

Poikkeukset

Tiedostot

Java 2 Platform,Standard Edition 1.4.2

Page 7: Javan perusteet 2004

7

Java JAVA:sta on useita eri versioita erilaisiin käyttötarkoituksiin

J2SE: Yleisin Java-alusta, joihin perussovellukset pohjautuvat J2EE: Palvelinsovellusten kehittämiseen tarkoitettu alusta,

sisältää kaikki J2SE:n ominaisuudet J2ME: Typistetyin ominaisuuksin kämmenlaitteisiin tarkoitettu

alusta

Kurssilla käsiteltävät perustoiminnot kaikissa Java-alustoissa samat. Eroavaisuudet lähinnä alustan luokkakirjastoissa.

StandardEdition (SE)

EnterpriseEdition (EE)

MobileEdition (ME)

Page 8: Javan perusteet 2004

8

Ympäristö Ei käyttöjärjestelmäriippuvuutta

Sunin J2SE SDK, versio 1.4.2http://java.sun.com/

Lähdekoodi suositellaan kirjoitettavaksi jollakin tekstieditorilla:http://www.jcreator.com/ (ilmainen LE)

Page 9: Javan perusteet 2004

9

Oliot ja luokat

Olio on luokan ilmentymä, jolla on tila ja käyttäytyminen.

Luokan ja olion erot?UML-luokkakaavio.

Page 10: Javan perusteet 2004

10

Oliot ja luokat

Olio on yleinen käsite, jolla on tila käyttäytyminen

Jokaisella oliolla on yksikäsitteisesti määritelty luokka, johon se kuuluu

Olion tila talletetaan attribuutteihin ja käyttäytyminen toteutetaan metodeilla

Page 11: Javan perusteet 2004

11

Oliot ja luokat

Maitopurkki

Jääkaappi

Tomaatti

Omena

File

Timestamp

Duration

User

Page 12: Javan perusteet 2004

12

Oliot ohjelmissa

Olio-ohjelmointikieliä: Java, C++, Oberon 2, Smalltalk, Eiffel

Java puhdas olio-ohjelmointikieli Ohjelmistokehittäjä rakentaa

tarvittavat luokat vaatimusten ja suunnitelmien perusteella

Page 13: Javan perusteet 2004

13

Olio-ohjelmointi - periaatteita Hajoita ja hallitse Kapselointi Rajapinnat Tiedon piilottaminen Yleiskäyttöisyys Laajennettavuus

Page 14: Javan perusteet 2004

14

Miksi luokat? Luokat suunnitellaan ja testataan

hyvin (hyvä laatu) Luokkia uudelleenkäytetään ja

peritään (kehityksen nopeus) Väärän käytön estäminen

(ohjelmoijan virheiden vähentäminen)

Asiakokonaisuudet erillään(selkeys ja ymmärrettävyys)

Page 15: Javan perusteet 2004

15

Luokan ja olion erotLuokka määrittelee attribuutit

ja metodit ohjelmoijan tekemä ei ole olemassa ajon

aikana kuin oliomuodossa

kiinteä ajon aikana, ei voida muuttaa ohjelman pyöriessä

nimetty luokan nimen mukaan

Olio on luotu jostakin

luokasta on olemassa vain ajon

aikana täytyy määritellä ja

luoda ohjelmassa sisältää attribuutteja

ja metodeja, joita voidaan suorittaa ohjelmasta

nimetty muuttujaksi

Page 16: Javan perusteet 2004

16

UML-luokkakaavio Universal Modeling

Language Luokasta kuvataan

Nimi Attribuutit Metodit

Yleisesti käytetty standardisoitu kuvaustapa

Kommentteja voidaan laittaa « » -merkkien väliin

DirectorSimpleWindow window

GrayCircle circle

«constructor»

Director()

Page 17: Javan perusteet 2004

17

Metodikutsut Metodikutsut

olio.metodi();

Esimerkkejäpen.moveForward();

pen.turnClockwise();

pen.draw();

DrawingTool

«constructor» DrawingTool()

«update» void moveForward() void turnClockwise() void dontDraw() void draw()

Page 18: Javan perusteet 2004

18

Attribuutit (luokan muuttujat) Jokaisella luokan attribuuttilla on määritelty

näkyvyysalue (scope) private protected public

Attribuuttien nimien tulee olla yksilöllisiä Esimerkki

private DrawingTool pencil;

private DrawingTool pen;

Page 19: Javan perusteet 2004

19

Nimeämiskäytännöt Java-kielessä Luokkien, metodien ja attribuuttien

nimissä (identifiers) on rajoitteita alkaa kirjaimella a-z tai A-Z, jonka

jälkeen voi olla numeroita tai kirjaimia, mutta ei erikoismerkkejä

isot ja pienet kirjaimet eri merkkejä nimeäminen kannattaa tehdä kuvaavasti eri käytäntöjä olemassa, yhtenäisyys

ohjelman sisällä kannattaa säilyttää

Page 20: Javan perusteet 2004

20

Nimeämiskäytännöt - esimerkki

Luokkien nimet: DrawingTool Luokan metodit: drawLine Attribuutit: pencilColor Muuttujat metodien sisällä: pencilColor Sun:n suositukset:

http://java.sun.com/docs/codeconv/

Page 21: Javan perusteet 2004

21

Ensimmäinen Java-ohjelma

Lähdekoodista ohjelmaksiEnsimmäinen ohjelma

Page 22: Javan perusteet 2004

22

Lähdekoodista ohjelmaksi

Tekstieditori

Kääntäjä

Virtuaalikone(JRE)

Lähdekoodi(*.java)

Tavukoodi(*.class)

1

2

3

4

5

Suunnitelmasta lähdekoodiksi Jokainen luokka kirjoitetaan omaan

lähdekooditiedostoon. Esimerkiksi luokka Director kirjoitetaan tiedostoon Director.java

Koodia selkeyttämään käytetään sisennyksiä, kommentteja ja yhtenäistä nimeämiskäytäntöä.

Isot ja pienet kirjaimet tarkoittavat eri asiaa.

Luokkien ja niissä olevien metodien kokoa pyritään rajoittamaan. Suuret luokat ja pitkät metodit kannattaa jakaa pienempiin osiin.

Page 23: Javan perusteet 2004

23

Lähdekoodista ohjelmaksi

Tekstieditori

Kääntäjä

Virtuaalikone(JRE)

Lähdekoodi(*.java)

Tavukoodi(*.class)

1

2

3

4

5

Lähdekoodista tavukoodiksi Kääntäjä kääntää lähdekoodin

JRE:n ymmärtämäksi tavukoodiksi (javac tiedosto).

Kääntäjä tarkastaa lähdekoodin oikeellisuuden ja pysähtyy virheeseen, mikäli lähdekoodia ei voida kääntää.

Onnistunut käännös tuottaa .class-päätteisen tavukooditiedoston jokaisesta lähdekooditiedostosta.

Ohjelmoija ei muokkaa tavukoodia, vaan muutokset tehdään aina lähdekoodiin.

Page 24: Javan perusteet 2004

24

Lähdekoodista ohjelmaksi

Tekstieditori

Kääntäjä

Virtuaalikone(JRE)

Lähdekoodi(*.java)

Tavukoodi(*.class)

1

2

3

4

5

Tavukoodin suorittaminen Tavukoodia ei ole konekieltä eli

sitä ei voida suorittaa suoraan prosessorilla. Suorittamiseen käytetään Java-virtuaalikonetta (Java VM, JRE). (java luokannimi)

Samaa tavukoodia voidaan suorittaa missä tahansa laiteympäristössä, mihin on saatavilla Java VM.

Ohjelmassa olevat loogiset virheet ilmenevät vasta ajon aikana.

Virheitä vähennetään ja tutkitaan testauksella ja debuggauksella.

Page 25: Javan perusteet 2004

25

Ensimmäinen ohjelmapublic class HelloWorld {

public static void main(String[] args) {System.out.println("Hello World!");

}

}

Page 26: Javan perusteet 2004

26

Koodin kääntäminen ja ajaminen Yksittäisen MyClass.java-tiedoston

kääntäminen onnistuu:javac MyClass.java

Käännöksen jälkeen ajaminen:java MyClass

Ajamisen yhteydessä voidaan välittää komentoriviparametreja:java MyClass parametri1 parameteri2 ...

Page 27: Javan perusteet 2004

27

Kommentit Kommentteja voi koodiin laittaa

kahdella tavalla:// yksirivinen kommentti

/*

Monirivinen

kommentti

*/

Sopivat kommentit selkeyttävät koodia

Page 28: Javan perusteet 2004

28

Ohjelma? Hyvä ohjelma toteutuksen

näkökulmasta? Toimii halutusti normaalien käyttötapausten

lisäksi myös erikoistapauksissa Rakenne on selkeä ja ymmärrettävä Hyödynnetty mahdollisuuksien mukaan

olemassaolevia valmiita luokkia/luokkakirjastoja

Koodi uudelleenkäytettävää Riittävä kommentointi

Page 29: Javan perusteet 2004

29

Perustietotyypit ja aritmetiikka

Kokonaislukutyypit, reaalilukutyypit, kirjaimetPerustietotyyppien ja olioiden erot

Aritmeettiset lausekkeet ja niiden sisäinen suoritusjärjestys

Muunnokset perustietotyypistä toiseenMerkkijono

Math-luokan tarjoamat palvelutVakiot

Page 30: Javan perusteet 2004

30

PerustietotyypitKokonaislukutyypit byte (8 bittiä)

(-128- 127) short (16 bittiä)

(-32768- 32767) int (32 bittiä)

(-2147483648- 2147483647)

long (64 bittiä)

Liukulukutyypit float (32 bittiä) double (64 bittiä)

Muut perustietotyypit boolean – totuusarvo

(true/false) char – kirjain

(Unicode)

Page 31: Javan perusteet 2004

31

Tietotyyppien kokojärjestys

byte

short

int

long

float

double

char

Page 32: Javan perusteet 2004

Kokonaislukutyypin int operaattoritPrefix-operaattorit (int->int)

- vastaluku++ lisäys-- vähennys

Postfix-operaattorit (int->int)++ lisäys-- vähennys

Rajoituksia ++ ja -- (prefix ja

postfix) operaattoreita ei voida kohdistaa vakioille

Aritmeettiset oper. (int*int->int)+ yhteenlasku- vähennyslasku* kertolasku/ jakolasku (kokonaisosa)% jakoläännös (modulo)

Vertailulauseet (int*int->boolean)== yhtäsuuruus!= erisuuruus< pienempi<= pienempi tai yhtäsuuri> suurempi>= suurempi tai yhtäsuuri

Käyttöesimerkkejä

int i = 1;

int k = 2;

++i; // prefix, i=i+1;

int sum = i+k; // aritm. op.

boolean b = i < k; // vertailu

i++; // postfix

boolean complex =

(i++ * 2 > ++k);

Page 33: Javan perusteet 2004

Operaattorien lyhennykset

a+=b a=a+ba-=b a=a-ba*=b a=a*ba/=b a=a/b

Käyttöesimerkkejä

int a = 1;

a*=2; // a=a*2; -> a==2

int b = 6;

b+=2; // b=b+2; -> b==8

Page 34: Javan perusteet 2004

34

Muunnokset tietotyypistä toiseen Muunnokset numeroarvoisesta tietotyypistä

toiseen tehdään tyypinmuunnoksen kautta Pyöristykset tapahtuvat aina alaspäin Esimerkki:

int i = (int)2.5; // i == 2; Mikäli halutaan pyöristää virallisten

pyöristyssääntöjen mukaan, on 2 vaihtoehtoa: int i = (int)2.5 + 0.5; // i == 3 int i = Math.round(2.5); // i == 3

Page 35: Javan perusteet 2004

35

String-luokka String-luokkaa käytetään merkkijonojen

tallentamiseen Vaikka String näyttäisi toimivan kuin

perustietotyyppi, se on kuitenkin luokka String str = ”Esim”; String str = new String(”Esim”); String str(”Esim”);

Luokalla on paljon metodeja merkkijonon käsittelyyn

Page 36: Javan perusteet 2004

36

Math-luokan metodeja Math.abs itseisarvo Math.pow potenssi Math.round pyöristys Math.sqrt neliöjuuri Math.random satunnaisluku

0.0-1.0 …

Page 37: Javan perusteet 2004

37

Vakiot Vakioita voi määrittää final-

määreellä Vakiomuuttujan arvoa ei voi

muuttaa Esimerkkejä:

final double Math.PI = 3.141592…final int count = 11;

Page 38: Javan perusteet 2004

38

Oliot ja luokat

Luokkien tekoKonstruktorit

MetoditMuuttujat, oliot ja roskienkeruu

Page 39: Javan perusteet 2004

39

Esimerkkiluokan UML-kaavio

Student

int m_creditCount

String m_nameint m_age

Student()Student(String name)void setName(String name)void setAge(int age)void setCreditCount(int creditCount)

Page 40: Javan perusteet 2004

40

Konstruktorit Luokalla voi olla yksi tai useampia

luokan nimisiä metodeja, joita kutsutaan konstruktoreiksi

Konstruktorit voivat erota toisistaan erilaisten parametrien perusteella:public class Student {

Student() { … }

Student(String name) { … }

}

Page 41: Javan perusteet 2004

41

Konstruktorit Konstruktoria kutsutaan luotaessa uusi

olio

Student stu1 = new Student();

Student stu2 = new Student(”Pekka”);

Page 42: Javan perusteet 2004

42

Metodit

Konstruktorin lisäksi luokalla on yleensä myös muita metodeja

Metodeilla voi myös olla parametreja

Student

int m_creditCount

String m_nameint m_age

Student()Student(String name)void setName(String name)void setAge(int age)void setCreditCount(int creditCount)

Page 43: Javan perusteet 2004

43

Metodien parametrit Metodilla voi olla rajoittamaton

määrä parametreja Parametrit määritellään sulkujen

sisässä metodin nimen perässä public void sellCar(Car carToSell, Person currentOwner, Person buyer) { carToSell.check(); buyer.getSignature(); currentOwner.getSignature(); ... }

Page 44: Javan perusteet 2004

44

Metodien paluuarvot Metodilla voi olla korkeintaan yksi

paluuarvo Paluuarvon tyyppi määritellään ennen

metodin nimeä:public String getName();

public int getAge(); Metodi ei palauta arvoa, mikäli se

määritellään void-määreellä:public void setAge(int age);

Page 45: Javan perusteet 2004

45

Metodien paluuarvot Metodin paluuarvo palautetaan

return-lauseella

public String getName() {

return m_name;

}

Page 46: Javan perusteet 2004

46

Metodien määrittely - yhteenveto

Jokainen metodi kuuluu jollekin luokalle

Metodin näkyvyysalue rajaa sen käyttöä

Metodilla voi olla rajoittamaton määrä parametreja

Metodilla voi olla yksi paluuarvo tai ei paluuarvoa ollenkaan (void)

Page 47: Javan perusteet 2004

47

Olioiden luonti ja sijoittaminen Oliota ei ole olemassa ennen sen

luontiamuuttuja = new Olio();

EsimerkkiDrawingTool pen;

pen = new DrawingTool();

pen.moveForward();

Page 48: Javan perusteet 2004

48

Muuttujat, oliot ja roskienkeruu Kun muuttua esitellään ensimmäisen kerran,

se ei osoita mihinkään olioon vaan null-arvoon

Kun olioon ei osoita enää yksikään muuttuja, Java-kielen roskienkeruu tuhoaa senDrawingTool pen; // pen osoittaa null-arvoonpen = new DrawingTool();// pen osoittaa luotuun olioonpen = null;// luotuun DrawingTool-olioon ei osoita enää// yksikään muuttuja -> se tuhotaan

Page 49: Javan perusteet 2004

49

myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();

suoritus-kohta

myPen

missingPen

borrowedPen

( null )

( null )

( null )

Muuttujat, oliot ja roskienkeruu

Page 50: Javan perusteet 2004

50

suoritus-kohta

myPen : Pencil

m_color = = ?m_width = = ?

Muuttujat, oliot ja roskienkeruu

myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();

myPen

missingPen

borrowedPen

( null )

( null )

Page 51: Javan perusteet 2004

51

suoritus-kohta

Muuttujat, oliot ja roskienkeruu

myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();

: Pencil

m_color = = ?m_width = = ?

myPen

missingPen

borrowedPen

( null )

( null )

( null )

Page 52: Javan perusteet 2004

52

suoritus-kohta

Muuttujat, oliot ja roskienkeruu

myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();

: Pencil

m_color = = ?m_width = = ?

myPen

missingPen

borrowedPen

( null )

( null )

borrowedPen : Pencil

m_color = = ?m_width = = ?

Page 53: Javan perusteet 2004

53

suoritus-kohta

Muuttujat, oliot ja roskienkeruu

myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();

: Pencil

m_color = = ?m_width = = ?

myPen

missingPen

borrowedPen

( null )

borrowedPen : Pencil

m_color = = ?m_width = = ?

Page 54: Javan perusteet 2004

54

suoritus-kohta

Muuttujat, oliot ja roskienkeruu

myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();

: Pencil

m_color = = ?m_width = = ?

myPen

missingPen

borrowedPen

( null )

( null )

borrowedPen : Pencil

m_color = = ?m_width = = ?

Page 55: Javan perusteet 2004

55

suoritus-kohta

Muuttujat, oliot ja roskienkeruu

myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();

: Pencil

m_color = = ?m_width = = ?

myPen

missingPen

borrowedPen

( null )

( null )

: Pencil

m_color = = ?m_width = = ?

borrowedPen : Pencil

m_color = = ?m_width = = ?