Kurssin suoritus. Javan perusteet 2004. Kurssimateriaali. Kurssin aikataulu. Kurssin sisältö. Harjoitukset. Javan perusteet 2002 1



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

Java-kielen perusteet

Kurssin suoritus. Javan perusteet Kurssimateriaali. Kurssin aikataulu. Harjoitukset. Kurssin sisältö. Javan perusteet

Olio-ohjelmointi Javalla

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

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

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

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

Java-kielen perusteet

Mikä yhteyssuhde on?

5. HelloWorld-ohjelma 5.1

Metodien tekeminen Javalla

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

5. HelloWorld-ohjelma 5.1

P e d a c o d e ohjelmointikoulutus verkossa

Javan perusteita. Janne Käki

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

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

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

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

OutputStream ja InputStream. Tietovirrat ja niiden suunnat. Tietovirtojen käyttö. FileInputStream esimerkki. DataOutputStream ja DataInputStream

Taulukot. Jukka Harju, Jukka Juslin

Rajapinta (interface)

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

1 Tehtävän kuvaus ja analysointi

1. Omat operaatiot 1.1

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

20. Javan omat luokat 20.1

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

19. Olio-ohjelmointia Javalla 19.1

7. Näytölle tulostaminen 7.1

17. Javan omat luokat 17.1

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

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

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Java-kielen perusteita

9. Periytyminen Javassa 9.1

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

Pakkauksen kokoaminen

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

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

15. Ohjelmoinnin tekniikkaa 15.1

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

Loppukurssin järjestelyt

2. Olio-ohjelmoinista lyhyesti 2.1

9. Periytyminen Javassa 9.1

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

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

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

6. Muuttujat ja Java 6.1

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

Java kahdessa tunnissa. Jyry Suvilehto

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

17. Javan omat luokat 17.1

Ohjelmoinnin jatkokurssi, kurssikoe

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

812341A Olio-ohjelmointi, Olio-ohjelmoinnin peruskäsitteet ja Java-kieli

1. Olio-ohjelmointi 1.1

Luokat ja oliot. Ville Sundberg

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

Java-kielen perusteet

Tietorakenteet (syksy 2013)

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

ITKP102 Ohjelmointi 1 (6 op)

Pakkauksen kokoaminen

7. Oliot ja viitteet 7.1

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Ohjelmoinnin perusteet, 1. välikoe

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

Loppukurssin järjestelyt C:n edistyneet piirteet

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

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

16. Javan omat luokat 16.1

Oliot viestivät metodeja kutsuen

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

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

15. Ohjelmoinnin tekniikkaa 15.1

7/20: Paketti kasassa ensimmäistä kertaa

11. Javan valintarakenteet 11.1

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

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

12 Mallit (Templates)

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

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

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit:

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

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

11. Javan valintarakenteet 11.1

Harjoitustyö: virtuaalikone

Muuttujat ja kontrolli. Ville Sundberg

Harjoitus 5 (viikko 48)

Ohjelmointi 2, välikoe

Listarakenne (ArrayList-luokka)

Transkriptio:

