Ohjelmointi 1 / syksy Ensimmäinen luento. Paavo Nieminen.

Samankaltaiset tiedostot
Ohjelmointi 1 / syksy Ensimmäinen luento. Paavo Nieminen.

19/20: Ikkuna olio-ohjelmoinnin maailmaan

Ohjelmistotekniikan menetelmät, koe

17/20: Keittokirja IV

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Ohjelmointi 2 / 2010 Välikoe / 26.3

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

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

Metodien tekeminen Javalla

8/20: Luokat, oliot ja APIt

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

13/20: Kierrätys kannattaa koodaamisessakin

Ohjelmistojen mallintaminen, mallintaminen ja UML

Luokat ja oliot. Ville Sundberg

11/20: Konepelti auki

Ohjelmoinnin perusteet, syksy 2006

1 Tehtävän kuvaus ja analysointi

1. Mitä tehdään ensiksi?

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

Ohjelmointi 1 / syksy /20: IDE

7/20: Paketti kasassa ensimmäistä kertaa

5/20: Algoritmirakenteita III

OHJELMISTOKEHITYS -suuntautumisvaihtoehto

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Tietotekniikan koulutusohjelman suuntautumisvaihtoehdot

9. Periytyminen Javassa 9.1

ITKP102 Ohjelmointi 1 (6 op)

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

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

Java-kielen perusteet

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

58131 Tietorakenteet ja algoritmit (syksy 2015)

Tietorakenteet (syksy 2013)

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Mikä yhteyssuhde on?

Olio-ohjelmointi Javalla

Tietotekniikan valintakoe

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

1. Olio-ohjelmointi 1.1

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

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

12. Javan toistorakenteet 12.1

11. Javan toistorakenteet 11.1

Java kahdessa tunnissa. Jyry Suvilehto

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

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

12. Javan toistorakenteet 12.1

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

YHTEYSSUHDE (assosiation)

Taulukoiden käsittely Javalla

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

Ohjelmistojen mallintaminen. Luento 3, 9.11.

9. Periytyminen Javassa 9.1

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

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmistotekniikan menetelmät, käyttötapauksiin perustuva vaatimusmäärittely

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Javan perusteita. Janne Käki

1. Omat operaatiot 1.1

UML ja luokkien väliset suhteet

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

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

Tuen tarpeen tunnistaminen

Pakkauksen kokoaminen

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

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Matikkaa KA1-kurssilaisille, osa 3: suoran piirtäminen koordinaatistoon

Java-kielen perusteita

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

Tuen tarpeen tunnistaminen

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

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

Ohjelmoinnin perusteet, kurssikoe

Rajapinta (interface)

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Tietokoneverkot. T Tietokoneverkot (4 op) viimeistä kertaa CSE-C2400 Tietokoneverkot (5 op) ensimmäistä kertaa

Ohjelmistojen mallintaminen, kesä 2009

Seuraavassa on esimerkki for-, while- ja do-while -lauseesta:

Algoritmit 2. Luento 14 Ke Timo Männikkö

Palautekysely tilastollisen signaalinkäsittelyn kurssiin

13. Loogiset operaatiot 13.1

Ohjelmoinnin peruskurssi Y1

T Ohjelmistojen määrittely- ja suunnittelumenetelmät

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

4. Olio-ohjelmoinista lyhyesti 4.1

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

2. Olio-ohjelmoinista lyhyesti 2.1

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Transkriptio:

Ohjelmointi 1 / syksy 2007 Ensimmäinen luento Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/35

Jatkuva tiedotus WWW:n kautta Syksyn 2007 ajan: http://www.cc.jyu.fi/~nieminen/ohj1/ Ohjelmointi 1 / syksy 2007 p.2/35

Tärkeä huomautus Luentokalvot on kirjoitettu Java-ohjelmointikielellä. Kieltä ei vielä ole tarkoituskaan osata! Lähtötaso-oletus tällä kurssilla on nolla eli ei mitään tietoa mistään. Tarkoitus on demonstroida, että Ohjelmointikieli ei ole pelottavaa. Se on yksi tapa kuvailla maailmaa. Ohjelmasta voi hahmottaa ainakin jotakin, jopa paljonkin, vaikkei vielä osaisi kieltä. Ohjelmointi 1 / syksy 2007 p.3/35

