Ohjelmointi on kivaa.
Etusivu Materiaalia -- Luennot -- Demot Opettajat  

ITKP102 Ohjelmointi 1 --- syksy 2007 --- Luentosuunnitelma

Korpissa on tarkka tieto luentojen ajoista ja paikoista. Pääsääntönä maanantaisin klo 12-14, tiistaisin klo 10-12. Videotaltioinnit julkaistaan saman päivän aikana.

Luentosuunnitelma

Tällaisiksi kurssin 20 luentoa lopulta muodostuivat. Otsikot eivät ihan aina vastanneet toteutunutta sisältöä, mutta jätin ne ennalleen, jotta kalvosarjat yhdistyvät siihen mitä nettisivulla näkyy. Luentovideot piti ikävä kyllä poistaa, koska nettisivulla tarvittiin lisää tilaa. Jos joku haluaa ne arkistojen kätköistä kaivaa, ne löytyvät kyllä pyydettäessä.

# vko  pv Otsikko Aiheet
1 37 ti Suoritus alkakoon! Yleiskuva kurssista ja ohjelmoinnista. Harjoitustehtäviksi (1/10): tietokoneen käyttöä ja ennakoivia pohdintapähkinöitä.
2 38 ma Mieleni minun tekevi, aivoni ajattelevi Työkalujen ohjeet. Tavoiteasettelua, esimerkkiohjelmia. Lähdekoodi, kääntäminen ja suorittaminen esimerkin kautta. Syntaksi, ohjelman käännösyksikön merkitys. Ohjelman toimintaympäristö: argumentit sekä syöttö- ja tulostusvirrat yleisesti (ei vielä juurikaan Javaan sidottuna)
3 38 ti Algoritmirakenteita I Oikeampi nimi: Ensimmäiset ohjelmat; lauseet, lausekkeet ja muuttujat. Syntaksin mukaisen ohjelman kirjoittaminen. Koodauskäytänteet. Kommentit. Tulostaminen. Peräkkäissuoritus, ensimmäisiä lauseita ja lausekkeita. Ohjelman toimintaympäristön ilmeneminen Javassa. Muuttujat, tyyppijärjestelmä, literaalit, kokonaislukuliteraalien esitysmuodot. Sijoituslause. Operaattori, presedenssi. Aliohjelmat alustavasti. Harjoitustehtäviksi (2/10): lauseita ja lausekkeita (lukeminen ja ymmärtäminen, kirjoittaminen; peräkkäisohjelmien tekemistä aliohjelmia hyödyntäen)
4 39 ma Algoritmirakenteita II Oikeampi nimi: Aliohjelmat, oliot, rajapinta, API. Täydennystä edelliseen: lisää tyypeistä ja literaaleista. Aliohjelman kutsuminen, parametrinvälitys ja paluuarvon sijoittaminen. Muistimallista alustavasti: pinomuisti ja aktivaatio mainittu. Olio ja luokka filosofisesti, mallinnusmielessä ja ohjelmointimielessä. Rajapinta, viestit ja piilotettu sisäinen tila. API ja dokumentaation lukeminen; esim. Javan API. System.out, System.err, System.in ovat olioita; out ja err samanlaisia (samaan luokkaan kuuluvia), in taas erilainen. Scanner- ja InputStream -luokkien yhteistoiminta.
5 39 ti Algoritmirakenteita III Loogiset lausekkeet ja totuusarvot. Ehtorakenne "if-else" ja ehdollinen suoritus. Toistorakenteet "for", "while", "do-while" ja toistuva suoritus. Muunnelmat suoritusjärjestyksessä: "return", "break", "continue". Valintarakenne "switch" ja valinnainen suoritus. Poikkeusten käsittely "try-catch-finally" Edellämainittuja vastaavat lauseet Javan syntaksissa. Harjoitustehtäviksi (3/10): algoritmien tekemistä ja muuntamista Java-koodiksi.
6 40 ma Tietorakenteita Aluksi "Se tärkein ohje", eli mistä löytyvät mukavuustaso, onnistumisen elämykset ja etenkin täsmälliset kysymykset, jotka ohjaavat kohti seuraavan asian oppimista. Avain on tehdä pienenpieni muutos kerrallaan, ja todeta seuraavan asian toimivuus. Sitten kohti laajempia tietorakenteita: taulukko, merkkijono (merkkijonot tarkemmin huomenna). Taulukon ilmeneminen Javassa: taulukko-oliot; perusidea ja syntaksit esittelyyn, alustukseen ja käyttöön.
7 40 ti Paketti kasassa ensimmäistä kertaa Taulukkoja sisältävät taulukot, esim. matriisi. Merkkijonot Javassa: String ja StringBuilder -luokkien oliot. Mitä se on kun on oliot: rajapinnan lukeminen ja käyttö. Yhteenvetoa: syntaksi, kontrolli- ja tietorakenteet, suhde algoritmeihin. Tehtäväkuvauksesta toimivaksi ohjelmaksi käyttäen asteittaista tarkentamista, ohjelmoinnillisia rakenteita ja lopulta ohjelmointikieltä. Harjoitustehtäviksi (4/10): Helpompia, lyhyempiä tehtäviä ja vähemmän kuin aiemmin; algoritmien tekemistä ja muuntamista Java-koodiksi.
8 41 ma Luokat, oliot ja APIt Koodauskäytänteiden merkitys; esimerkkejä selkeistä ja epäselkeistä koodeista. Hierarkkinen ja rekursiivinen ajattelumalli: esim. ohjelman suunnittelu, syntaksi, tiedon järjestäminen (tietorakenteet, tiedostojärjestelmä). Tarkennusta aliohjelmiin: kuormittaminen, ''method signature''. Tarkennusta olioiden käyttämiseen: luominen, konstruktori, rajapinta.
9 41 ti Puhu mun stdinille API-dokumentaation lukeminen: esim. String, StringBuilder/StringBuffer -APIt. Interaktiivisen ohjelman tekeminen. Scanner -luokka. Käyttäjän syötteen lukeminen, tarkistaminen ja muuntaminen tarvittuun esitysmuotoon. Integer, Double, Character ym. luokat. Poikkeukset ja niiden käsittely (pikaisesti; näihin siis palataan myöhemmin). Harjoitustehtäviksi (5/10): Interaktiivisten ohjelmien tekemistä
10 42 ma IDE IDEn käyttäminen, esim. Eclipse. Harjoitustyön vaatimusten ja työtapojen esittely. Varsinaiset aiheet jaetaan henkilökohtaisesti sähköpostilla noin viikon kuluessa.
11 42 ti Konepelti auki Debuggerin käyttäminen. Suorituskohta, kontrollin siirtyminen, kutsupino. Muistimalli: pino, keko. Viitteen käsite, roskienkeruu. Primitiivityypin ja olioviitteen eron kristallisointi. Muuttujan näkyvyysalue. Harjoitustehtäviksi (6/10): Eclipsen käyttöä ja Javan APIn käyttöä opittujen luokkien osalta.
12 43 ma Bitit talteen Tiedostot, tiedostojen lukeminen ja tallentaminen. Poikkeukset ja niiden käsittelyn perusteet. try-catch-finally -rakenne. Poikkeuskäsittelyn suoritus: hyppy catch-lohkoon. Näkyy hyvin debuggerissa.
13 43 ti Kierrätys kannattaa koodaamisessakin Lisäys poikkeusten käsittelyyn: RunTimeException vs. Exception; ''throws Jotakin'' API-dokumentaatiossa. Viimeinen lisäys tiedostoihin: tietovirran avaaminen ja käyttö tiedostoon kirjoittamista varten. Täydennetään eilistä esimerkkiohjelmaa.
Aliohjelmien kerääminen yleiskäyttöiseksi moduuliksi. Oman APIn tekeminen ja dokumentoiminen; valaissee myös muiden kirjoittamien APIen lukemista. Paketit ja niiden hakemistorakenne, import.
Harjoitustehtäviksi (7/10): Interaktiivisten, tiedostoja käyttävien ohjelmien tekemistä. Aiempien vastausten (omien tai mallivastausten) muuntamista moduuleiksi ja käyttöä moduulin kautta. Algoritmien kehittelyä ja toteuttamista Javalla.
14 44 ma Keittokirja I Yhteenvetoa ja kertausta: Mitä on ohjelmointi, mistä se koostuu? Syntaksin erilaiset esitystavat; semantiikka eli merkitys esitystapoineen. BNF-tyyppinen tekstimuotoinen syntaksiesitys. Jälleen katsottiin Javan käännösyksikön jäsentyminen; laskenta tapahtuu lauseissa. Lauseet kuvaavat ohjelmoijan ajatusmaailmaa eli algoritmia (toimintasuunnitelmaa). Samoin aliohjelmat ym. laajemmat rakenteet kuvaavat hierarkkisesti jakautuvaa, osittavaa ongelmanratkaisua. Kieli vaan on suomen sijasta esim. Java, C, C++, C#, D, tai mikä vaan ohjelmointikieli. Harjoitustehtäviksi (8/10): Aiempaa kertaavia ja toisaalta yksityiskohtia syventäviä tehtäviä. (Tiistaina ei luentoa; auditoriot muussa käytössä.)
15 45 ma Keittokirja II Perusreseptejä: yksinkertaisten algoritmien suunnittelemista ja toteuttamista; aloitetaan aiemmista demoista tutuilla esimerkeillä.
16 45 ti Keittokirja III Aluksi palindromitarkistimen toteutus. Sitten jatketaan toteuttamalla alusta alkaen supistettuja versioita kurssin esimerkkiohjelmista siihen asti kuin ehditään: tempolaskuri, kirjoitusnopeustesti, Mandelbrotin joukon visualisointi. Javan valmiita tietorakenteita, mm. ArrayList. Dynaamisen tietorakenteen vaivattomuus. Harjoitustehtäviksi (9/10): Tenttikysymyksiä vastaava ennakkotehtäväsetti. ArrayList -luokkaa käyttävien ohjelmien tekemistä (ehkä?).
17 46 ma Keittokirja IV Jatketaan aiemmista: Kirjoitusnopeustesti, Mandelbrotin visualisointi. Moneen kertaan nähty peruskaava: Ohjelmoinnin tavoite on tehdä sovellus, jolla ratkaistaan sovellusongelma. Täytyy ensin tarkentaa, mitä tavoite tarkoittaa käyttäjälle ("domain analysis"). Täytyy miettiä sovelluksen syötteet, tulosteet, käyttöliittymä. Sitten sovellukselle etsitään algoritmit: mihin osiin kokonaisuus jakautuu, mihin osiin osat jakautuvat. Lopulta yksittäinen osa toteutetaan, muistaen tehdä sopivan pieniä ja hallittavia muutoksia yhdellä kertaa. Esimerkissä vilahti ArrayList -luokka. Käytännön taidot perusteluineen: Binääri-, oktaali- ja heksalukujärjestelmät. Syntaksin idea ja erilaiset notaatiot.
18 46 ti Kun (hei) maailma ei riitä Tilannekatsaus: millaisia asioita on toivottavasti opittu, ja mitä taas ei vielä. Demovastauksissa olleiden yleisten virheiden oikaisemista tulevaisuutta ajatellen. Oppikirja-algoritmeja: Järjestyksessä ensimmäisen alkion etsiminen taulukosta. Taulukon lajitteleminen suuruusjärjestykseen yksinkertaisella tavalla. Harjoitustehtäviksi (10/10): Javan valmiita tietorakenteita hyödyntäviä interaktiivisia ohjelmia. Algoritmien tekemistä ja toteuttamista Javalla.
19 47 ma Ikkuna olio-ohjelmoinnin maailmaan Demovastauksissa olleiden yleisten virheiden oikaisemista tulevaisuutta ajatellen.
20 47 ti Suoritus päättyy? (Auditorio 2) Yhteenveto ja kertaus. Tenttitärpit. Suuntaviivat tulevaan ohjelmoinnin opiskeluun: miten edetä, mistä aiheista etsittävä lisää ymmärrystä ja miksi. Ohjelmointiparadigmat. Mitä kursseja tiedekuntamme tarjoaa näiden opiskeluun. Harjoitustehtäväksi: oman harjoitustyön viimeistely ja hyväksyttäminen, tenttiin valmistautuminen.
NaN 48 null Ekstraa ja toiveuusintoja Pari tuntia istuttiin vielä niiden kanssa, jotka halusivat kuulla lisää. Oli kertausta, ja yritin vähän näyttää ohjelmoinnin humoristista puolta. Ei se ole niin vakavaa.
Tenttimahdollisuudet:
       14.12.2007 (Ehdottoman suositeltava aika!!!), 
       19.12.2007 (Vain jos on toinen tentti 14.12.),
       22.2.2008 
       13.6.2008  (Ehdottomasti viimeinen 
                   suoritusmahdollisuus Niemisen 
                   kurssi-ilmentymästä! Sen jälkeen 
                   jonkun muun kurssille alusta alkaen,
                   jos vielä jää roikkumaan!)