Kurssin suoritus Javan perusteet 2004 1,5 ov Kuopion yliopisto, tietojenkäsittelytieteen laitos Ohjelmistotekniikan maisterikoulutus, Varkaus Tomi Keinonen tkeinone@cs.uku.fi 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 1 2 Kurssimateriaali Verkkosivut http://www.cs.uku.fi/~tkeinone/java2004/ Kurssin aikataulu To 7.10.2004 16:45-19:45 Luennot 1-4 La 23.10.2004 9:00-10:30 Harjoitukset 1 B231 C1004TK Kurssi pohjautuu kirjaan Morelli, Ralph: Java, Java, Java! : Object-Oriented Problem Solving 1. painos: 2000, ISBN 0-13-011332-8 2. painos: 2002, ISBN 0-13-033370-0 Kurssikirjan hankinta ei välttämätöntä, mutta varsin suotavaa 3 La 23.10.2004 11:00-14:00 Luennot 5-8 B231 Harjoitustehtävien 2 palautus sähköpostitse ma 8.11. klo 18 mennessä Ti 9.11.2004 16:45-19:45 Luennot 9-12 B231 Harjoitustehtävien 3 palautus sähköpostitse ti 23.11. klo 18 mennessä Ke 24.11.2004 16:45-19:45 Luennot 13-16 B231 Harjoitustehtävien 4 palautus sähköpostitse ke 8.12. klo 18 mennessä (To 9.12.2004 16:45-19:45 Tentti B231) Jompi kumpi, sovitaan (Harjoitustyön palautus sähköpostitse pe 10.12. klo 18 mennessä) kurssilla Ke 15.12.2004 16:45-18:15 Luennot 17-18 B231 4 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ä 5 Kurssin sisältö Poikkeukset J2SE API Tiedostot Rekursio Javakieli Java 2 Platform, Standard Edition 1.4.2 Taulukot Luokat ja oliot Ehdot ja toisto Metodit Aritmetiikka 6 Javan perusteet 2002 1

Java JAVA:sta on useita eri versioita erilaisiin käyttötarkoituksiin Ympäristö Ei käyttöjärjestelmäriippuvuutta Standard Edition (SE) Enterprise Edition (EE) Mobile Edition (ME) Sunin J2SE SDK, versio 1.4.2 http://java.sun.com/ 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. Lähdekoodi suositellaan kirjoitettavaksi jollakin tekstieditorilla: http://www.jcreator.com/ (ilmainen LE) 7 8 Oliot ja luokat Oliot ja luokat Olio on luokan ilmentymä, jolla on tila ja käyttäytyminen. Luokan ja olion erot? UML-luokkakaavio. 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 9 10 Oliot ja luokat Oliot ohjelmissa Jääkaappi Maitopurkki Tomaatti Omena File Timestamp Duration User Olio-ohjelmointikieliä: Java, C++, Oberon 2, Smalltalk, Eiffel Java puhdas olio-ohjelmointikieli Ohjelmistokehittäjä rakentaa tarvittavat luokat vaatimusten ja suunnitelmien perusteella 11 12 Javan perusteet 2002 2

Olio-ohjelmointi - periaatteita Hajoita ja hallitse Kapselointi Rajapinnat Tiedon piilottaminen Yleiskäyttöisyys Laajennettavuus 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) 13 14 Luokan ja olion erot UML-luokkakaavio Luokka 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 15 Universal Modeling Language Luokasta kuvataan Nimi Attribuutit Metodit Yleisesti käytetty standardisoitu kuvaustapa Kommentteja voidaan laittaa -merkkien väliin Director SimpleWindow window GrayCircle circle «constructor» Director() 16 Metodikutsut Metodikutsut olio.metodi(); Esimerkkejä pen.moveforward(); pen.turnclockwise(); pen.draw(); DrawingTool «constructor» DrawingTool() «update» void moveforward() void turnclockwise() void dontdraw() void draw() 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; 17 18 Javan perusteet 2002 3

