Ohjelmointi, Java ja tärppejä



Samankaltaiset tiedostot
Java kahdessa tunnissa. Jyry Suvilehto

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

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1

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

Listarakenne (ArrayList-luokka)

5/20: Algoritmirakenteita III

Ehto- ja toistolauseet

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

Rajapinta (interface)

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

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

Muuttujat ja kontrolli. Ville Sundberg

Ohjelmoinnin peruskurssi Y1

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

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

ITKP102 Ohjelmointi 1 (6 op)

11. Javan toistorakenteet 11.1

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Java-kielen perusteita

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

12. Javan toistorakenteet 12.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

12. Javan toistorakenteet 12.1

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

P e d a c o d e ohjelmointikoulutus verkossa

Ohjelmointiharjoituksia Arduino-ympäristössä

Sisällys. 15. Lohkot. Lohkot. Lohkot

Java-kielen perusteet

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

ITKP102 Ohjelmointi 1 (6 op)

811120P Diskreetit rakenteet

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

811120P Diskreetit rakenteet

Java-kielen perusteet

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmoinnin peruskurssien laaja oppimäärä

Ehto- ja toistolauseet

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

1. Omat operaatiot 1.1

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

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Luokan sisällä on lista

Olio-ohjelmointi Javalla

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

Sisällys. 16. Lohkot. Lohkot. Lohkot

Ohjelmoinnin perusteet Y Python

7/20: Paketti kasassa ensimmäistä kertaa

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

14. Poikkeukset 14.1

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmoinnin perusteet, kurssikoe

Lyhyt kertaus osoittimista

Poikkeustenkäsittely

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Ohjelmoinnin perusteet, syksy 2006

A TIETORAKENTEET JA ALGORITMIT

14. Poikkeukset 14.1

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

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

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

18. Abstraktit tietotyypit 18.1

1. Mitä tehdään ensiksi?

Luento 5. Timo Savola. 28. huhtikuuta 2006

Muistutus aikatauluista

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

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

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Metodien tekeminen Javalla

Java-kielen perusteet

Javan perusteita. Janne Käki

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Ohjelmoinnin peruskurssien laaja oppimäärä

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

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

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssien laaja oppimäärä

11. Javan valintarakenteet 11.1

ITKP102 Ohjelmointi 1, syksy 2007

Ohjelmistotekniikan menetelmät, koe

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

Ohjelmoinnin perusteet Y Python

Harjoitustyön testaus. Juha Taina

ITKP102 Ohjelmointi 1 (6 op)

1. Olio-ohjelmointi 1.1

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

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

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

Mitä poikkeuskäsittely tarkoittaa?

1 Tehtävän kuvaus ja analysointi

Transkriptio:

Ohjelmointi, Java ja tärppejä Jyry Suvilehto Helsinki University of Technology, TKK 5. toukokuuta 2008 Jyry Suvilehto 1

Luennon kulku Intro Lähtökohta Ohjelmoinnin yleisiä ongelmia Tauko 10 min Java Tauko 10 min Tärppejä Jyry Suvilehto 2

Hassu setä edessä TIK III Tahtoo suojatöitä seuraavan laman ajaksi En osannut koodata kun tulin taloon Jyry Suvilehto 3

Hassu setä edessä TIK III Tahtoo suojatöitä seuraavan laman ajaksi En osannut koodata kun tulin taloon En osaa vieläkään Jyry Suvilehto 4

Hassu setä edessä TIK III Tahtoo suojatöitä seuraavan laman ajaksi En osannut koodata kun tulin taloon En osaa vieläkään Kuvittelen liikoja huumorintajustani Jyry Suvilehto 5

Luennon alkopuolen kulku Ohjelmointi Java Ongelma 1 Ratkaisu 3 Ongelma 2 Ratkaisu 1...... Luento etenee sarakkeittain Asioiden rakenteellinen jäsentäminen on vanha muistikikka Elämä ei ole helppoa joten ongelmat ja aiheet on sekoitettu Jyry Suvilehto 6

Käytännön juttuja Kysykää Käyttäkää ääntä Luennoitsijalla oikeasti huono kuulo Ei niitä käsiä kuitenkaan huomaa Luentotauoilla tai luennon jälkeen voi nykiä hihasta Jyry Suvilehto 7

Pohjimmainen ongelma Kuva: Alan Turing Kuva: Turingin kone Turingin kone kuvaa ideaalitietokonetta Matemaattisesti kaunis abstraktio, mutta sen ajatteleminen sattuu tikkiläistenkin päähän Tarvitaan helpompi abstraktio, ohjelmointikieli joka tekee asioista helpompia Turha kuriositeetti: L A TEX-kieli jolla nämä kalvot on tehty on ilmaisuvoimaltaan yhtä vahva kuin Java Jyry Suvilehto 8