Luennon suorittava Java-ohjelma / L e i k k i m i e l i n e n ohjelma, joka t o i m i i l u e n t o k a l v o i n a O h j e l m o i n t i 1 k u r s s i n ensimmäisellä l u e n n o l l a. L i i a n y k s i n k e r t a i n e n ollakseen ns. oikea ohjelma! @author Paavo Nieminen <nieminen@jyu. f i > @version 0.1 / public class EkaLuentoOhjelma { public static void main ( S t r i n g [ ] args ) { Y l i o p i s t o K u r s s i ohj1 = new OhjelmointiYkkonen ( ) ; ohj1. toteutaluento ( 1 ) ; / / ohj1. toteutaluento ( 2 ) ; / / FIXME t o t e u t t a a vasta ekan. } } Ohjelmointi 1 / syksy 2007 p.4/35

Tietty kurssi Javalla mallinnettuna / Tämä on j o h d a n t o k u r s s i o h j e l m o i n n i s t a. / public class OhjelmointiYkkonen extends Y l i o p i s t o K u r s s i implements Verkkokurssi, LukioonSoveltuva { } / Oletuksena muodostetaan syksyn 2007 k u r s s i n kokoonpano / public OhjelmointiYkkonen ( ) {... } public void toteutaluento ( int luennonnumero ) {... } public void taukominuutteja ( double m ) {... } public void a r v o s t e l e ( ) {... } public int opintopistemaara ( ) { return 6 ; }... HUOM: Kolme pistettä... ohjelmalistauksessa tarkoittaa usein, että tässä kohtaa on oikeasti paljon muutakin, mutta juuri nyt ei olla tarkemmin kiinnostuneita juuri siitä. Ohjelmointi 1 / syksy 2007 p.5/35

Abstrakti yliopistokurssi ( yläkäsite Ohjelmointi 1:lle) / K a i k i l l e y l i o p i s t o k u r s s e i l l e y h t e i s e t p i i r t e e t. / public abstract class Y l i o p i s t o K u r s s i { public static final int MAX_ARVOSANA = 5; public static final int MIN_ARVOSANA = 1; public abstract int opintopistemaara ( ) ; private Henkilo l u e n n o i t s i j a ; private Henkilo [ ] t u n t i o p e t t a j a t ; private Henkilo [ ] o p i s k e l i j a t ; private double [ ] o p i s k e l i j o i d e n T e n t t i p i s t e e t ; } public abstract void toteutaluento ( int monesko ) ;... HUOM: Entä SUOR/HYL -arvostelu? Monta luennoitsijaa? Ohjelmointi 1 / syksy 2007 p.6/35

Suorittaminen alkakoon! 1 / 2 L e i k k i m i e l i n e n ohjelma, joka t o i m i i l u e n t o k a l v o i n a 3 O h j e l m o i n t i 1 k u r s s i n ensimmäisellä l u e n n o l l a. 4 L i i a n y k s i n k e r t a i n e n ollakseen ns. oikea ohjelma! 5 6 @author Paavo Nieminen <nieminen@jyu. f i > 7 @version 0.1 8 / 9 public class EkaLuentoOhjelma { 10 public static void main ( S t r i n g [ ] args ) { 11 Y l i o p i s t o K u r s s i ohj1 = new OhjelmointiYkkonen ( ) ; 12 ohj1. toteutaluento ( 1 ) ; 13 } 14 } HUOM: Rivinumerot eivät kuulu ohjelmaan, mutta ne helpottavat selittämistä. Ohjelmointi 1 / syksy 2007 p.7/35