Nimeämiskäytännöt Javakielessä 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ää 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/ 19 20 Lähdekoodista ohjelmaksi Ensimmäinen Java-ohjelma Lähdekoodista ohjelmaksi Ensimmäinen ohjelma 1 2 3 4 Tekstieditori Lähdekoodi (*.java) Kääntäjä Tavukoodi (*.class) 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. 5 Virtuaalikone (JRE) 21 22 Lähdekoodista ohjelmaksi Lähdekoodista ohjelmaksi 1 2 3 4 5 Tekstieditori Lähdekoodi (*.java) Kääntäjä Tavukoodi (*.class) Virtuaalikone (JRE) 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.classpäätteisen tavukooditiedoston jokaisesta lähdekooditiedostosta. Ohjelmoija ei muokkaa tavukoodia, vaan muutokset tehdään aina lähdekoodiin. 23 1 2 3 4 5 Tekstieditori Lähdekoodi (*.java) Kääntäjä Tavukoodi (*.class) Virtuaalikone (JRE) Tavukoodin suorittaminen Tavukoodia ei ole konekieltä eli sitä ei voida suorittaa suoraan prosessorilla. Suorittamiseen käytetään Javavirtuaalikonetta (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. 24 Javan perusteet 2002 4

Ensimmäinen ohjelma public class HelloWorld { } public static void main(string[] args) { System.out.println("Hello World!"); } 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... 25 26 Kommentit Kommentteja voi koodiin laittaa kahdella tavalla: // yksirivinen kommentti /* Monirivinen kommentti */ Sopivat kommentit selkeyttävät koodia 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 27 28 Perustietotyypit Perustietotyypit ja aritmetiikka Kokonaislukutyypit, reaalilukutyypit, kirjaimet Perustietotyyppien ja olioiden erot Aritmeettiset lausekkeet ja niiden sisäinen suoritusjärjestys Muunnokset perustietotyypistä toiseen Merkkijono Math-luokan tarjoamat palvelut Vakiot 29 Kokonaislukutyypit 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) 30 Javan perusteet 2002 5

Tietotyyppien kokojärjestys byte char short int long float double 31 Kokonaislukutyypin int operaattorit Prefix-operaattorit (int->int) - vastaluku ++ lisäys -- vähennys 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 Postfix-operaattorit (int->int) ++ lisäys -- vähennys Rajoituksia ++ ja -- (prefix ja postfix) operaattoreita ei voida kohdistaa vakioille 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+b a-=b a=a-b a*=b a=a*b a/=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 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 34 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 Math-luokan metodeja Math.abs itseisarvo Math.pow potenssi Math.round pyöristys Math.sqrt neliöjuuri Math.random satunnaisluku 0.0-1.0 35 36 Javan perusteet 2002 6

Vakiot Vakioita voi määrittää final-määreellä Vakiomuuttujan arvoa ei voi muuttaa Esimerkkejä: final double Math.PI = 3.141592 final int count = 11; Oliot ja luokat Luokkien teko Konstruktorit Metodit 37 38 Esimerkkiluokan UML-kaavio String m_name int m_age int m_creditcount Student Student() Student(String name) void setname(string name) void setage(int age) void setcreditcount(int creditcount) 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) { } } 39 40 Konstruktorit Konstruktoria kutsutaan luotaessa uusi olio Student stu1 = new Student(); Student stu2 = new Student( Pekka ); Metodit String m_name int m_age int m_creditcount Student Student() Student(String name) void setname(string name) void setage(int age) void setcreditcount(int creditcount) Konstruktorin lisäksi luokalla on yleensä myös muita metodeja Metodeilla voi myös olla parametreja 41 42 Javan perusteet 2002 7

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();... } 43 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); 44 Metodien paluuarvot Metodin paluuarvo palautetaan returnlauseella public String getname() { } return m_name; 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) 45 46 Olioiden luonti ja sijoittaminen Oliota ei ole olemassa ennen sen luontia muuttuja = new Olio(); Esimerkki DrawingTool pen; pen = new DrawingTool(); pen.moveforward(); 47 Kun muuttua esitellään ensimmäisen kerran, se ei osoita mihinkään olioon vaan nullarvoon Kun olioon ei osoita enää yksikään muuttuja, Java-kielen roskienkeruu tuhoaa sen DrawingTool pen; // pen osoittaa null-arvoon pen = new DrawingTool(); // pen osoittaa luotuun olioon pen = null; // luotuun DrawingTool-olioon ei osoita enää // yksikään muuttuja -> se tuhotaan 48 Javan perusteet 2002 8

= new Pencil(); = new Pencil(); 49 50 = new Pencil(); = new Pencil(); 51 52 = new Pencil(); = new Pencil(); 53 54 Javan perusteet 2002 9

= new Pencil(); 55 Javan perusteet 2002 10