Ohjelmoinnin yleisiä ongelmia Käydään läpi yleisiä asioita joita ohjelmointikielessä olisi hyvä olla. Jos tuntuu siltä että osaatte ennakoida mitä asioita haetaan takaa, niin hyvä. Jos ette, niin kannattaa panostaa lukemiseen. Jyry Suvilehto 9

Deterministisyys Haluamme tehdä ohjelmia jotka ovat muuntautumiskykyisiä. Ohjelman pitää siis ratkaista jokin yleinen ongelma yleisellä tasolla siten että sen parametrejä voidaan muuttaa. "Ohjelma joka laskee piin likiarvon"vs. "ohjelma joka laskee sille annetun kulman tangentin" Miten esittää tietoa joka on luonteeltaan muuttuvaa? Helppo Vaikeampi 5 + 5 =? tan x x Jyry Suvilehto 10

Ehdollisuus Luonnollinen jatkumo edelliseen Haluamme ohjelman käyttäytyvän eri tavoin riippuen muuttuvien alkioiden arvoista Vaikkapa arvioida kemikaalien reaktionopeutta eri kaavalla mikäli systeemissä on katalyyttiä Käytännössä siis haarautamme suorituspolkua ja hyppäämme eri kohtaan ehdosta riippuen. Täältä nousee myös tarve jakaa ohjelmakoodia selkeisiin lohkoihin Kuva: if-then-else -rakenne Jyry Suvilehto 11

Toistaminen Jälleen luonnollinen jatkumo edelliselle... Tällä kertaa teemmekin hypyn "taaksepäin"koodissa ja suoritamme saman kohdan halutun, mahdollisista muuttuvista arvoista riippuvan määrän kertoja Toistamme samaa asiaa monta kertaa ja haaraudumme tästä kohdasta pois vain kun tietyt, ehkä monimutkaisetkin ehdot ovat täyttyneet Kuva: for-silmukka Jyry Suvilehto 12

Tietorakenteet 3 2 1 0 0 Taulukko: Taulukko Kun kerran voimme tehdä asioita ennalta tietämättömän monta kertaa, eikö olisi loogista tehdä niitä yhtä monelle muuttuvalle alkiolle? Luonnolliselta tuntuva tapa tallentaa jokainen muuttuva alkio "erillisen nimen taakse"ei toimi kun nimiä on tuntematon määrä Tarvitsemme siis rakenteita, joihin voimme tallentaa asioita numeroindeksillä, koska numeroita on melkein loputtomasti Jyry Suvilehto 13

Ideat Ohjelmakoodin pitäisi olla ymmärrettävää ja suhtautua reaalimaailmaan Ohjelman rakenteen tulisi tuntua loogiselta kaikille, jotka ovat suurinpiirtein ihmisiä Otetaan käyttöön vanha Sokrateen määritelmä Ideoista Ideat ovat "puhdas abstraktio"reaalimaailman asioista ja (teoriassa) samanlaisia kaikille ihmisille Idea sisältää abstraktin tiedon aistimaailmasta, jotain yleistä Idean ilmentymä on jokin aistimaailman "objekti"joka täyttää tämän Esimerkki: On idea tuolista esineenä jonka päällä voi istua. Takamuksesi alla on yksi tuoli Jyry Suvilehto 14

Kikkailua Laiskuus on kaiken hyvän ohjelmoinnin alku ja juuri Asiat kannattaa tehdä kerran siten, että työmäärä olemassaolevaan lisäämiseksi on mahdollisimman pieni Tämän voisi ehkä toteuttaa edellämainittujen Ideoiden keskinäisillä suhteilla Jyry Suvilehto 15

Ongelmia Tietokonemaailma on melkein täydellinen mutta reaalimaailma ei ole Mitä jos ohjelmoija on tehnyt virheen tai maailman tila on virheellinen (levyke ei ole asemassa tmv)? Selkeästikin joskus on tarpeen palauttaa metodeista arvoja, jotka ovat normaalin paluuarvon ulkopuolella Jos teemme näistäkin arvoista edellämainittuja Ideoita voimme ehkä saavuttaa monipuolisia etuja Jyry Suvilehto 16

Luentotauko n. 10 min Tähän väliin tauko Taukotehtävä Kirjoita luokka Testi ja sille päämetodi. Päämetodi saa komentoriviparametreinaan vaihtelevan määrän merkkijonoja. Mikäli merkkijonoja tulee parillinen määrä, tulee ohjelman tulostaa saamansa parilliset merkkijonot. Mikäli pariton, parittomat. 0 olkoon parillinen ja indeksointi alkakoon nollasta. Jyry Suvilehto 17