Alle tulee tarkemmat luentomateriaalit kurssin edetessä, ml. linkit videotaltiointeihin ja esimerkkiohjelmiin.

Luento 1: Suoritus alkakoon!

-- takaisin luentolistaan --
Videotaltioinnit luennosta
Kalvosarjat, linkit näytettyyn materiaaliin

HUOM: Paperikopioita on saatavilla pöydällä, joka sijaitsee mikroluokkien käytävällä keskiulko-oven kohdalla. Algoritmi jonka suorittamalla löydät perille: Jos tulet Agoraan sisään hotelli Alban parkkipaikan suunnalta ja kuljet vain suoraan vielä sisälläkin, et voi olla konkreettisesti törmäämättä kyseiseen pöytään.

Etäopiskelijat voivat tulostaa omat kopiot itselleen:

Tämä jäi (yllätys, yllätys!) kiireen ja liiallisen optimismin takia vielä vaiheeseen:

Yhteenveto luennolla puhutusta

Kurssi ja opettajat esiteltiin. Puhuttiin ohjelman tekemisprosessista, mallintamisesta ja ohjelmointikielen roolista. Luennoitsija yritti selvittää, mikä on Ohjelmointi 1 -kurssin rooli kokonaiskuvassa.

Lisämateriaalia

Tällä luennolla ei juurikaan viitattu ulkopuoliseen tai "ylimääräiseen" materiaaliin.

