<map version="0.7.1">
<node ID="_Freemind_Link_360902933" TEXT="Ohj2, luennot 22-24, 6.5.-7.5.2005">
<node ID="_Freemind_Link_1626565390" TEXT="Materiaali" FOLDED="true" POSITION="right">
<node LINK="http://www.mit.jyu.fi/vesal/kurssit/cpp/moniste/html/m.htm" ID="_Freemind_Link_150234542" TEXT="CPP-moniste, luvut 20-21"/>
</node>
<node ID="_" TEXT="Funktio-oliot ja rajapinnat" FOLDED="true" POSITION="right">
<node ID="_Freemind_Link_1232824305" TEXT="Funktionaalisesta ohjelmoinnista" FOLDED="true">
<node ID="_Freemind_Link_400607505" TEXT="Lis&#xe4;tietoa">
<node ID="_Freemind_Link_1885364906" TEXT="John Hughes: Why functional programming matters (runsaasti viitattu yleisartikkeli)"/>
<node ID="_Freemind_Link_1002558638" TEXT="Jared Jackson: Use recursion effectively in XSL (xslt-spesifinen, rekursioasiaa)"/>
<node ID="_Freemind_Link_1080432189" TEXT="Abhijit Belapurkar: Functional programming in Java language (k&#xe4;ytt&#xe4;&#xe4; Apachen Functor-kirjastoa, java 1.4:n takia viel&#xe4; melko sotkuista)"/>
</node>
<node TEXT="olion sijaan ohjelman perusyksikk&#xf6; on (matemaattinen) funktio">
<edge WIDTH="thin"/>
<font NAME="SansSerif" SIZE="12"/>
</node>
<node ID="_Freemind_Link_867888426" TEXT="deklaratiivista ohjelmointia (imperatiivisen sijaan) - pyrit&#xe4;&#xe4;n kuvaamaan ongelma ratkaisuaskeleiden sijaan"/>
<node ID="_Freemind_Link_1403023674" TEXT="ohjelma on funktio - per&#xe4;kk&#xe4;isyyden k&#xe4;sitett&#xe4; ei yleens&#xe4; tunneta - esim. silmukat korvattu rekursiivisilla kutsuilla">
<node ID="_Freemind_Link_261465320" TEXT="Rekursion k&#xe4;ytt&#xf6; pienent&#xe4;&#xe4; ohjelmakokoa, mutta on er&#xe4;iss&#xe4; tapauksissa silmukkaa tehottomampi"/>
<node ID="_Freemind_Link_1423023931" TEXT="Lis&#xe4;ksi imperatiiviseen tyyliin tottuneelle rekursiivinen ratkaisu saattaa tuntua aluksi hankalalta (ks. esim. Hevosen Hyppely -teht&#xe4;v&#xe4;)"/>
</node>
<node ID="_Freemind_Link_1308279019" TEXT="Funktiokieli&#xe4;: Haskell, Scheme, osittain my&#xf6;s LISP ja XSLT..."/>
<node ID="_Freemind_Link_1504765234" TEXT="Funktiokielet ovat yleens&#xe4; sivuvaikutuksettomia: muuttujalle annettua arvoa ei voi muuttaa" FOLDED="true">
<node ID="_Freemind_Link_1295917970" TEXT="Mahdollistaa helpommin automaattisen koodin analysoinnin ja mm. oikeaksi todistamisen"/>
</node>
<node LINK="http://www.mit.jyu.fi/antkaij/opetus/fo/2003/" TEXT="Lis&#xe4;tietoa esim. kurssilla Funktio-ohjelmointi"/>
</node>
<node ID="_Freemind_Link_1579921055" TEXT="Javan rajapinnoista ja sis&#xe4;luokista yleisesti: TIJ, luku 8: Interfaces &amp; Inner Classes"/>
<node ID="_Freemind_Link_848649698" TEXT="C++:ssa mahdollista kuormittaa ()-operaattori, jolloin oliota voidaan kutsua kuin funktiota - lis&#xe4;ksi C++:n templatet muodostavat oman funktionaalisen kielens&#xe4; C++:n sis&#xe4;&#xe4;n" FOLDED="true">
<node ID="_Freemind_Link_1447224051" TEXT="Oliota, jota voidaan kutsua kuten funktiota, kutsutaan funktoriksi"/>
</node>
<node ID="_Freemind_Link_40444467" TEXT="Javassa vastaavaan toimintaan tarvitaan rajapintoja" FOLDED="true">
<node ID="_Freemind_Link_18454311" TEXT="(huom. t&#xe4;ss&#xe4; tapauksessa rajapinnan tarkoitus poikkeaa loogisesti aiemmin k&#xe4;sitellyst&#xe4; moniperinn&#xe4;n v&#xe4;ltt&#xe4;misest&#xe4; koostamisella)"/>
</node>
<node ID="_Freemind_Link_727607528" TEXT="Funktio- (tai metodi-)osoitin: keino k&#xe4;sitell&#xe4; ohjelman _toimintaa_ kuten tietorakennetta" FOLDED="true">
<node TEXT="Javassa korvataan &quot;oliomaisesti&quot; rajapinnoilla ja olioviitteill&#xe4;"/>
<node TEXT="Reflectionin avulla voidaan periaatteessa kutsua my&#xf6;s suoraan metodeja (ks. java.lang.reflect.Method), mutta t&#xe4;m&#xe4; on hidasta"/>
<node ID="_Freemind_Link_1071495728" TEXT="Perinteinen k&#xe4;ytt&#xf6;tarkoitus: graafiset tai menuohjatut k&#xe4;ytt&#xf6;liittym&#xe4;t" FOLDED="true">
<node TEXT="Liitet&#xe4;&#xe4;n menukohtaan metodi (tapahtumank&#xe4;sittelij&#xe4;), jota kutsutaan, kun menukohta valitaan"/>
</node>
</node>
<node ID="_Freemind_Link_1454496119" TEXT="Geneeriset luokat ja nimett&#xf6;m&#xe4;t sis&#xe4;luokat helpottavat funktionaalisen tyylin kirjoittamista javalla huomattavasti"/>
<node TEXT="Rajapinnat tai funktio-osoittimet tukevat oliosuunnittelua - esim. erilaisten kenttien validaattorioliot" FOLDED="true">
<node TEXT="Esim. m&#xe4;&#xe4;ritell&#xe4;&#xe4;n yleinen validaattorirajapinta, josta perit&#xe4;&#xe4;n luokkia esim. henkil&#xf6;tunnuksen tai p&#xe4;iv&#xe4;m&#xe4;&#xe4;r&#xe4;n tarkistamista varten"/>
</node>
<node ID="_Freemind_Link_1140761314" TEXT="Esimerkit">
<node LINK="http://www.mit.jyu.fi/vesal/kurssit/ohj2/moniste/esim/oiktark/" ID="_Freemind_Link_1980880665" TEXT="moniste_esim/oiktark">
<node TEXT="Huom. eri funktio-olioiden yhdist&#xe4;minen ja uusien funktio-olioiden luonti &quot;lennossa&quot; nimett&#xf6;mill&#xe4; sis&#xe4;luokilla"/>
</node>
</node>
</node>
<node ID="_Freemind_Link_933302686" TEXT="Ruudulle piirt&#xe4;misest&#xe4;" FOLDED="true" POSITION="right">
<node ID="_Freemind_Link_291253310" TEXT="Ks. esim. Vesterholm &amp; Kypp&#xf6;, luku 13.6: n&#xe4;yt&#xf6;lle piirt&#xe4;minen"/>
<node TEXT="AWT vs Swing"/>
<node ID="_Freemind_Link_1456996162" TEXT="piirtoa varten syrj&#xe4;ytet&#xe4;&#xe4;n paint-metodi esim Canvas, Panel tai Applet-luokassa">
<node ID="_Freemind_Link_768122820" TEXT="metodia kutsutaan automaattisesti, kun komponentti on piirrett&#xe4;v&#xe4; uudelleen (tarvittaessa voidaan my&#xf6;s tarkistaa, mitk&#xe4; ruudun osat on piirrett&#xe4;v&#xe4;)"/>
<node ID="_Freemind_Link_1900584973" TEXT="Ei liian kauan kest&#xe4;v&#xe4;&#xe4; koodia paintiin: ohjelman hidastuminen havaittavissa nopesti (ellei s&#xe4;ikeit&#xe4; ole k&#xe4;yt&#xf6;ss&#xe4;, sovellus ei pysty piirt&#xe4;misen aikana vastaanottamaan tapahtumia)"/>
</node>
<node ID="_Freemind_Link_1678610498" TEXT="Piirto&quot;mediasta&quot; huolimatta perusperiaate on yleens&#xe4; sama: (x,y)-koordinaatisto, jonne asetetaan pikseleit&#xe4; n&#xe4;kyviin">
<node ID="_Freemind_Link_981161388" TEXT="Esim. demoissa piirto tekstitilaan tai ikkunaan"/>
</node>
<node ID="_Freemind_Link_1904600930" TEXT="KolmioPiirto, PiirtoMalli, PiirtoMalliSwing"/>
</node>
<node ID="_Freemind_Link_746252771" TEXT="P&#xe4;&#xe4;tesy&#xf6;tt&#xf6;" FOLDED="true" POSITION="left">
<node ID="_Freemind_Link_1464746713" TEXT="L&#xe4;ht&#xf6;kohta: kysy_tiedot -metodin kehitt&#xe4;minen"/>
<node ID="_Freemind_Link_1116849473" TEXT="Indeksoidut kent&#xe4;t - keino k&#xe4;ytt&#xf6;liittym&#xe4;n ja sovelluslogiikan erottamiseen p&#xe4;&#xe4;tesy&#xf6;t&#xf6;ss&#xe4;">
<node ID="_Freemind_Link_1480822493" TEXT="Ei vaadi v&#xe4;ltt&#xe4;m&#xe4;tt&#xe4; omaa kentt&#xe4;luokkaa - rajapinnan kannalta indeksoidut saanti- ja asetusmetodit riitt&#xe4;v&#xe4;t"/>
<node ID="_Freemind_Link_524459520" TEXT="Tietojen siirto n&#xe4;yt&#xf6;n ja j&#xe4;senen v&#xe4;lill&#xe4; kannattaa pit&#xe4;&#xe4; merkkijonomuotoisena (tyyppimuunnokset vain j&#xe4;seness&#xe4;)"/>
<node ID="_Freemind_Link_371269403" TEXT="eka: ensimm&#xe4;inen _k&#xe4;ytt&#xe4;j&#xe4;lle n&#xe4;ytett&#xe4;v&#xe4;_ kentt&#xe4; (id-numerot ennen ekaa)"/>
</node>
<node ID="_Freemind_Link_1589547729" TEXT="Toisesta tietorakenteesta haettavat valintalistat aiheuttavat hieman lis&#xe4;vaivaa">
<node ID="_Freemind_Link_1995831240" TEXT="toimintaa siirrett&#xe4;v&#xe4; j&#xe4;sentasolta kerhotasolle"/>
<node ID="_Freemind_Link_1766027479" TEXT="esim. harrastusten kysely on helppoa toteuttaa ilman lis&#xe4;toimintoja (oleellisesti sama koodi kuin j&#xe4;senen tietojen kysymisess&#xe4;), mutta esim. genre- tai esitt&#xe4;j&#xe4;listan tulostaminen sy&#xf6;tett&#xe4;ess&#xe4; tietoja cd-rekisteriin vaatii jo pohjaa hakuj&#xe4;rjestelm&#xe4;lle."/>
<node ID="_Freemind_Link_1888343063" TEXT="Esimerkki:kaupunkien lis&#xe4;&#xe4;minen j&#xe4;senrekisteriin (tietokannan normalisointia)">
<node ID="_Freemind_Link_1554800318" TEXT="Tehd&#xe4;&#xe4;n uudet luokat Kaupungit ja Kaupunki (sis&#xe4;lt&#xe4;&#xe4; vain nimen ja id-numeron)"/>
<node ID="_Freemind_Link_1559066345" TEXT="Rakenteen muutoksen seurauksena J&#xe4;sen ei en&#xe4;&#xe4; tied&#xe4; suoraan kotikaupunkiaan, vaan ainoastaan sen ID-numeron"/>
<node ID="_Freemind_Link_761653741" TEXT="Koska J&#xe4;sen ei saa olla suoraan tietoinen Kaupunki-luokasta, J&#xe4;sen ei t&#xe4;m&#xe4;n j&#xe4;lkeen mm. pysty tulostamaan itse&#xe4;&#xe4;n k&#xe4;ytt&#xe4;jille kaupunkitiedon kanssa =&gt; tulostustoiminto siirrett&#xe4;v&#xe4; Kerho-luokkaan"/>
<node ID="_Freemind_Link_864610466" TEXT="Lis&#xe4;ksi tietoja kysytt&#xe4;ess&#xe4; k&#xe4;ytt&#xe4;j&#xe4;n on saatava tarvittaessa n&#xe4;hd&#xe4; kaupunkilista, josta valita j&#xe4;senen kotipaikka =&gt; monimutkaistaa n&#xe4;ytt&#xf6;luokkaa"/>
<node ID="_Freemind_Link_992269206" TEXT="Toiminta kannattaa toteuttaa t&#xe4;ysim&#xe4;&#xe4;r&#xe4;isen&#xe4; vasta, kun k&#xe4;yt&#xf6;ss&#xe4; on hakuj&#xe4;rjestelm&#xe4; - aluksi voidaan toteuttaa tietorakenne ja esim. j&#xe4;senen tulostus" FOLDED="true">
<node ID="_Freemind_Link_1419110488" TEXT="Periaate: siirret&#xe4;&#xe4;n kaupungin id-numero kenttiin, joita ei kysyt&#xe4; k&#xe4;ytt&#xe4;j&#xe4;lt&#xe4; silmukassa ja siirret&#xe4;&#xe4;n kysyminen suoraan n&#xe4;ytt&#xf6;&#xf6;n"/>
<node ID="_Freemind_Link_252098981" TEXT="K&#xe4;ytt&#xf6;liittym&#xe4; esim: k&#xe4;ytt&#xe4;j&#xe4; voi kirjoittaa kaupungin nimen tai pyyt&#xe4;&#xe4; listan, josta valita"/>
<node ID="_Freemind_Link_1010450117" TEXT="Jos kirjotettua nime&#xe4; ei l&#xf6;ydy kaupungeista, varmistetaan kaupungin lis&#xe4;&#xe4;minen"/>
<node ID="_Freemind_Link_1061460681" TEXT="Asetetaan j&#xe4;senen kapunkiID lis&#xe4;tyn/etsityn kaupungin ID:n mukaisesti"/>
</node>
</node>
</node>
<node LINK="http://people.cc.jyu.fi/~minurmin/ohj2/materiaali/kerho/lukemine_71/" ID="_Freemind_Link_290516832" TEXT="Esimerkki: kerho/lukemine_71">
<node ID="_Freemind_Link_1632468482" TEXT="Harrastusten kysely? Valintalistan tulostaminen?"/>
</node>
</node>
<node ID="_Freemind_Link_758793548" TEXT="Oikeellisuustarkistukset " FOLDED="true" POSITION="left">
<node ID="_Freemind_Link_1028320082" TEXT="Vaihtoehtoja">
<node ID="_Freemind_Link_1590391567" TEXT="Omat tarkistusfunktiot kutakin kentt&#xe4;&#xe4; varten (esim. suoraan kysy_tiedot-metodissa)">
<node ID="_Freemind_Link_283747624" TEXT="Paljon koodia, ei yll&#xe4;pidett&#xe4;v&#xe4;&#xe4;"/>
</node>
<node ID="_Freemind_Link_808511415" TEXT="Paluukoodin palauttaminen sijoittamisen yhteydess&#xe4;">
<node ID="_Freemind_Link_1680967136" TEXT="C-tyyli&#xe4;, olio-ohjelmassa ennemmin poikkeuksia k&#xe4;ytt&#xe4;en (pakottavat k&#xe4;sittelem&#xe4;&#xe4;n virhetilanteen)"/>
</node>
<node ID="_Freemind_Link_1348867915" TEXT="Yleisk&#xe4;ytt&#xf6;isin (ja oliopohjaisin) tapa: Kentt&#xe4;- ja Tarkistaja-luokat">
<node ID="_Freemind_Link_1471153697" TEXT="Esim. henkil&#xf6;tunnusta tarkastettaessa tarkastus teht&#xe4;v&#xe4; J&#xe4;senet-luokan avulla (huom. ei ole n&#xe4;in kerhoesimerkiss&#xe4; - miten korjataan?)"/>
<node ID="_Freemind_Link_995116196" TEXT="Huom. Kentt&#xe4;oliotkaan eiv&#xe4;t tied&#xe4; muista tietorakenteista, olioiden yhteisty&#xf6; ylempien luokkien vastuulla"/>
<node ID="_Freemind_Link_562757203" TEXT="1-M -suhteiden tapauksessa tarvitsevat tietoa my&#xf6;s muista rakenteista -&gt; tarkastus kerhossa (tai kerhoparametrilla)"/>
</node>
</node>
<node ID="_Freemind_Link_1841366459" TEXT="Huom. J&#xe4;sen-luokan rajapinta ulosp&#xe4;in pysyy edelleen samana, muutokset kysy_tiedot-metodiin minimaalisia">
<node ID="_Freemind_Link_68501398" TEXT="Suorituskykysyist&#xe4; tarkistajaoliot eiv&#xe4;t heit&#xe4; poikkeuksia, vaan virhetilanteesta ilmoitetaan merkkijonolla (null==ei virhett&#xe4;)"/>
</node>
<node ID="_Freemind_Link_596570231" TEXT="Esimerkit: ">
<node LINK="http://people.cc.jyu.fi/~minurmin/ohj2/materiaali/kerho/tarkistu_72/" ID="_Freemind_Link_1223448516" TEXT="kerho/tarkistu_72"/>
<node ID="_Freemind_Link_1738703679" TEXT="C++ -kerho: vapaatyy/kerhotar.cpp">
<node ID="_Freemind_Link_4256643" TEXT="Tarkistusfunktio sis&#xe4;lt&#xe4;&#xe4; tiedon tarkistettavasta j&#xe4;senest&#xe4; sek&#xe4; kerhosta"/>
</node>
</node>
</node>
<node ID="_Freemind_Link_382214510" TEXT="Avustukset" FOLDED="true" POSITION="left">
<node ID="_Freemind_Link_984210362" TEXT="Yleisavustus tai sis&#xe4;lt&#xf6;riippuvainen avustus"/>
<node ID="_Freemind_Link_1374202374" TEXT="Avustusdatan tulee olla erill&#xe4;&#xe4;n varsinaisesta ohjelmasta" FOLDED="true">
<node ID="_Freemind_Link_196307590" TEXT="(ohjelmoija kirjoittanee itse harvoin avustusta loppuk&#xe4;ytt&#xe4;jille - ainakaan siin&#xe4; muodossa, jota loppuk&#xe4;ytt&#xe4;j&#xe4; ymm&#xe4;rt&#xe4;&#xe4;)"/>
</node>
<node ID="_Freemind_Link_1126297035" TEXT="Avustusformaatti: oma tai vaikka kokoelma HTML-sivuja" FOLDED="true">
<node ID="_Freemind_Link_1212376469" TEXT="HTML-sivut voidaan avata Javan omalla swing-selaimella tai antaa j&#xe4;rjestelm&#xe4;n selaimelle (BrowserLauncher)"/>
<node ID="_Freemind_Link_1213303786" TEXT="HTML-sivut voidaan windowsissa koota omaksi HTMLHelp-paketiksi (chm)"/>
<node ID="_Freemind_Link_703842601" TEXT="Javalla vastaava klooni: JavaHelp?"/>
</node>
<node ID="_Freemind_Link_1761382550" TEXT="Ali.jar-paketissa oma luokka Help avustuksia varten"/>
<node ID="_Freemind_Link_1200362199" TEXT="Harjoitusty&#xf6;h&#xf6;n mielell&#xe4;&#xe4;n yksi avustuskohta/valikko (voidaan soveltaa suunnitelmasta riippuen)"/>
<node ID="_Freemind_Link_869086361" TEXT="Harjoittelua avustuksen tekemiseen: ks. demoteht&#xe4;v&#xe4;"/>
</node>
</node>
</map>