Luentotauko n. 10 min Tähän väliin tauko Taukotehtävä Kirjoita luokka Testi ja sille päämetodi. Päämetodi saa komentoriviparametreinaan vaihtelevan määrän merkkijonoja. Mikäli merkkijonoja tulee parillinen määrä, tulee ohjelman tulostaa saamansa parilliset merkkijonot. Mikäli pariton, parittomat. 0 olkoon parillinen ja indeksointi alkakoon nollasta. Totuuden hetki. Hieman tätä vaikeampi tehtävä hyvin todennäköisesti tentissä. Jyry Suvilehto 18

Yksi ratkaisu public class T e s t i { public s t a t i c void main ( S t r i n g [ ] a r gs ){ for ( i n t i =(args. l ength %2); i <a r gs. l ength ; i=i +2) System. out. p r i n t l n ( a r gs [ i ] ) ; } } Pientä kikkailua, mutta toisaalta lyhyt ja ytimekäs. Empiria opettaa, että paperikoodaustehtävässä assarin vastauksen lukemiseen käyttämä aika on kääntäen verrannollinen tehtävästä saataviin pisteisiin kannattaa panostaa paperikoodauksessa ulkonäköön ja siisteyteen. (ei toki ole huono ohje muissakaan vastauksissa) Jyry Suvilehto 19

Java Miten edellämainitut käsitteet vastaavat Javaa ja siinä olevia asioita Ohimennen-huomautuksia Jyry Suvilehto 20

Alkeismuuttujat Ei pidä sekoittaa oliomuuttujiin! boolean b = false; byte by = 127; char c = w ; short s = 5115; int i = 5116; float f = 3.14; long l = 100000000000; double d = 13.37; Jyry Suvilehto 21

Oliomuuttujat Kaikki muut kuin edellämainitut muuttujat ovat Javassa olioita Seurauksia kaikkiin pätevät samat pelisäännöt viittaustyyppisiä muuttujia pitää varata muistia new -operaattorilla myös taulukot ovat olioita! (tosin niitä varten on erikoiskäsittelyä) Jyry Suvilehto 22

Luokat ja oliot Luokat kehitettiin ihmisille helpoiksi tavoiksi jäsentää reaalimaailman asioita ohjelmakoodiksi Luokka kuvaa jotakin Ideaa. Oliot ovat luokan ilmentymiä. class Tuoli on yleinen idea tuolista, mutta takamuksesi alla on ilmentymä tuolista Luokkaan kuuluu kenttiä ja metodeita Metodi eroaa funktiosta sillä, että se sitoo toiminnallisuutta johonkin luokkaan ja sen kenttiin Jyry Suvilehto 23

Ehtolauseet boolean a=true, b=false, c ; i f ( a ){ System. out. p r i n t l n ( " True " ) ; } i f ( a && b ){ System. out. p r i n t l n ( " F a l s e " ) ; } else i f ( a b ){ System. out. p r i n t l n ( " True " ) ; } Ehtolauseet jakavat ohjelman suoritusta lohkoihin, jotka saattavat olla toisensa poissulkevia Ehtolauseita voi ketjuttaa AND (&&) ja OR ( ) -operaatioilla ja kääntää NOT (!) -operaattorilla Jyry Suvilehto 24

Lokkisulkeet ({ ja }) määrittävät ohjelman rakenteen eli lohkot Jyry Suvilehto Ehto- ja toistolauseiden jälkeen suoritetaan seuraava 25 Ohjelmointi, Java ja tärppejä 5. toukokuuta 2008 Ohjelmalohkoista boolean a=true, b=f a l s e ; i f ( a ){ System. out. p r i n t l n ( " True " ) ; System. out. p r i n t l n ( " True " ) ; } i f ( a && b ) System. out. p r i n t l n ( " F a l s e " ) ; System. out. p r i n t l n ( " True " ) ; i f ( a b ){ System. out. p r i n t l n ( " True " ) ; } else { System. out. p r i n t l n ( " F a l s e " ) ; }

Muuttujien näkyvyys i n t temp ; for (... ) { temp =.... } return temp ; for (){ i n t temp ; temp =.... } return temp ; oikein! väärin! Muuttujat on määritelty sen lohkon sisällä, jossa ne esitellään ja kaikkien sitä alempien lohkojen sisällä. Luokkien kenttien tapauksessa pitää erikseen säätää muuttujien näkyvyyttä luokan ulkopuolelle. Jyry Suvilehto 26