Luento 2: Mieleni minun tekevi, aivoni ajattelevi

-- takaisin luentolistaan --
Videotaltioinnit luennosta
Kalvosarjat, linkit näytettyyn materiaaliin
Yhteenveto luennolla puhutusta

Ensin näytin työkalut käytännössä. Unohtui näyttää Unix-tunnuksen aktivointi, mutta se on kirjallisessa materiaalissa kyllä.

Sitten näytin esimerkkiohjelmia. Käänsin, suoritin ja vilauttelin lähdekoodia. Kerroin, mitä tällä kurssilla opitaan ja ei opita kyseisen kaltaisten aikaansaannosten tekemiseksi.

Ohjelman toimintaympäristöä käsittelin seuraavasti: Ohjelma saa käyttöönsä argumentit sekä joitakin tietokanavia eli "standardinsyötekanavan" ja kaksi tulostuskanavaa, ts. yhden "standarditulosteelle" ja toisen virheilmoituksille ja vastaaville. Ohjelmat voivat kommunikoida myös tiedostojen ja tietoliikenneyhteyksien kanssa. Rajailtiin Ohjelmointi 1:n laajuutta, mutta nähtiin myös tavoitteita myöhemmässä ohjelmoinnissa.

Syntaksidiagrammit esittelin, ja syntaktisten elementtien rakentumisen korkealta tasolta alkaen ja lopulta yksittäisiksi kirjaimiksi ja merkeiksi muuttuen. Ohjelman käännösyksikkö vastaa yhtä lähdekooditiedostoa. Kääntäjä on ohjelma, joka osaa lukea syntaksin mukaisen käännösyksikön ja tehdä siitä suorituskelpoisen ohjelmatiedoston.

