Ohjelmointi 2 - Sisällys
Ohjelmointi 2 - Otsikkosivu
Lukijalle
1. Johdanto
1.1 Ohjelman suunnittelu
1.2 Työkalun valinta
1.3 Koodaus
1.4 Testaus
1.5 Käyttöönotto
1.6 Ylläpito
1.7 Yhteenveto
2. Kerhon jäsenrekisteri
Mitä tässä luvussa käsitellään?
2.1 Tehtävän tarkennus
2.2 Työkalun valinta
2.3 Tietorakenteet ja tiedostot
2.4 Käyttöohje tai käyttöliittymä
2.4.1 Lisää uusi jäsen
2.4.2 Etsi jäsenen tiedot
2.4.3 Tulosteet
Tehtävä 2.1 Tulosteet
2.4.4 Tietojen korjailu
2.4.5 Lopetus
2.5 Käyttöohjeen testaus
2.5.1 Testaus
2.5.2 Korjaus
2.5.3 Muita korjauksia
2.5.4 Uusi testaus
2.6 Tarvittavien algoritmien hahmottaminen
2.6.1 Ylemmän tason aliohjelmat
2.6.2 Alemman tason aliohjelmat
2.6.3 Ohjelman yhteiset osat
2.7 Ikkunoinnit ja muut hienostelut
2.8 Koodaus ohjelmointikielelle
2.9 Varautuminen tulevaan, eli relaatiotietomalli
2.9.1 Kaikki samassa tietueessa
2.9.2 Erimalliset tietueet
2.9.3 Relaatiomalli
Tehtävä 2.2 Ketkä harrastavat?
2.9.4 XML-muotoinen tiedosto
Tehtävä 2.3 Mikä on tilaa säästävin tallennusmuoto
3. Yksinkertainen tulkkiohjelma
3.1 Tehtävän tarkennus
3.2 Tietorakenteet ja tiedostot
Tehtävä 3.1 Kielen lisääminen
3.3 Käyttöohje
3.4 Algoritmien hahmottaminen
3.4.1 Ylemmän tason aliohjelmat
3.4.2 Alemman tason aliohjelmat
Tehtävä 3.2 Aliohjelmien käyttö
Tehtävä 3.3 Erikoistapauksia
Tehtävä 3.4 Algoritmi muuttamiselle
3.5 Koodaus ohjelmointikielelle
4. Algoritmin suunnittelu
Mitä tässä luvussa käsitellään?
4.1 Algoritmi
Tehtävä 4.1 Kävelyohjeet
4.2 Lajittelu
4.2.1 Nimien ja numeroiden vertaus
4.2.2 Algoritmin sanallinen versio on kuvaavampi!
4.2.3 Numeroiden järjestäminen
Tehtävä 4.2 Muita lajittelualgoritmeja
Tehtävä 4.3 Algoritmin kompleksisuus
Tehtävä 4.4 Lajittelujärjestys
4.2.4 Kuplalajittelu
Tehtävä 4.5 Kuplalajittelu
4.2.5 Lajittelu avaimen mukaan
4.2.6 Algoritmin parantaminen
Tehtävä 4.6 Loppuminen erikoistapauksessa
Tehtävä 4.7 QuickSortin kompleksisuus
Tehtävä 4.8 Lisäys oikealle paikalleen vaiko lisäys loppuun ja lajittelu?
4.3 Algoritmin tarkentaminen
4.3.1 Pienimmän etsiminen
4.3.2 Paikalleen sijoittaminen
4.4 Haku järjestetystä joukosta
4.4.1 Suora haku
4.4.2 Puolitushaku
Tehtävä 4.9 Puolitushaku
Tehtävä 4.10 Puolitushaun kompleksisuus
4.5 Yhteenveto
Tehtävä 4.11 Kumin paikkaus
Tehtävä 4.12 Sunnuntai- ilta
Tehtävä 4.13 Onkiminen
Tehtävä 4.14 Järjestyksen kääntäminen päinvastaiseksi
5. Algoritmeissa tarvittavia rakenteita
Mitä tässä luvussa käsitellään?
5.1 Ehtolauseet
Tehtävä 5.1 Ajanlisäys
Tehtävä 5.2 Postimaksu
5.2 Valintalauseet
Tehtävä 5.3 Korvaaminen ehtolauseilla
5.3 Silmukat
Tehtävä 5.4 Uiminen
Tehtävä 5.5 Ynnää luvut 1- 100
5.4 Muuttujat
5.4.1 Yksinkertaiset muuttujat
Tehtävä 5.6 Vuokaavio
5.4.2 Pöytätesti
Tehtävä 5.7 Algoritmin parantaminen
Tehtävä 5.8 Pöytätesti
5.4.3 Yksiulotteiset taulukot
Tehtävä 5.9 Lajittelun testaus
Tehtävä 5.10 Korttien poisto
5.4.4 Osoittimet
Tehtävä 5.11 Korttien poisto osoittimia käyttäen
5.4.5 Moniulotteiset taulukot
Tehtävä 5.12 Kaksiulotteisen taulukon indeksit
Tehtävä 5.13 Sijoitus 3- ulotteiseen taulukkoon
Tehtävä 5.14 3- ulotteinen taulukko 1- ulotteiseksi
Tehtävä 5.15 3- ulotteinen taulukko
Tehtävä 5.16 4- ulotteinen taulukko
5.4.6 Sekarakenteet
Tehtävä 5.17 Sanojen muuttaminen
5.5 Osoittimista ja indekseistä
5.6 Aliohjelmat
Tehtävä 5.18 Lihapullan paistaminen
5.7 Vaihtoehtojen tutkiminen totuustaulun avulla
5.7.1 Kaikkien vaihtoehtojen kirjaaminen
5.7.2 Vaihtoehtojen lukumäärä
Tehtävä 5.19 Kombinaatioiden lukumäärä
5.7.3 Useita vaihtoehtoja samalla muuttujalla
Tehtävä 5.20 BAL=kyllä?
Tehtävä 5.21 Kuka valehtelee?
5.7.4 Loogiset operaatiot
Tehtävä 5.22 de Morganin kaava
Tehtävä 5.23 Osittelulaki
Tehtävä 5.24 Ehtojen sieventäminen
5.8 Muistele tätä
Tehtävä 5.25 Merkkijonot
Tehtävä 5.26 Päivämäärät
6. Esimerkkejä eri kielistä
Mitä tässä luvussa käsitellään?
6.1 Esimerkkiohjelmat
6.1.1 Pascal
6.1.2 C
6.1.3 C++
6.1.4 Java
6.1.5 Fortran
6.1.6 ADA
6.1.7 BASIC
6.1.8 APL
6.1.9 Modula- 2
6.1.10 Lisp
6.1.11 FORTH
6.1.12 Assembler
6.2 Käytettävän kielen valinta
7. Java - kielen alkeita
Mitä tässä luvussa käsitellään?
7.1 Hello World! Java - kielellä
Tehtävä 7.1 Nimi ja osoite
7.2 Tekstitiedostosta toimivaksi konekieliseksi versioksi
7.2.1 Kirjoittaminen
7.2.2 Kääntäminen
7.2.3 Linkittäminen
7.2.4 Ohjelman ajaminen
7.2.5 Varoitus
7.2.6 Integroitu ympäristö
7.3 Ohjelman yksityiskohtainen tarkastelu
7.3.1 Tarvittavien luokkien esittely
7.3.2 Kommentti
7.3.3 JavaDoc
7.3.4 Luokan esittely
7.3.5 Pääohjelman esittely
7.3.6 Lausesulut
7.3.7 Tulostuslause
7.3.8 Lauseen loppumerkki ;
7.3.9 Isot ja pienet kirjaimet
7.3.10 White spaces, tyhjä
7.3.11 Vakiomerkkijonot
Tehtävä 7.2 Terve maailma!
Tehtävä 7.3 Nimi ja osoite vakioksi
7.3.12 Vakiolukuarvot
Tehtävä 7.4 Tetraedri
7.3.13 Tulostuksen muotoilu ja apumetodit
Tehtävä 7.5 Apumetodit
8. Java- kielen muuttujista ja aliohjelmista
Mitä tässä luvussa käsitellään?
8.1 Mittakaavaohjelman suunnittelu
8.2 Muuttujat
8.2.1 Matkan laskeminen
Tehtävä 8.1 Vakion korvaaminen
8.2.2 Muuttujan nimeäminen
Tehtävä 8.2 Avainsanat
Tehtävä 8.3 Muuttujan nimeäminen
8.2.3 Muuttujalle sijoittaminen =
Tehtävä 8.4 Muuttujien esittely
8.2.4 Muuttujan esittely ja alkuarvon sijoittaminen
8.3 Muuttujan arvon lukeminen päätteeltä
8.3.1 Lukeminen merkkijonoon
8.3.2 Lukuarvon selvittäminen merkkijonosta
8.3.3 Apumetodit
Tehtävä 8.5 Oletuksen tulostaminen
8.3.4 Apuluokat
8.3.5 Luokan testaaminen
8.3.6 Luokan käyttäminen
Tehtävä 8.6 Muiden tyyppien lukeminen
Tehtävä 8.7 Mittakaavan kysyminen
8.4 Viitteet
8.4.1 Miksi viitteet?
8.4.2 Lokaalit muuttujat
8.4.3 Dynaaminen muisti
8.4.4 Viitteiden vertaaminen
8.4.5 Viitteeseen sijoittaminen
8.4.6 null-viite
8.5 Aliohjelmat (metodit, funktiot)
8.5.1 Parametriton aliohjelma
8.5.2 Funktiot ja parametrit
8.5.3 Parametrin nimi kutsussa ja esittelyssä
8.5.4 Nimessään arvon palauttavat funktiot
Tehtävä 8.8 Funktio ja osoitin
Tehtävä 8.9 String vs. StringBuffer
8.5.5 Ketjutettu kutsu
Tehtävä 8.10 Math-luokka
Tehtävä 8.11 Funktiot
Tehtävä 8.12 Ympyrän ala ja pallon tilavuus
Tehtävä 8.13 Pääohjelma yhtenä funktiokutsuna
8.5.6 Aliohjelmien testaaminen
8.5.7 Yksinkertaisen aliohjelman kutsuminen
8.5.8 Aliohjelmat tulostavat harvoin
8.6 Parametrin välitys
8.6.1 Useita parametrejä
Tehtävä 8.14 Päämenuun kerhon nimi
Tehtävä 8.15 Toisen asteen yhtälön juuri
Tehtävä 8.16 Toisen asteen polynomi, root_1
Tehtävä 8.17 root_1 testaus
8.6.2 Parametrin paikka ratkaisee, ei nimi
8.6.3 Metodin nimen kuormittaminen
Tehtävä 8.18 Toisiaan kutsuvat aliohjelmat
8.6.4 Muuttujien lokaalisuus
Tehtävä 8.19 Eri nimet
8.6.5 Parametrinvälitysmekanismi
Tehtävä 8.20 Muotoilu?
Tehtävä 8.21 Tiedon lukeminen
8.6.6 Aliohjelmien kirjoittaminen
8.6.7 Luokkamuuttujat ja suhde lokaaleihin muuttujiin
Tehtävä 8.22 Muuttujien näkyvyys
9. Kohti olio-ohjelmointia
Mitä tässä luvussa käsitellään?
9.1 Miksi olioita tarvitaan
Tehtävä 9.1 Tulostus
9.2 Hynttyyt yhteen, eli muututaan olioksi
9.2.1 Terminologiaa
9.2.2 Ensimmäinen olio-esimerkki
9.2.3 Taas terminologiaa
9.2.4 Luokka (class) ja olio (object)
9.2.5 Suojaustasot ja kapselointi
9.2.6 Muodostajat (constructor)
9.2.7 Oletusmuodostaja (default constructor)
9.2.8 Sisäinen tilan valvonta
Tehtävä 9.2 Negatiivinen minuuttiasetus
Tehtävä 9.3 Tuntien tarkistus
Tehtävä 9.4 Päivämääräolio
9.2.9 Metodien kuormittaminen (lisämäärittely, overloading)
Tehtävä 9.5 Mitäs me tehtiin kun ei ollut kuormitusta?
Tehtävä 9.6 Lisäys yhdellä
Tehtävä 9.7 Vain tuntien asettaminen
9.2.10 this-osoitin
9.3 Perintä
9.3.1 Luokan ominaisuuksien laajentaminen
9.3.2 Alkuperäisen luokan muuttaminen
Tehtävä 9.8 Luokan muuttaminen
Tehtävä 9.9 Sekuntien tulostus aina tai oletuksena
9.3.3 Koostaminen
9.3.4 Perintä
9.3.5 Polymorfismi, eli monimuotoisuus
9.3.6 Myöhäinen sidonta
Tehtävä 9.10 Miksi vielä yksi lisaa-kutsu?
Tehtävä 9.11 Ei turhaa lisaa-kutsua
9.3.7 Yliluokan muodostajan kutsuminen ennen muodostajaa
Tehtävä 9.12 Yliluokan alustajan kutsu
9.4 Kapselointi
9.4.1 Saantimetodit
Tehtävä 9.13 Saantimetodi sekunneille
Tehtävä 9.14 Saantimetodien käyttäminen
9.4.2 Rajapinta ja sisäinen esitys
Tehtävä 9.15 minuutteina()
9.5 Rajapinta ja monimuotoisuus
9.6 Object-luokan metodien korvaaminen
Tehtävä 9.16 equals toString avulla
Tehtävä 9.17 equals AikaSek-luokkaan
Tehtävä 9.18 AikaSek perimällä.
Tehtävä 9.19 Vertailu
9.7 Mistä hyviä luokkia
9.8 Valmiita luokkia
9.8.1 Merkkijonot
Tehtävä 9.20 Ensimmäinen melkein järkevä olio
10. Java- kielen ohjausrakenteista ja operaattoreista
Mitä tässä luvussa käsitellään?
10.1 if- lause
10.1.1 Ehdolla suoritettava yksi lause
10.1.2 Ehdolla suoritettava useita lauseita
Tehtävä 10.1 vaihda
Tehtävä 10.2 abs
Tehtävä 10.3 jarjesta2
Tehtävä 10.4 maksimi ja minimi
10.2 Loogiset lausekkeet
10.2.1 Vertailuoperaattorit
10.2.2 Sijoitus palauttaa arvon!
10.3 Loogisten lausekkeiden yhdistäminen
10.3.1 Loogiset operaattorit &&, || ja !
10.3.2 Loogisen lausekkeen suoritusjärjestys
10.3.3 Loogiset operaattorit & ja |
10.4 Bittitason operaattorit
Tehtävä 10.5 Loogiset/bittitason operaattorit
Tehtävä 10.6 Luku parilliseksi
10.5 if - else - rakenne
10.5.1 Sisäkkäiset if- lauseet
Tehtävä 10.7 else - osat pois
10.5.2 Useat peräkkäiset ehdot
Tehtävä 10.8 elset pois
Tehtävä 10.9 Lääni
Tehtävä 10.10 if- else
10.6 do- while - silmukka
10.7 while - silmukka
10.8 for - silmukka, tavallisin muoto
Tehtävä 10.11 valin_summa
10.9 Java- kielen lauseista
10.9.1 Sijoitusoperaattori =
10.9.2 Sijoitusoperaattori +=
Tehtävä 10.12 +=
10.9.3 Lisäysoperaattori ++
10.10 for - silmukka, yleinen muoto
Tehtävä 10.13 1+2+..+i
10.11 break ja continue
10.11.1 break
Tehtävä 10.14 Tarvitaanko sisäkkäisiä silmukoita?
10.11.2 continue
Tehtävä 10.15 continuen korvaaminen
Tehtävä 10.16 Eri silmukoiden vertailu
10.12 switch - valintalause
Tehtävä 10.17 switch - > if
Tehtävä 10.18 Päävalinta
Tehtävä 10.19 lääni, versio 2
10.12.1 | ei toimi switch - lauseessa!
10.13 Ikuinen silmukka
10.13.1 Yhteenveto silmukoista
11. Oliosuunnittelu
Mitä tässä luvussa käsitellään?
11.1 Olio on luokan esiintymä
11.2 Tavoitteet
11.3 Luokat
11.4 CRC- kortit
11.4.1 Jäsen-luokka (Jasen)
11.4.2 Kerho-luokka (Kerho)
11.4.3 Käyttöliittymä-luokka (Naytto)
11.4.4 Luokkajaon tarkastelua
11.5 Harrastukset mukaan
11.5.1 "Oliomalli"
11.5.2 Relaatiomalli
11.5.3 Harrastus-luokka (Harrastus)
11.5.4 Kerho-luokka (Kerho)
11.5.5 Jäsenet-luokka (Jasenet)
11.5.6 Harrastukset-luokka (Harrastukset)
12. Jäsenrekisterin runko
Mitä tässä luvussa käsitellään?
12.1 Runko ilman kommentteja
12.2 Valittava tietorakenne
12.2.1 Taulukko
12.2.2 Linkitetty lista
12.2.3 Sekarakenne
12.2.4 Ohjelman runko
12.3 Harrastukset mukaan
12.3.1 Tiedot jäsenen yhteyteen
12.3.2 Relaatiomalli
12.3.3 Ohjelman runko harrastusten kanssa
13. Java- kielen taulukoista
Mitä tässä luvussa käsitellään?
13.1 Yksiulotteiset taulukot
13.1.1 Taulukon määrittely
13.1.2 Taulukon alkioihin viittaaminen indeksillä
13.1.3 Taulukon alustaminen
Tehtävä 13.1 Taulukon alkioiden summa
13.2 Merkkijonot
13.2.1 Merkkityyppi
13.2.2 String
13.2.3 StringBuffer
13.3 Moniulotteiset taulukot
13.3.1 Kiinteä esittely
Tehtävä 13.2 Matriisit
13.3.2 Yksiulotteisen taulukon käyttäminen moniulotteisena
Tehtävä 13.3 Matriisi 1- ulotteisena
13.3.3 Taulukko taulukoista
13.3.4 Taulukko viitteistä
Tehtävä 13.4 Transpoosi
13.4 Komentorivin parametrit (argv)
Tehtävä 13.5 Palindromi
14. Parametrin välityksestä ja osoittimista, kertaus
14.1 Miksi aliohjelmia käytetään
15. Kommentointi ja jakaminen osiin
Mitä tässä luvussa käsitellään?
15.1 Kommentointi
15.1.1 Valmiin kommenttilohkon lukeminen
15.1.2 Parametrilistan kommentointi
15.1.3 Koodin kommentointi
15.2 Omat aliohjelmakirjastot
15.2.1 Kirjaston testaus
15.3 Kerho-ohjelman jako osiin
16. Dynaaminen muistinkäyttö
Mitä tässä luvussa käsitellään?
16.1 Muistin käyttö
16.2 Dynaamisen muistin käyttö Javassa
16.2.1 new
16.2.2 Olion tuhoaminen
16.2.3 Taulukon luominen new []
16.3 Dynaamiset taulukot
16.4 Javan tietorakenneluokat ja algoritmeja
16.4.1 vector-luokka
16.4.2 Iteraattori
16.4.3 ListArray
16.4.4 Algoritmit
16.5 Tietovirta parametrinä
17. Tiedostot
Mitä tässä luvussa käsitellään?
17.1 Tiedostojen käsittely
17.1.1 Lukeminen
17.2 Tiedostojen käsittely Javan tietovirroilla
Tehtävä 17.1 Tiedoston lukujen summa
17.2.1 Tiedoston avaaminen muodostajassa
17.2.2 Tiedostosta lukeminen.
17.2.3 Tiedoston lopun testaaminen
17.2.4 Tiedostoon kirjoittaminen
17.2.5 Tiedoston sulkeminen close
Tehtävä 17.2 Kommentit näytölle
17.3 Tiedoston yhdellä rivillä monta kenttää
17.3.1 Ongelma
Tehtävä 17.3 Ohjelman "sekoaminen"
17.4 Merkkijonon paloittelu
17.4.1 parse
17.4.2 erota
17.4.3 Esimerkki erota-funktion käytöstä
17.4.4 Erota funktion toiminta vaihe vaiheelta
17.4.5 Luvun erottaminen
17.5 Lukeminen ja paloittelu
17.5.1 Olio joka lukee itsensä
17.6 Esimerkki tiedoston lukemisesta
Tehtävä 17.4 Tietorakenne
Tehtävä 17.5 Perintä
Tehtävä 17.6 Tunnistenumero
Tehtävä 17.7 Mittakaava