Silmukat Mitä? Silmukoita eli toistolauseita (looppeja) käytetään nimensä mukaisesti toistoon eli siihen että tehdään sama asia monta kertaa. Miksi monta? Jokainen silmukkarakenne on kätevä johonkin usein koodauksessa vastaantulevaan tilanteeseen. Tenttin tulevassa ohjelmointitehtävässä kannattaa käyttää oikeaa työkalua. Jyry Suvilehto 27

for Jyry Suvilehto 28

for // juodaan kunnes r a j a t u l e e t ä y t een public void n a u t i K esasta (){ for ( i n t i = 0: i < t h i s. kanniraja ; i ++){ t h i s. j u o d u t K a l j a t ++; } } for-silmukka on tarkoitettu käytettäväksi kun on helppo määrittää toistojen lukumäärä. Erityisen hyvä taulukoiden ja listojen läpikäymiseen. Toki aina voi kikkailla Jyry Suvilehto 29

while while (! t h i s. kannissa ()){ t h i s. j u o d u t K a l j a t ++; } while on tarkoitettu yleiseen toistoon niin kauan kuin joku ehto on voimassa Tässä tapauksessa humalatilan tarkastus voi olla huomattavasti monimutkaisempi omassa metodissaan (tai sitä voidaan kysyä Partneri-luokan oliolta) Toinen esimerkki tekstipohjainen käyttöliittymä while( eiollalopetettu ) pyydakomento() Kikkailemalla voidaan käyttää for-silmukan korvikkeena Jyry Suvilehto 30

do-while do { t h i s. j u o d u t K a l j a t ++; } while (! t h i s. kannissa ( ) ) do-while tekee samaa kuin while, mutta jatkoehto tarkastetaan vasta lopussa yksi taattu suorituskerta alussa "Aina voi ottaa yhden ja katsoa janottaako sen jälkeen vielä" Jyry Suvilehto 31

Eli for kun määrä tiedetään while noin yleensä do-while brassailuun tai erikoistapauksiin Jyry Suvilehto 32

Kaksi taikasanaa break; Katkaisee silmukan suorituksen ja jatkaa sen jälkeisen koodin suoritusta. continue; Hyppää kyseisen toistokerran loppuun ja aloittaa uuden toiston (for-loopissa myös edistää edistysaskeleella) Jyry Suvilehto 33

Taulukot Taulukot ovat ohjelmoinnin peruskauraa, ja yleisin tapa säilyttää tietoa. i n t [ ] [ ] taulukko = new i n t [ 3 ] [ 4 ] // montako lukua mahtuu yhteensä? taulukko [ 2 ] [ 3 ] = 10; // v i i m e i n e n a l k i o kummassakin suunnassa Oliotaulukon alkiot alustuvat nulliksi Taulukko on kiinteän kokoinen. Jyry Suvilehto 34

ArrayList // A r r a y L i s t i l l ä on p a r a m etriton k o n s t r u k t o r i A r r a y L i s t <Olio > l i s t a = new A r r a y L i s t <Olio >() Olio o l i o = new Olio ( ) ; i n t i = 1; l i s t a. add ( o l i o ) ; l i s t a. add ( o l i o, index ) ; l i s t a. get ( index ) ; l i s t a. remove ( index ) ; Listan koko on alustettaessa 0! Lista muuttaa kokoaan. Älkää antako Array-sanan ArrayListissä hämätä (pitkä tarina) Jyry Suvilehto 35

Taulukot ja Listat Yhteistä Käytetään tiedon tallentamiseen. Käytetään laajalti. Eroja Koon dynaamisuus. Jyry Suvilehto 36

Poikkeustenkäsittely Kuva: OteLipesiTangostaException Poikkeustenkäsittely on turvaverkkojen asettelua "taktisiin"kohtiin Poikkeustenkäsittely sisältää myös toimenpiteet "takaisin nuoralle"pääsemiseksi Jyry Suvilehto 37

Lisää poikkeustenkäsittelystä try { t h i s. t a i t e i l e ( ) ; }catch ( OteLipesiTangostaException o ){ t h i s. n ousetakaisin ( ) ; } Poikkeukset ovat aina olioita ja perivät yliluokan Exception Jyry Suvilehto 38

Perintä Selitetään hieman esimerkkitentin yhteydessä Pääperiaatteita Laiskuus Asioiden mekaaninen toisto on ikävää Muutosten helppous Kun laiskuus on maksimissaan, kaikki muutokset tehdään vain yhteen paikkaan Jyry Suvilehto 39

Käydäänpä läpi vanha tentti Ikävä kyllä Kertun tentit eivät helpotu tilastollisella tenttitehtäväanalyysillä Tenttikysymykset virittävät kurssin aihealueen varsin tarkkaan Viime aikoina ollut varsin koodauspainotteisia tehtäviä ja kysymyksiä poikkeustenkäsittelystä ja perinnästä Jyry Suvilehto 40