Olio-ohjelmoinnin perusteet Lewis & Loftus & Jukka Juslin 1
Kurssin fokus Oliosuuntautunut ohjelmakehitys Ongelmanratkaisu Ohjelman suunnittelu, toteutus ja testaus Oliosuuntautuneisuuden käsitteitä luokat oliot kapselointi periytyminen monimuotoisuus Java ohjelmointikieli Lewis & Loftus & Jukka Juslin 2
Johdanto Ensin tarkastelemme tietokoneohjelmien perusteita Luku 1 keskittyy seuraaviin: Eclipse työkalu johdanto Javaan oliosuuntautuneen maailman käsitteitä Lewis & Loftus & Jukka Juslin 3
Missä ollaan? Tietojenkäsittely Hardwaren osat Verkot Java ohjelmointikieli Ohjelman kehittäminen Oliopohjainen ohjelmointi Lewis & Loftus & Jukka Juslin 4
Java Ohjelmointikieli määrittää mitä sanoja ja symboleja voimme käyttää ohjelman kirjoittamiseksi Ohjelmointikieli ottaa käyttöön joukon sääntöjä, jotka määräävät kuinka sanoja ja symboleja voidaan laittaa yhteen muodostamaan valideja ohjelman statementteja (käskyjä) Java ohjelmointikielen loi ja sen ylläpidon omistaa Sun Microsystems, Inc (pääsuunnitteluja James Gosling). Java esiteltiin 1995 ja se on leveisyys on kasvanut nopeasti sen jälkeen. Vuonna 2004 esiteltiin J2SE versio 5, joka on suurin muutos sitten vuoden 1995. Lewis & Loftus & Jukka Juslin 5
2000-luvun Java Katsaus tilanteseen: Javasta on tullut wwwsovelluksille hyvin soveltuva tekniikka (tämä ei koske kuitenkaan appletteja) Javan työvälinekirjasto on laajentunut huomattavasti vuoden 2004 J2SE 1.5 version myötä Javan ohjelmointi on laajasti omaksuttua Lewis & Loftus & Jukka Juslin 6
Java ohjelman rakenne Java ohjelmointikielessä: Ohjelma koostuu yhdestä tai useista luokista Luokka sisältää yhden tai enemmän metodeita Metodi sisältää ohjelman käskyt Näitä käsitteitä käsitellään yksityiskohtaisesti tämän kurssin aikana (tosin käskyt-käsite on harvemmin käytetty: lähinnä aina mukana näkymättömästi) Ajettavassa Java-ohjelmassa on aina oltava mainniminen metodi Lewis & Loftus & Jukka Juslin 7
Java ohjelman rakenne // kommentit luokkaa koskien public class CokisAutomaatti { luokan headeri luokan runko } Kommentit voidaan sijoittaa minnetahansa Lewis & Loftus & Jukka Juslin 8
Java ohjelman rakenne // kommentit luokkaa koskien public class CokisAutomaatti { // kommentit metodia koskien public static void main (String[] args) { metodin runko metodin headeri } } Lewis & Loftus & Jukka Juslin 9
Java-ohjelman tyyli Java ohjelman tyyli on keskeinen asia, jotta ohjelmia voi ymmärtää Tyyli pitää olla Java Coding Conventionin mukainen (google hakusana: java coding convention) -> helpottaa lukemista JCC sisältää lisää tietoa siitä miksi JCC on tärkeä Koodin rivinmitta pitää olla enintään 80 merkkiä Lewis & Loftus & Jukka Juslin 10
Kommentit Ohjelman kommentteja kutsutaan inline dokumentaatioksi (helppo ylläpitää ajantasalla!) Inline dokumentaatiota pitää lisätä selvittämään ohjelman (tai luokan) tarkoitusta ja prosessoinnin askeleita Kommentit eivät vaikuta siihen kuinka ohjelma toimii Java kommenteilla on kolme muotoa: // tämä kommentti jatkuu rivin loppuun asti /* tämä kommentti jatkuu terminointi symboliin asti, myös rivinvaihtojen yli*/ /** tämä on javadoc kommentti */ Lewis & Loftus & Jukka Juslin 11
Tunnisteet (identifiers) Tunnisteet ovat sanoja, joita ohjelmoija käyttää ohjelmassa Tunnisteet voivat olla luokan nimiä, attribuutin nimiä, metodin nimiä tai metodin sisällä pelkkiä muuttujien nimiä Tunniste voi koostua kirjaimista, numeroista ja alaviivamerkistä tai dollarinmerkistä (alaviivaa ja dollarinmerkkiä käytetään harvoin) Tunnisteet eivät voi alkaa numerollat Java on ns. case sensitive - Total, total, ja TOTAL ovat kaikki eri tunnisteita Konvention mukaan, ohjelmoijat käyttävät isoja ja pieniä kirjaimia erityyppisille tunnisteille, kuten: eka kirjain isolla luokan nimille - Lincoln kaikki isolla vakioille - MAXIMUM Lewis & Loftus & Jukka Juslin 12
Tunnisteet Joskus valitsemme tunnisteita itse kun kirjoitamma ohjelmaa (kuten Lincoln) Joskus käytämme toisen ohjelmoijan koodia, jolloin käytämme tunnisteita joita hän on valinnut (kuten println) Usein käytämme varattuja sanoja, joilla on jo valmiiksi määritetty tarkoitus ohjelmointikielessä Varattua sanaa ei voi käyttää muullatavalla Lewis & Loftus & Jukka Juslin 13
Varatut sanat Javan varatut sanat: abstract assert boolean break byte case catch char class const continue default do double else enum extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static strictfp super switch synchronized this throw throws transient true try void volatile while Lewis & Loftus & Jukka Juslin 14
Tyhjä tila Välilyöntejä, tyhjiä rivejä ja tabulaattoreita kutsutaan tyhjäksi tilaksi Tyhjää tilaa käytetään erottamaan sanat ja symbolit ohjelmassa Ylimääräinen tyhjä tila ignoroidaan Validi Java-ohjelma voidaan muotoilla monella tavalla Ohjelmat pitäisi muotoilla niin, että niiden luettavuus on mahdollisimman hyvä käyttäen vakiosisennyksiä (tabit konvertoidaan automaattisesti välilyönneksi, textpad asetus, emacsissa oletusarvoisesti) Lewis & Loftus & Jukka Juslin 15
Missä ollaan? Tietojenkäsittely Hardwaren osat Verkot Java ohjelmointikieli Ohjelman kehittäminen Oliopohjainen ohjelmointi Lewis & Loftus & Jukka Juslin 16
Ohjelman kehittäminen Ohjelman kehittämisen mekaniikka sisältää seuraavia aktiviteetteja Ohjelman kirjoittaminen tietyllä ohjelmointikielellä (kuten Java) Ohjelman kääntäminen muotoon, jonka tietokone voi suorittaa Erityyppisten virheiden etsiminen ja korjaaminen (joita voi esiintyä) Ohjelmistotyökaluja voidaan käyttää auttamaan kaikkien näiden osien kanssa Virheiden etsiminen tulostuslauseiden kautta Haluttujen testien määrittäminen ennen toteutusta (XP) Lewis & Loftus & Jukka Juslin 17
Kielen tasot On olemassa neljä ohjelmointikielten tasoa: konekieli assembly kieli korkean tason kieli neljännen sukupolven kieli Jokaisella CPU-tyypillä on oma spesifinen konekielensä Ylemmät tasot luotiin, jotta ihmisen olisi helpompi lukea ja kirjoittaa ohjelmia Kehitys on ollut aina korkeampaan abstraktiotasoon, koska tämä saattaa parantaa tuottavuutta. Toisaalta abstraktiotaso ei tietyiltä osiltaan ole juurikaan muuttunut viimeisen 30 vuoden aikana. Lewis & Loftus & Jukka Juslin 18
Ohjelmointikielet Jokainen CPU tyyppi suorittaa vain tietynlaista konekieltä Ohjelma pitää kääntää konekielelle, ennenkuin se voidaan suorittaa Kääntäjä on ohjelmallinen väline, joka kääntää lähdekoodin tietylle kohdekielelle Usein, kohdekieli on konekieli juuri tietylle CPU tyypille Javan lähestymistapa on hieman erilainen Lewis & Loftus & Jukka Juslin 19
Javan kääntäminen Java kääntäjä kääntää Java lähdekoodin erikoiseksi esitykseksi, jota kutsutaan bytecodeksi Java bytecode ei ole minkään perinteisen koneen konekieltä Toinen ohjelmistotyökalu, kutsutaan tulkiksi (interpreter), kääntää bytecoden konekieleksi ja suorttaa sen Siksi Java kääntäjä ei ole sidottu mihinkään tiettyyn koneeseen (mutta Java JRE, Java Runtime Environment on) Javaa kutsutaa arkkitehtuuri-neutraaliksi Lewis & Loftus & Jukka Juslin 20
Javaohjelman kääntäminen Java lähde koodi Java bytecode Java kääntäjä (compiler) Bytecode kääntäjä Bytecode kääntäjä Machine code Lewis & Loftus & Jukka Juslin 21
Kehitysympäristöt On olemassa monia ohjelmia, jotka tukevat Java-ohjelmien kehittämistä - kuten: Sun Java Development Kit (JDK) Textpad, emacs yms. editorit Sun NetBeans IBM Eclipse Borland JBuilder JBoss BEA Weblogic MetroWerks CodeWarrior BlueJ jgrasp Vaikka näiden ympäristöjen yksityskohdat eroavat toisistaan, perus kääntäminen ja suorittaminen prosesseina ovat aina samoja Lewis & Loftus & Jukka Juslin 22
Syntaksi ja semantiikka Kielen syntaktiset säännöt määräävät kuinka me voimme laittaa yhteen symboleja, varattuja sanoja ja tunnisteita tehdäksemme validin ohjelman Kielen semantiikka määrittelee mitä tietty lause tarkoittaa (sen tarkoitus ja rooli ohjelmassa) Ohjelma, joka on syntaktisesti oikeellinen ei välttämättä ole loogisesti (semanttisesti) oikein Ohjelma tekee aina mitä käskimme sen tehdä, ei mitä tarkoitimme sen tekevän Lewis & Loftus & Jukka Juslin 23
Virheet Ohjelmassa voi olla kolmentyyppisiä virheitä Kääntäjä löytää syntax erroreita (virheitä kieliopissa) ja muista perustavaa laatua olevia ongelmia (käännösaikaiset virheet eli compile-time errors) Jos käännösaikainen virhe esiintyy, suoritettavaa ohjelmatiedostoa ei luoda Ongelma voi esiintyä ohjelman suorituksen aikana (execution), kuten nollalla jakaminen, joka voi aihetuttao ohjelman ennenaikaisen terminoinnin (ajonaikaiset virheet eli run-time errors) Ohjelma voi käynnistyä, mutta tuottaa vääriä tuloksia. Näin käy esimerkiksi jos käytetään väärää ratkaisukaavaa. Näitä kutsutaan loogisiksi virheiksi (logical errors) Lewis & Loftus & Jukka Juslin 24
Perusohjelmakehitys Editoi and Talleta (save) ohjelma virheitä Käännä ohjelma (compile) virheitä Suorita ohjelma (execute) ja evaluoi tulosten oikeellisuus Lewis & Loftus & Jukka Juslin 25
Missä ollaan? Tietojenkäsittely Hardwaren osat Verkot Java ohjelmointikieli Ohjelman kehittäminen Oliopohjainen ohjelmointi Lewis & Loftus & Jukka Juslin 26
Ongelmanratkaisu Ohjelman kirjoittamisen tarkoitus on ratkaista ongelma Ongelman ratkaiseminen koostuu useista aktiviteeteista: Ongelman ymmärtäminen Suunnittele ratkaisu Pohdi vaihtoehtoisia tapoja ratkaisuksi Toteuta ratkaisu Testaa ratkaisu (voi olla myös aikaisemmin valmiina, XP) Nämä aktiviteetit eivät ole puhtaasti lineaarisia, ne ovat ovat osittain päällekkäin ja vuorovaikuttava keskenään (loop) Lewis & Loftus & Jukka Juslin 27
Ongelmanratkaisu Avain suunniteltaessa ratkaisua on osittaa ongelma pienemmiksi palasiksi (joskus palaset on helpompi löytää kuin joskus toiste) Ohjelmia kirjoitettaessa suunnittelemme erillisiä osia, jotka ovat vastuussa ratkaisun tietyistä osista Oliopohjainen lähestymistapa merkitsee tämäntyyppistä vastauksen rakentamista Me jaamme ratkaisumme paloihin, joita kutsutaan olioksi ja luokiksi Lewis & Loftus & Jukka Juslin 28
Oliopohjainen ohjelmointi Java on oliopohjainen ohjelmointikieli Kuten termistä voi olettaa, olio on perustavaa laatua olevat osa Java ohjelmaa Olioita voidaan käyttää tehokkaasti esittämään tosimaailman kohteita Esimerkiksi olio voi esittää tiettyä yrityksen työntekijää Jokainen työntekijäolio vastaa ko. olion toiminnoista ja tiedon hallinnasta Lewis & Loftus & Jukka Juslin 29
Oliot Oliolla on: tila - kuvaavat ominaisuudet käyttäytyminen - mitä se voi tehdä (ja mitä sille voidaan tehdä) Pankkitilin tila sisältää tilin numeron ja senhetkisen saldon Pankkitiliin liittyvät ominaisuuuksiin kuuluu ottojen ja talletusten tekeminen tilille Huomaa, että olion toiminta voi muuttaa sen tilaa Lewis & Loftus & Jukka Juslin 30
Luokat Olio määritellään luokassa (public class) Luokka on olion piirustus (vrt. Rakennuksen rakentaminen vs. piirustus siitä) Luokka käyttää metodeita kuvatakseen olion käyttäytymisen Luokka, joka sisältää Java-ohjelman main-metodin esittää ajettavaa ohjelma Luokka esittää konseptia ja olio esittää tämän konseptin ruumiillistumaa Useita olioita voidaan luoda samasta luokasta Lewis & Loftus & Jukka Juslin 31
Oliot ja luokat luokka (konsepti) Olio (toteutuma) Pankkitili Matin pankkitili Saldo: 5,257 Monia olitoita samasta luokasta Mervin pankkitili Saldo: 1,245,069 Jukan pankkitili Saldo: 16,833 Lewis & Loftus & Jukka Juslin 32
Periytyminen Yksi luokka voi periä ominaisuuset toiselta periytymisen kautta Luokat voidaan organisoida hierarkioiksi Tili Laskutustili Pankkitili Säästötili Käyttötili Lewis & Loftus & Jukka Juslin 33
Työkaluja Tarpeellisia työkaluja kurssilla ovat: Windows: J2SE 1.5 Eclipse IDE WinSCP Dia uml-kaavion piirtoeditori tai MS Visio Lisäksi mahdollisia: Putty ssh Cygwin X-Server, Axe tms. Linux J2SE 1.5 Emacs tekstieditori tai Eclipse dia uml-kaavion piirtoeditori Työkaluja voit ladata täältä: http://myy.helia.fi/~jusju/ict02d/ict02dopiskelijancd/ Lewis & Loftus & Jukka Juslin 34
Kotitehtävä tälle illalle Asenna kotiisi tarvittava ohjelmointiympäristö: Windows tai Linux pohjainen Muut kotitehtävät annetaan harjoituksissa Lewis & Loftus & Jukka Juslin 35
Yhteenveto Luku 1 käsitteli seuraavia: Tietokoneen osat Kuinka nämä osat vuorovaikuttavat Kuinka tietokoneet tallettavat ja manipuloivat informaatiota Tietokoneverkot Internet ja World Wide Web Ohjelmointi ja ohjelmointikielet Johdanto Javaan Katsaus olio-ohjelmoinnin konsepteihin Lewis & Loftus & Jukka Juslin 36