Kurssiyksilö muodostuu suorittamalla tarvittava alustus! 1 public class OhjelmointiYkkonen extends Y l i o p i s t o K u r s s i 2 implements Verkkokurssi, LukioonSoveltuva { 3 4 / Oletuksena muodostetaan syksyn 2007 k u r s s i n kokoonpano / 5 public OhjelmointiYkkonen ( ) { 6 a s e t a L u e n n o i t s i j a k s i ( 7 Jyu. henkkuntanimella ( "Paavo Nieminen" ) ) ; 8 Henkilo [ ] t u n t i o p e t = new Henkilo [ 4 ] ; 9 t u n t i o p e t [ 0 ] = Jyu. henkkuntanimella ( "Jarmo Ernvall " ) ; 10 t u n t i o p e t [ 1 ] = Jyu. o p i s k e l i j a N i m e l l a ( " Joel Lehtonen" ) ; 11 t u n t i o p e t [ 2 ] = Jyu. o p i s k e l i j a N i m e l l a ( "Juho Tamminen" ) ; 12 t u n t i o p e t [ 3 ] = Jyu. o p i s k e l i j a N i m e l l a ( " Irene Venäläinen" ) ; 13 a s e t a O p e t t a j i k s i ( t u n t i o p e t ) ; 14 a s e t a O p i s k e l i j o i k s i ( 15 Jyu. k e t k a K u r s s i l l a ( " Ohjelmointi 1 syksy 2007" ) ) ; 16 } Ohjelmointi 1 / syksy 2007 p.8/35

Suorittaminen jatkuu: Tapahtuu luento! Suoritusjärjestys on: ensin piti muodostaa kurssi (rivi # 11) Sen jälkeen voi pyytää kurssiyksilön tarjoamaa palvelua, luennon numero 1 toteuttamista: 11 Y l i o p i s t o K u r s s i ohj1 = new OhjelmointiYkkonen ( ) ; 12 ohj1. toteutaluento ( 1 ) ;... ja OhjelmointiYkkonen -tyyppinen kurssiyksilö sitten toteuttaa luennon... Ohjelmointi 1 / syksy 2007 p.9/35

(jatkoa OhjelmointiYkkosen toteutuksesta.) 17 / Toteuttaa luennon, jonka järjestysnumero annetaan. / 18 public void toteutaluento ( int luennonnumero ) { 19 if ( luennonnumero == 1 ) { 20 Henkilo l u e n n o i t s i j a = this. annaluennoitsija ( ) ; 21 Henkilo [ ] o p i s k e l i j a t = this. a n n a O p i s k e l i j a t ( ) ; 22 Henkilo [ ] t u n t i o p e t t a j a t = this. annatuntiopet ( ) ; 23 24 / Henkilöiden e s i t t e l y t / 25 l u e n n o i t s i j a. e s i t t e l e I t s e s i ( ) ; 26 27 for ( int i =0; i < t u n t i o p e t t a j a t. length ; i ++){ 28 Henkilo t u n t i o p e = t u n t i o p e t t a j a t [ i ] ; 29 t u n t i o p e. e s i t t e l e I t s e s i ( ) ; 30 } Ohjelmointi 1 / syksy 2007 p.10/35

(jatkoa edellisestä.) 31 / Ensimmäisen luennon a s i a t / 32 l u e n n o i t s i j a. otaopetettavaksi ( o p i s k e l i j a t ) ; 33 l u e n n o i t s i j a. virittaydytunnelmaan ( " Ohjelmointi 1, s07" ) ; 34 35 l u e n n o i t s i j a. kerroaiheesta ( "Kurssin kuvaus" ) ; 36 l u e n n o i t s i j a. kerroaiheesta ( " Suoritusvaatimukset" ) ; 37 l u e n n o i t s i j a. kerroaiheesta ( " Arvostelu " ) ; 38 l u e n n o i t s i j a. kerroaiheesta ( " Aikataulu " ) ; 39 l u e n n o i t s i j a. kerroaiheesta ( "Demot" ) ; 40 l u e n n o i t s i j a. kerroaiheesta ( " Harjoitustyö " ) ; 41 l u e n n o i t s i j a. kerroaiheesta ( " Oikotiet / tenttiminen " ) ; 42 43 l u e n n o i t s i j a. vastaakysymyksiin ( ) ; 44 taukominuutteja ( 1 5. 0 ) ; Ohjelmointi 1 / syksy 2007 p.11/35

(jatkoa edellisistä.) 45 l u e n n o i t s i j a. kerroaiheesta ( " Mitä on ohjelmistotyö " ) ; 46 l u e n n o i t s i j a. kerroaiheesta ( " Mitä on ohjelmointi " ) ; 47 l u e n n o i t s i j a. kerroaiheesta ( "Tämän kurssin r o o l i " ) ; 48 l u e n n o i t s i j a. kerroaiheesta ( " Opittavat k ä s i t t e e t " ) ; 49 l u e n n o i t s i j a. kerroaiheesta ( " Yleiskuva kurssin luennoista" ) ; 50 l u e n n o i t s i j a. kerroaiheesta ( "Toimintaympäristömme" ) ; 51 l u e n n o i t s i j a. kerroaiheesta ( "Tämän viikon kotitehtävät " ) ; 52 l u e n n o i t s i j a. vastaakysymyksiin ( ) ; 53 l u e n n o i t s i j a. k i i t a J a P o i s t u ( ) ; 54 return ; 55 } 56 } HUOM: Vaikka Java-ohjelmana ensimmäinen luento päättyisi näin, todellisessa maailmassa jatketaan vielä yhteenvedolla, jos suinkin jää aikaa. Ohjelmointi 1 / syksy 2007 p.12/35

Ohjelma on päättynyt. Sovellusohjelmassa oli kaksi riviä, jotka on nyt suoritettu: / L e i k k i m i e l i n e n ohjelma, joka t o i m i i l u e n t o k a l v o i n a O h j e l m o i n t i 1 k u r s s i n ensimmäisellä l u e n n o l l a. @author Paavo Nieminen <nieminen@jyu. f i > @version 0.1 / public class EkaLuentoOhjelma { public static void main ( S t r i n g [ ] args ) { Y l i o p i s t o K u r s s i ohj1 = new OhjelmointiYkkonen ( ) ; ohj1. toteutaluento ( 1 ) ; } } Vaikka sovellus oli lyhyt, sen käyttämät oliot suorittivat paljon toimenpiteitä. Ohjelmointi 1 / syksy 2007 p.13/35

Tehdään yhteenveto ja huomioita. Vaikka tavoite oli puhtaasti olla kalvosarja, kaikki Java-ohjelmointikielellä kirjoitettu toimii ohjelmana, joka voidaan suorittaa tietokoneella. ( näytetäänpä esimerkki videoscreenillä) Ohjelma on yksi tapa ilmaista asioita täsmällisesti. Eritoten ohjelmalla voi kuvata toimenpiteiden suunnitelmallista toteuttamista jossain järjestyksessä joidenkin tapahtumien (tai kuten meilläpäin sanotaan, syötteiden) ilmetessä. Ohjelmointi 1 / syksy 2007 p.14/35

Näkökulma ohjelmointiin: mallintaminen Ohjelma voi olla malli reaalimaailmasta eli ns. jonkinlainen simulaattori. On vaikea edes keksiä ohjelmaa, joka ei olisi malli jostakin joko todellisesta tai epätodellisesta sydeemistä, esim: pelit ovat malleja virtuaalimaailmoista pankkijärjestelmät ovat malleja tileistä, asiakkaista, rahavirroista ym. musiikkisoftat ovat malleja nuoteista, instrumenteista, reaalimaailman ääni-ilmiöistä ym. Silloin ohjelma on useimmiten epätäydellinen ja/tai epätarkka verrattuna todellisuuteen. Mallit useimmiten ovat! Siltä ei voi välttyä! Ohjelmointi 1 / syksy 2007 p.15/35

Ohjelmointikielen rooli Ohjelmointikielellä ilmaiseminen on vain yksi tapa esittää malli. Se on tarkin esitysmuoto ohjelmalle ja siinäpä sen yksi alkuvaikeus onkin... Jotta ohjelmakoodi on mahdollista kirjoittaa tai ymmärtää, täytyy ihmisen osata pohtia sen merkitystä jollain abstraktimmilla tavoilla! Suoraan ohjelmointikieleen on vaikea hypätä (paitsi triviaaleissa ohjelmissa, joista ei ole kunnon hyötyä kenellekään... )! Ohjelmointikieli on välttämätön, koska tieto(kone)järjestelmä ymmärtää vain sellaista. Silti ohjelmointi on paljon enemmän kuin kieli! Ohjelmointi 1 / syksy 2007 p.16/35

Malli on näkymä ohjelmaan. Ohjelmointikieli on siis tarkin mahdollinen malli. Mitä yksinkertaisempaa/yleispätevämpää on? Vain pari esimerkkiä: Algoritmimallit (esitys esim. pseudokoodina ) Oliomallit (luokittelu, luodut yksilöt) Tapahtumien järjestyksen ja osallistujien kuvaukset Käyttöliittymäkuvaukset (esim. screenshotit ) Järjestelmämallit (mukana ihmiset, laitteet, tietovarastot, kommunikaatio,... ) HUOM: Olennaista on osata mallin asteittainen tarkentaminen: Ensin karkea malli, sitten hienojakoisempi ja hienojakoisempi... lopulta ohjelmointikieltä... mutta vasta lopulta! Ohjelmointi 1 / syksy 2007 p.17/35

Näyttäisinkö esimerkkejä mallinnuksesta? Vaikeus: Pitäisi kuulemma välttää perinteistä yliopistovirhettä, että asioiden esitys menee yli hilseen... Tarkoitus on oppia vain ohjelmoimaan, joten kannattaako edes näyttää mitään muuta? Luennoitsijan näkemys 1: abstraktit esitysmuodot on nimenomaan kehitetty yksinkertaistamaan mm. ohjelmien ymmärtämistä! Niitä katsomalla pitäisi kenen tahansa vastaantulijan tajuta... ainakin jotain... Mm. siksi ne ovat paljolti kuvallisia ja jättävät kertomatta paljon yksityiskohtia. Ohjelmointi 1 / syksy 2007 p.18/35

Näyttäisinkö sittenkään esimerkkejä? Luennoitsijan näkemys 2: Ohjelmointitaito on välttämätön näiden kuvien piirtämiselle ja ns. täydelliselle ymmärtämiselle, mutta ei niiden katsomiselle ja niiden kautta oppimiselle. Luennoitsijan oletus: Näiden katselu tukee ja helpottaa (mutta ei yksinään tee mahdolliseksi!) ohjelmoinnin oppimista Fakta: Monien eli ohjelmamallien syvällinen merkitys ja se, miten näitä kannattaa tehdä, on ehdottomasti jatkokurssien asia (mm. Oliokeskeinen tietojärjestelmien kehittäminen, Johdatus ohjelmistotekniikkaan,... ). Ohjelmointi 1 / syksy 2007 p.19/35

Taidanpa siis näyttää vähän kuvia... Aika paljon IT-opinnoista tulee pyörimään näiden parissa, joten mielelläni otan ne mukaan heti aluksi! Ohjelmointi 1 / syksy 2007 p.20/35

Esim: Moduulijakokaavio Ohjelmointi 1 / syksy 2007 p.21/35

Esim: Luokkakaavio Ohjelmointi 1 / syksy 2007 p.22/35

Esim: Oliokaavio Ohjelmointi 1 / syksy 2007 p.23/35

Esim: Sekvenssikaavio Tämä on varmaan viimeinen sekvenssikaavio Ohjelmointi 1 -kurssilla, koska emme pääse olioiden välisten toimenpiteiden suunnitteluun vielä juurikaan käsiksi... Ohjelmointi 1 / syksy 2007 p.24/35

Esim: Käyttötapauskaavio Ohjelmointi 1 / syksy 2007 p.25/35

Esim: Pseudokoodi mitä se on Tarkoituksella ei puhtaasti ohjelmointikieltä Kuitenkin rakenteeltaan vastaavaa + riittävän täsmällistä Voi kirjoittaa lähes siten kuin jotakin tuntemaansa ohjelmointikieltä Tavoite 1: kuka tahansa ohjelmointitaitoinen ymmärtää, vaikkei osaisikaan nimenomaan samoja ohjelmointikieliä kuin kirjoittaja Tavoite 2: ohjelmointitaitoinen osaa toteuttaa itse tuntemallaan kielellä Ohjelmointi 1 / syksy 2007 p.26/35

Esim: Pseudokoodi mihin soveltuu Pseudokoodi on hyvä kommunikointikeino ohjelmoinnillisten ideoiden siirtoon. Se on myös suhteellisen täsmällinen tapa kirjoittaa algoritmi. Suositeltava vaihe algoritmin suunnittelussa ennen ohjelmointia Esimerkki: Kirjoita pseudokoodina, miten koordinoidaan, että jokainen opettaja vastaa kaikkien opiskelijoiden kaikkiin kysymyksiin. Ohjelmointi 1 / syksy 2007 p.27/35

Esim: Pseudokoodi, lähes suomea Toimenpide vastauskaikkiinkysymyksiin : / Oletetaan, e t t ä on h e n k i l ö i t ä s i s ä l t ä v ä t rakenteet : o p i s k e l i j a t j a o p e t t a j a t / jokaiselle o p i s k e l i j a l l e tee seuraavaa : p u r i s t a kysymykset i r t i o p i s k e l i j a s t a jokaiselle kysymykselle tee seuraavaa : jokaiselle o p e t t a j a l l e tee seuraavaa : Kommunikoi o p i s k e l i j a l l e o p e t t a j a n vastaus kysymykseen / On j ä t e t t y v i e l ä tarkentamatta, miten kysymys p u r i s t e t a a n i r t i o p i s k e l i j a s t a. Vaikeampia osatehtäviä kannattaakin m i e t t i ä e r i l l i s i n ä, aina pienemmiksi o s a t e h t ä v i k s i pilkkoen. Samoin on j ä t e t t y tarkentamatta, miten vastaus kommunikoidaan o p i s k e l i j a l l e. Osatehtävät on k u i t e n k i n pseudokoodissa j o o i k e i l l a p a i k o i l l a a n! / Ohjelmointi 1 / syksy 2007 p.28/35

Esim: Algoritmi suomen kielellä Pseudokoodi on jo lähellä tietokonetoteutusta. Ennen pseudokoodia, on varmasti aina hyvä miettiä tehtävää parhaiten tuntemallaan kielellä, yleensä meilläpäin suomeksi. Esim: Tiskaaminen tarkemmin ajatellen on sitä, että 1) jos on vielä likaisia astioita, niin otan niistä seuraavan käteeni 2) harjaan sitä kunnes se ei ole likainen 3) laitan astian kuivumaan 4) siirryn seuraavaan likaiseen astiaan eli palaan kohtaan 1. Ohjelmointi 1 / syksy 2007 p.29/35

