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
- Videotaltiointi 1. puoliaika (Windows Media Video, WMV). ( XVID-MP3 AVI-formaatissa) Äänenlaatu näissä ei päätä huimaa! Kuvapuoli on yllättävänkin selkeä, ja ehkä puheen sanoma selviää sieltä kohinan ja kolinan seasta... Tässä eletään teknisisten rajoitteiden, kuten kaistanleveyden ja mikrofonin ominaisuuksien mukaan.
- Videotaltiointi 2. puoliaika (WMV) ( XVID-MP3 AVI)
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:
- Luentokalvot (PDF)
- IT-slangin ensimmäiset letkautukset (PDF) - mistä se puhuu, kun se puhuu "softan koodaamisesta"?
- Code Conventions for the Java Programming Language (ulkop.) -- yksi tärkeä ulkopuolinen materiaali; merkitys selviää myöhemmin.
- Demo 1, tehtävät
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
- Videotaltiointi: Työkalujen käyttö (WMV) ( XVID-MP3 AVI). Lue ensin kirjallinen materiaali: Selviytymisopas työkalujen käyttämisestä.
- Videotaltiointi: Demonpalautus (WMV) ( XVID-MP3 AVI). koskee yliopisto-opiskelijoita! Lukiolaisille toimitetaan omat, koulukohtaiset ohjeet!
- Videotaltiointi: Esimerkkiohjelmat, tavoiteet, ohjelma digitaalisena järjestelmänä (WMV) ( XVID-MP3 AVI). Puhuinpa vähän mitä sattuu: Mikään esimerkkiohjelmani ei toistaiseksi tulosta tiedostoon, vaan ne kaikki tulostavat standardiulostuloon!! Asiaan palataan myöhemmin, mutta tiedoksi vaan, että luennon puheosuudessa tuli ainakin tuo asiavirhe. Rajapinnan selitys oli myös aika alustava! Sitä tarkennetaan myöhemmin.
- Videotaltiointi: Syntaksin perusidea ja rooli ohjelmoinnin osana (WMV) ( XVID-MP3 AVI). Sanoin "äärettömän pitkiä merkkijonoja", mutta eihän se niin mene. Syntaksin mukainen merkkijono on päättyvä merkkijono aina! Mutta mahdollisia erilaisia merkkijonoja voi olla numeroituvasti ääretön lukumäärä ... Sitä minä ajattelin, ja väärin sitten menin sanomaan... Ne voivat olla mielivaltaisen pitkiä - eivät äärettömän.
Kalvosarjat, linkit näytettyyn materiaaliin
- Luentokalvot (PDF)
- Pieniä esimerkkiohjelmia, ensimmäinen versio -- näitä katsottiin vasta hyvin alustavasti.
- Kurssin termiluettelo (1. versio), joka on luotu esimerkkiohjelmalla TermiLuettelo.java
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
- Sain idean syntaksin käsittelyyn diagrammien kautta tuolta: BNF Index of JAVA language grammar , jonka etusivulta myös pöllin omissa kalvoissani olleen "rautatie/oikotie" -lähestymisen. Suoraan olisin nettisivua näyttänyt, vaan eivät vastanneet Copyright-kysymyksiini. Kyseisellä nettisivulla on esimerkki myös ohjelmointikielestä, jonka syntaksi mahtuu diagrammina helposti yhdelle A4-paperille, eli vanha kunnon LISP-syntaksi
- Javan nykyisemmän syntaksin koetin koppia Sunin alkup. dokumentaatiosta The Java Language Specification, Third Edition -- tehden siihen varmasti uusia ennennäkemättömiä ominaisuuksia käsikopioinnissa. Harmillisesti myöskään tuon kirjan liitteessä oleva yhteenvetokielioppi ei vastaa Javan oikeata toimintaa :-).
Luento 3 Algoritmirakenteita I
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi; syntaksia, suorittamista, Javan kanavat (WMV) ( XVID-MP3 AVI).
- Videotaltiointi; häkkeröintiä (WMV) ( XVID-MP3 AVI).
Kirjallista
Lisämateriaalia
- Code Conventions for the Java Programming Language (ulkop.) -- Käytännöt käyttöön sitä mukaa kuin alkaa hahmottaa merkitystä.
Luento 4: Algoritmirakenteita II
-- takaisin luentolistaan --(Oikeampi nimi: Aliohjelmat, oliot, rajapinta, API.)
Audiovisuaalista
- Videotaltiointi; täydennys edelliseen ja aliohjelmat (WMV) ( XVID-MP3 AVI).
- Videotaltiointi; oliot ja syötteen lukeminen konsolista(WMV) ( XVID-MP3 AVI).
Kirjallista
Lisämateriaalia
- Unicode -merkistöstä (ks. literaaliesimerkki)
- Tanssiurheiluliiton sivut sisältää mm. viralliset kilpailusäännöt (todellisuudessa minulla ei ole aavistustakaan, onko kilpailuparketin koolla oikeasti alarajaa; luennolla esitetty 200 neliömetriä on kuitenkin järkevä koko, jossa pystyy jo ihan vauhdikkaita kuvioita vääntämään.)
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
- Videotaltiointi; täydennystä aiempaan, totuusarvot, loogiset lausekkeet (WMV) ( XVID-MP3 AVI).
- Videotaltiointi; Javan lauseet kontrollin siirtoihin (WMV) ( XVID-MP3 AVI).
Kirjallista
Luento 6: Tietorakenteita
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi; Se tärkein ohje: miten kannattaa koodata. (WMV) ( XVID-MP3 AVI). (Eli kääntäminen ja ajaminen aina pienen muutoksen jälkeen)
- Videotaltiointi; Yhteenveto tilanteesta eli mitä on nähty. Globaali Scanner ja selitystä muuttujien määreistä (WMV) ( XVID-MP3 AVI).
- Videotaltiointi; Taulukon tarve ja käyttäminen Javassa (WMV) ( XVID-MP3 AVI). -- samalla esimerkki ohjelman luontiprosessista: asteittainen tarkentaminen, osatehtäviin jakaminen.
Kirjallista
- Luentokalvot (PDF)
- Esimerkkiohjelmat
- Se tärkein ohje (sähköpostilistan arkistossa) Sori... se vaan unohtu kertoa aikaisemmin.
Luento 7: Paketti kasassa ensimmäistä kertaa
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi; aiemmin aloitettua taulukko-ohjelmaa eteenpäin (WMV) ( XVID-MP3 AVI).
- Videotaltiointi; Merkit ja merkkijonot, oliot, viitteet, taulukko (WMV) ( XVID-MP3 AVI). -- Myös APIn lukemisen yleiskuva taas kerran. Esimerkkiohjelmana argumenttilistan käsittelyä
Kirjallista
Luento 8: Luokat, oliot ja APIt
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, 1. puoliaika (WMV) ( XVID-MP3 AVI) -- hierarkkinen ja rekursiivisesti osittava ajattelumalli ja soveltaminen; koodauskäytänteet
- Videotaltiointi, 2. puoliaika (WMV) ( XVID-MP3 AVI) -- metodin (aliohjelman) nimen kuormittaminen; luokka ja olio; olion luonti ja konstruktorin kutsuminen luonnin yhteydessä.
Kirjallista
Luento 9: Puhu mun stdinille)
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, 1. puoliaika (WMV) ( XVID-MP3 AVI) -- Merkkijonojen yhteenliittämistä Stringejä ja operaattoria käyttämällä; toisaalta StringBuilderilla. Alustava havainto pinnan alla tapahtuvan toiminnallisuuden merkityksestä (merkittävä asia, josta tarkemmin jatkokursseilla). Poikkeuksen ilmeneminen Java-ohjelmassa.
- Videotaltiointi, 2. puoliaika (WMV) ( XVID-MP3 AVI) -- Tietovirrat ohjelmaan ja sieltä ulos; ilmeneminen Javassa luokkien InputStream ja PrintStream olioina. Matalan tason ohjelma, joka tulostaa syötetavut lukuina eli muodossa, jossa ne saapuvat ohjelmalle virtuaalikoneen välittämänä. Erilaisia koodauksia, mm. rivinvaihto auditorion Windowsissa vs. etäkäyttö-Linuxissa, ääkkösten koodaus. Mitä kannattaa olettaa tietojärjestelmän käyttäjästä? Poikkeusten käsittely (edelleen alustavasti; edellyttää myöhempää tarkennusta).
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:
- ASCII -merkistöstä (Wikipediassa) -- huomaa mm. kohta "Unicode fix".
- Unicode -merkistöstä
Luento 10: IDE
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, konsoli-interaktiosta (WMV) ( XVID-MP3 AVI) -- Jatkoa aiempaan: millaista outoa toiminnallisuutta voi syntyä käyttäjän innovatiivisuudesta. Miten koodissa esim. voi varautua siihen.
- Videotaltiointi, Johdanto Eclipse IDEen 1/2 (WMV) ( XVID-MP3 AVI) -- Eclipsen käynnistys ja näkymiä: Workspace, projekti, käännösyksikkö, koodi-ikkuna, aiemmin tehtyjen koodien tuominen Workspaceen eri tavoin.
- Videotaltiointi, Johdanto Eclipse IDEen 2/2 (WMV) ( XVID-MP3 AVI) -- Koodin suorittaminen Eclipsellä, konsolinäkymä. Helppokäyttötoimintoja koodin automaattiseen generointiin.
- Videotaltiointi, harjoitustyön yleiset vaatimukset (WMV) ( XVID-MP3 AVI) -- Millainen harjoitustyö tulee olemaan yleisesti ottaen.
Kirjallista
Lisämateriaalia
Luento 11: Konepelti auki
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, 1. puoliaika (WMV) ( XVID-MP3 AVI) -- Debuggerin perusteet: mistä on kyse, mitä näkymiä esim. Eclipsen debuggerissa on, miten debuggausta hallitaan eli rivien suoritus yksi kerrallaan, breakpointit. Yksinkertaisten suoritusten tutkimista: peräkkäissuoritus ja paikallisten muuttujien esittely sekä arvon asettaminen. Toistorakenteet. Esimerkki ei-toivotusta ikuisesta silmukasta ja havaitsemisesta debuggerin avulla. Muuttujan näkyvyys ja elinaika.
- Videotaltiointi, 2. puoliaika (WMV) ( XVID-MP3 AVI) -- Aliohjelmakutsu, aktivaatio, kutsupino, Javan kaksijakoinen muistimalli: paikalliset muuttujat "pinossa" ja olioiden sisältö "keossa".
Kirjallista
- Luentokalvot (PDF)
- Esimerkkiohjelmat (eivät kovin hyödyllisiä "kuolleena koodina"; aiheena oli debuggerin käyttö suorituksen tutkimiseen!)
- Demo 6, tehtävät.
Luento 12: Bitit talteen
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, 1. puoliaika (WMV) ( XVID-MP3 AVI) -- Tiedostot, tiedostojärjestelmä, tietovirrat. Poikkeusten perusidea; esimerkkinä tiedostoa lukeva ohjelma.
-
Videotaltiointi, 2. puoliaika (WMV)
(
XVID-MP3 AVI)
-- Olioiden luominen Javassa,
new
ja konstruktori. Kaaviokuvan raapustelu "lyijykynällä ruttuiselle paperille ", viitteet olioihin ja olioista toiseen. Huomaa, että kuvaa piti korjata vielä lopuksi! Try-catch-finally -rakenteen suorittaminen debuggerilla nähtynä.
Kirjallista
Luento 13: Kierrätys kannattaa koodaamisessakin
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, edellisen täydennystä (WMV) ( XVID-MP3 AVI) -- APIa ja olioluokkien periytymishierarkiaa. Esimerkkinä poikkeusluokat. Tiedoston tallentaminen tietovirran ja kirjoittajan avulla. Jännityksen huipentuma loppua kohti: Luennoitsija saa ohjelman toimimaan -- vai saako? Spoileri sähköpostilistan arkistossa tässä viestissä.
- Videotaltiointi, varsinainen aihe eli "kierrätys kannattaa" (WMV) ( XVID-MP3 AVI) -- Ohjelman modulaarisuus; moduulien hierarkia, paketit. Aiemmin nähtyjen dialogialiohjelmien siirtäminen omaan luokkaansa, josta tehtiin yksinkertainen kirjasto. Kirjastolle muodostui API ja sille tehtiin javadocin avulla API-dokumentaatio.
Kirjallista
Luento 14: Keittokirja I (yhteenvetoa ja kertausta)
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, ensimmäinen puoliaika (WMV) ( XVID-MP3 AVI) -- Ohjelmointitietämyksen neljä osa-aluetta; miksi ja miten kukin niistä liittyy kokonaisuuteen.
- Videotaltiointi, toinen puoliaika(WMV) ( XVID-MP3 AVI) -- syntaksia oppikirjoissa ja manuaaleissa, rautatiekaaviot ja BNF.
Kirjallista
- Luentokalvot (PDF)
- Esimerkki syntaksista; ohjelmoinnillisen rakenteen kirjoittaminen on kiva ja helppo esittää abstraktina syntaksina, jonka merkitys selitetään erikseen sanallisesti.
- Demo 8, tehtävät.
Lisämateriaalia
- Jeliot -- Joensuussa kehitetty visualisointi ohjelman suorituksen ymmärtämisen avuksi. Tällä leikittäneen ensi viikon luennoilla vähän aikaa. Teatterinäkymä on kiva ja konsolikäyttäjän karvainen käsi hauska. Tästä on varmasti apua alkuvaiheessa; todellinen työkalu ohjelman tutkimiseen on sitten kuitenkin oikea debuggeri, jonka käyttö pitää osata.
Luento 15: Keittokirja II
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, ensimmäinen puoliaika (WMV) ( XVID-MP3 AVI) -- Fibonaccin lukujonot juurta jaksain ja vaiheittain.
- Videotaltiointi, toinen puoliaika(WMV) ( XVID-MP3 AVI) -- Kertotaulun tulostaminen ja merkkien korvaaminen toisilla merkeillä.
Kirjallista
Lisämateriaalia
- Jeliot -- Tätä käytettiin jälleen.
Luento 16: Keittokirja III
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, ensimmäinen puoliaika (WMV) ( XVID-MP3 AVI) -- Palindromitarkastus toteutettuna eräällä tavalla. Tällä luennolla lisäksi pari uutta syntaksia: for-silmukka, moniulotteinen taulukko alustuksineen.
- Videotaltiointi, toinen puoliaika(WMV) ( XVID-MP3 AVI) -- BPM-laskuri. Esimerkki suunnittelusta koodia muokkailemalla ja kehittelemällä.
Kirjallista
Luento 17: Keittokirja IV
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, ensimmäinen puoliaika (WMV) ( XVID-MP3 AVI) -- Kirjoitusnopeustestin suunnittelu ja kyhääminen; kurssin viimeinen uusi syntaksi: tietorakenneluokka, jossa on sisällön tyyppi kulmasulkeissa, esimerkkinä ArrayList<String>. Mandelbrotin joukon visualisointi.
- Videotaltiointi, väliaika(WMV) ( XVID-MP3 AVI) -- Pelasta Prinsessa -peli: mörköseikkailu Ohjelmointi 1:n esittelemillä rakenteilla toteutettuna.
- Videotaltiointi, toinen puoliaika(WMV) ( XVID-MP3 AVI) -- Käytännön taitoja: binääri-, oktaali- ja heksalukujärjestelmät. syntaksin idea.
Kirjallista
Luento 18: Kun (hei) maailma ei riitä
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, ensimmäinen puoliaika (WMV) ( XVID-MP3 AVI) -- Yhteenveto kurssin sisällöstä. Asiakokonaisuuksien priorisointi. Demovastausten tutkiminen alkoi: Noudata käytänteitä ja selkeyttä (tuota koodia, jonka rakenne ja merkitys selviää vilkaisemalla ja pääkohtia lukemalla); keskity olennaiseen (eli mieluummin keksi kertaalleen hyvät testikeissit kuin että joudut syöttämään päätteeltä jokaisella kerralla kun kokeilet algoritmin toimintaa); vältä kovakoodaamasta algoritmille mitään maksimikokoja (esim. toimisi vain kolmen alkion taulukolle, jos yhtä hyvin voisi toimia mille tahansa määrälle).
- Videotaltiointi, toinen puoliaika(WMV) ( XVID-MP3 AVI) -- Oppikirjaesimerkkejä ensimmäisistä algoritmeista: Pienimmän alkion etsiminen. Lajittelu.
Kirjallista
Luento 19: Ikkuna olio-ohjelmoinnin maailmaan
-- takaisin luentolistaan --(Oikeampi nimi: Miten jatkossa ohjelmoit paremmin kuin ekalla kertaa.)
Audiovisuaalista
- Videotaltiointi, ensimmäinen puoliaika (WMV) ( XVID-MP3 AVI) -- Demovastausten tutkiminen jatkui: samoja juttuja kuin viimeksi, mutta lisäksi käytännön osoituksia siitä, miten helppoa on kuvitella algoritmia valmiiksi (jopa jonkun pienen testin perusteella) kun se on vielä kaukana siitä. Eli ei toimikaan kaikille mahdollisille syötteille halutulla tavoin! Avain onneen on perusteellinen ja huolellinen testaus loppuun asti: idea testille on juuri varmistaa että se paluuarvo tai tuloste, joka saadaan, vastaa sitä mitä odotetaankin!
- Videotaltiointi, toinen puoliaika(WMV) ( XVID-MP3 AVI) -- Demojen debuggausta lisää.
Kirjallista
Luento 20: Suoritus päätty?
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, ensimmäinen puoliaika (WMV) ( XVID-MP3 AVI) -- Miniyhteenveto kurssin asioista. Toivottuja uusintoja, mm. olioiden ja viitteiden olemuksesta sekä piirtämisestä, erilaisista toistorakenteista ja niiden käyttötarkoituksista.
- Videotaltiointi, toinen puoliaika(WMV) ( XVID-MP3 AVI) -- Tenttitärpit ja kurssin tärkeimmän oppisisällön läpikäynti tenttikysymysten ja mallivastausten kautta.
Kirjallista
Ekstraa ja toiveuusintoja
-- takaisin luentolistaan --Audiovisuaalista
- Videotaltiointi, eka setti (WMV) ( XVID-MP3 AVI) -- olioita ja viitteitä
- Videotaltiointi, toka setti (WMV) ( XVID-MP3 AVI) -- Mitä pitäisi opiskella Javasta seuraavaksi (oppikirjan lukujen 9 ja 10 otsikoita ja suhteuttamista ykköskurssin sisältöön).
- Videotaltiointi, kolmas setti(WMV) ( XVID-MP3 AVI) -- RegExp yleiskuva ja pari alkeellista esimerkkiä.
- Neljännestä setistä ei ole taltiointia, kun näytin niin paljon matskua netistä. Ei passaa pahemmin taltioida toisten tekemiä juttuja. Linkit materiaaliin ovat tuossa alla.
Kirjallista
Lisämateriaalia
- Code Snippet of the Day from The daily WTF (ei oo helppoo eikä oo helpoks väitettykään)
- Historiaa: Jonkinlainen kartta ohjelmointikielistä 1950-luvulta saakka
- 2500 muuta ohjelmointikieltä
- Huumorilla ja mielenkiinnosta ohjelmoinnin perusteisiin: Muiden muassa Brainfuck, Befunge ja Whitespace... (Ei Java kuitenkaan mikään hullumpi kieli ole koodata).
- Muistakaa tämä ohjelmointi-invariantti, koska käytetystä kielestä riippuu mitä ovat sudenkuopat milloinkin.
- The International Obfuscated C Code Contest -- huonon ohjelmoinnin kilpailu (Huumorilla ja mielenkiinnosta ohjelmointikielten mahdollisuuksiin)
- Eclipsen lähdekoodi -- esimerkiksi tuo on melko iso ja melko hyödyllinen ohjelmisto; sellaisen suunnittelu edellyttää vähän lisää opintoja, mutta ei varmasti haittaa katsella ja ihmetellä sellaisenkin lähdekoodia... Koodia hallitaan versionhallintajärjestelmän avulla, joten jokainen muutos kirjautuu tiedostokohtaisesti, ja eri versioiden välisiä eroja voi tutkia. Lisäksi bugien ja ominaisuuksien hallintaan käyttävät näköjään bugzillaa. Alleviivaan, että ykkös- tai kakkoskurssinkaan pohjalta kukaan ei oleta kykyjä tehdä näin isoja juttuja. Siihen kasvaa pikkuhiljaa. Mukaan tulee tiimityöskentely- ja projektitaidot ym.. Tarvitaan nousujohteista tekemistä paljon, ja yksinkertaisesti vaan kalenteriaikaakin asioiden sisäistämiseen.
Viimeksi kajottu 2011-05-31.