Javan perusteet 2004

Preview:

DESCRIPTION

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

Citation preview

1

Javan perusteet 2004

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

Tomi Keinonentkeinone@cs.uku.fi

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

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

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

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ä

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

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)

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)

9

Oliot ja luokat

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

Luokan ja olion erot?UML-luokkakaavio.

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

11

Oliot ja luokat

Maitopurkki

Jääkaappi

Tomaatti

Omena

File

Timestamp

Duration

User

12

Oliot ohjelmissa

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

Java puhdas olio-ohjelmointikieli Ohjelmistokehittäjä rakentaa

tarvittavat luokat vaatimusten ja suunnitelmien perusteella

13

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

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)

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

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()

17

Metodikutsut Metodikutsut

olio.metodi();

Esimerkkejäpen.moveForward();

pen.turnClockwise();

pen.draw();

DrawingTool

«constructor» DrawingTool()

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

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;

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ää

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/

21

Ensimmäinen Java-ohjelma

Lähdekoodista ohjelmaksiEnsimmäinen ohjelma

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.

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.

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.

25

Ensimmäinen ohjelmapublic class HelloWorld {

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

}

}

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 ...

27

Kommentit Kommentteja voi koodiin laittaa

kahdella tavalla:// yksirivinen kommentti

/*

Monirivinen

kommentti

*/

Sopivat kommentit selkeyttävät koodia

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

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

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)

31

Tietotyyppien kokojärjestys

byte

short

int

long

float

double

char

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);

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

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

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

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 …

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;

38

Oliot ja luokat

Luokkien tekoKonstruktorit

MetoditMuuttujat, oliot ja roskienkeruu

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)

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) { … }

}

41

Konstruktorit Konstruktoria kutsutaan luotaessa uusi

olio

Student stu1 = new Student();

Student stu2 = new Student(”Pekka”);

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)

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(); ... }

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);

45

Metodien paluuarvot Metodin paluuarvo palautetaan

return-lauseella

public String getName() {

return m_name;

}

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)

47

Olioiden luonti ja sijoittaminen Oliota ei ole olemassa ennen sen

luontiamuuttuja = new Olio();

EsimerkkiDrawingTool pen;

pen = new DrawingTool();

pen.moveForward();

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

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

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 )

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 )

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 = = ?

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 = = ?

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 = = ?

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 = = ?