Esim: Raapustukset Kynä ja paperi näppiksen viereen! Jos voit piirtää, kirjoittaa tai tuhrata ruutupaperiin ihan mitä tahansa, joka auttaa sinua ajattelemaan ohjelmointiongelmaasi, TEE SE! Älä tuijota kuvaruutua vaan ajattele aivoilla, käsillä, jaloilla, millä se helpoiten vaan käy! Tartu näppikseen vasta kun on jotain kirjoitettavaa ohjelmointikielellä. Silloin sinulla on jo tärkein eli ajatus. Ohjelmointi 1 / syksy 2007 p.30/35

Missä määrin Ohj1:llä mallinnetaan Algoritmit, algoritmien tarkentaminen asteittain ja niiden ajatteleminen pseudokoodina on kurssin tärkein (oikeastaan AINOA) asia! Java on työkalumme; sen osaaminen tulee pakosti kaupan päälle. Java perustuu täysin olioiden hyödyntämiseen, joten olioita on ymmärrettävä. Ymmärrämme oliot alustavasti, mutta emme suunnittele niitä vielä! Ohj2, GKO, projektityöt Emme suunnittele järjestelmiä kurssit mallintamisesta ja järjestelmäsuunnittelusta (Oliokeskeinen tietojärjestelmien kehittäminen jne.) Kuitenkin ymmärrämme pienenkin ohjelman olevan tietynlainen (yksinkertainen) järjestelmä Ohjelmointi 1 / syksy 2007 p.31/35