Lisämateriaalia erikoisen kiinnostuneelle porukalle

Luento 3 Algoritmirakenteita I

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista
Lisämateriaalia

Luento 4: Algoritmirakenteita II

-- takaisin luentolistaan --

(Oikeampi nimi: Aliohjelmat, oliot, rajapinta, API.)

Audiovisuaalista
Kirjallista
Lisämateriaalia

Pari linkkiä "hardcore-materiaaliin" eli Java-kielen määritelmään (sekä syntaksi että merkitys suorituksen kannalta). Alla viitatut 2 lukua sisältävät noin 160 painokirjasivua määritelmiä ja esimerkkejä; tästä ehditään nähdä yhdellä kurssilla aika pieni osa... Koko määritelmä on liitteineen 649 painokirjasivua. Tämä on takuuvarmasti liian tuhtia kamaa toistaiseksi, mutta laitetaan linkit huvikseen, jos kiinnostaa vähän selailla:

Luento 5: Algoritmirakenteita III

-- takaisin luentolistaan --

(Oikeampi nimi: Algoritmit: Kontrollin ohjaus.)

Audiovisuaalista
Kirjallista

Luento 6: Tietorakenteita

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista

Luento 7: Paketti kasassa ensimmäistä kertaa

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista

Luento 8: Luokat, oliot ja APIt

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista

Luento 9: Puhu mun stdinille)

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista
Lisämateriaalia

Merkistöasioista tulee tietää tämän kurssin puitteissa yleiskuva: merkit ja merkkijonot koodautuvat tietokoneessa bittijonoiksi, kuten kaikki muukin. Lisätietoa halajavat voivat vapaa-aikanaan tutustua esim. seuraaviin lähteisiin ja niistä löytyviin linkkeihin:

Luento 10: IDE

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista
Lisämateriaalia

Luento 11: Konepelti auki

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista

Luento 12: Bitit talteen

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista

Luento 13: Kierrätys kannattaa koodaamisessakin

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista

Luento 14: Keittokirja I (yhteenvetoa ja kertausta)

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista
Lisämateriaalia

Luento 15: Keittokirja II

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista
Lisämateriaalia

Luento 16: Keittokirja III

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista

Luento 17: Keittokirja IV

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista

Luento 18: Kun (hei) maailma ei riitä

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista

Luento 19: Ikkuna olio-ohjelmoinnin maailmaan

-- takaisin luentolistaan --

(Oikeampi nimi: Miten jatkossa ohjelmoit paremmin kuin ekalla kertaa.)

Audiovisuaalista
Kirjallista

Luento 20: Suoritus päätty?

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista

Ekstraa ja toiveuusintoja

-- takaisin luentolistaan --
Audiovisuaalista
Kirjallista
Lisämateriaalia

Viimeksi kajottu 2011-05-31.

(Validoi sivu WDG:n validaattorilla)