Säännöt on tehty rikottaviksi? Edellä sanottiin, että ensin pitää mallintaa ja sitten tehdä ohjelma... Siihen onkin syytä palata aina, kun jonkun ohjelman tekeminen tuntuu vaikealta! Mutta yksi ohjelmoinnin ilo on, että voit vaan kirjoitella ohjelmointikieltä ja kokeilla mitä kivaa mikäkin tekee. Voit muokkailla ohjelmaa mielin määrin, kunnes se on mallina ihan eri kuin aluksi... Kunhan JATKUVASTI YMMÄRRÄT, mitä ohjelmasi tekee, miksi se tekee juuri niin, ja onko se riittävän hyvä tapa kulloiseenkin tarkoitukseesi!! Hallitusti tehtynä tämä on ihan oikea suunnittelumenetelmä. Ohjelmointi 1 / syksy 2007 p.32/35

Yhteenveto Tämä oli shokkialoitus ohjelmointiin Hämmennys ja ihmettely on toivottu olotila ;) Ensi viikolla otetaan rauhallisempi lähtöruutu Herännee kysymys: mikä tässä kaikessa oli olennaista? Ohjelmointi 1 / syksy 2007 p.33/35

Olennaista oli Ohjelmointikieli on ainoa mitä tietokone ymmärtää Ohjelmointikieli on vain kieli kielien joukossa; joku hullu voi kuvata sillä vaikka luennon etenemisen aiheesta toiseen! Ohjelmointikieli on vain yksi monista perspektiiveistä nähdä tietokoneohjelma Jostain päästä aina aloitetaan: Ohjelmointi 1 keskittyy algoritmien tekemiseen, joka on kaiken ohjelmoinnin peruslähtökohta Suuri osa äsken nähdyistä asioista jätetään hautumaan tulevia kursseja varten. Ohjelmointi 1 / syksy 2007 p.34/35

Ensi viikolla nähdään! Tehkää ahkerasti demoja ja muistakaa myös ajatella. Seuraava luento on maanantaina 17.9. klo 12. Luvassa esimerkkiohjelmia, lofi-actionia (?) ja kielioppien ymmärtämisen alkeita. Ohjelmointi 1 / syksy 2007 p.35/35