<map version="0.7.1">
<node TEXT="Ohj2, luennot 1-2, 11.2.-12.2.2005">
<node ID="_Freemind_Link_1410503148" TEXT="Byrokratiaa" FOLDED="true" POSITION="left">
<node LINK="https://korppi.jyu.fi/" TEXT="Korppi">
<node LINK="https://korppi.jyu.fi/kotka/course/student/generalCourseInfo.jsp?course=17333&amp;language=2" TEXT="Ilmoittautuminen"/>
<node LINK="https://korppi.jyu.fi/kotka/portal/showAddUser.jsp" TEXT="Tunnusten hankinta"/>
<node TEXT="Miksi?">
<node TEXT="Demopisteiden laskenta"/>
<node TEXT="Harjoitust&#xf6;iden seuranta"/>
<node TEXT="Kalenteri"/>
</node>
</node>
<node TEXT="Luennot">
<node LINK="http://people.cc.jyu.fi/~minurmin/ohj2/index.php#materiaali" TEXT="Materiaali"/>
<node LINK="https://korppi.jyu.fi/kotka/course/student/generalCourseInfo.jsp?course=17333" TEXT="Luentojen aiheet">
<node TEXT="Kurssin rakenne">
<node TEXT="Yleist&#xe4; algoritmikehityst&#xe4;"/>
<node TEXT="Java-kielen alkeita (kertausta Ohj 1:st&#xe4;)"/>
<node TEXT="Olio-ohjelmointia"/>
<node TEXT="Kehittyneempi&#xe4; ominaisuuksia k&#xe4;ytt&#xe4;en p&#xe4;&#xe4;osin Kerho-ohjelmaa mallina"/>
</node>
<node TEXT="Vrt. Ohj1-kurssi!">
<node TEXT="P&#xe4;&#xe4;llekk&#xe4;isyyksi&#xe4; jonkin verran erityisesti kurssin alkupuolella"/>
<node TEXT="Tarkista demoteht&#xe4;vist&#xe4;, ettei ole kohtuuttomasti samoja teht&#xe4;vi&#xe4;..."/>
</node>
<node TEXT="Uusia aiheita voidaan k&#xe4;sitell&#xe4; ja rakennetta muokata opiskelijoiden toiveet huomioiden...">
<node TEXT="Esim. suunnittelumallit?"/>
<node TEXT="Onko jotain, mink&#xe4; voisi j&#xe4;tt&#xe4;&#xe4; pois?"/>
</node>
</node>
</node>
<node LINK="http://people.cc.jyu.fi/~minurmin/ohj2/demo.php" TEXT="Demot">
<node LINK="http://people.cc.jyu.fi/~minurmin/ohj2/demopalautus.php" TEXT="Palautetaan s&#xe4;hk&#xf6;isesti!"/>
<node TEXT="Demot k&#xe4;yd&#xe4;&#xe4;n l&#xe4;pi jokaisen luentoviikon ensimm&#xe4;isill&#xe4; tunneilla"/>
<node TEXT="Korppiin t&#xe4;ytett&#xe4;v&#xe4; DemoWWW-kentt&#xe4;"/>
<node TEXT="Demoista saa hyvityksi&#xe4; max 6p. &#xc4;&#xe4;rimm&#xe4;isen ahkerat demojen tekij&#xe4;t (&gt; 105%) saavat 9p tenttiin.">
<node TEXT="Huom. vanhoja demoteht&#xe4;vi&#xe4; ja vastauksia l&#xf6;ytyy verkosta..."/>
<node TEXT="Oppimisen kannalta teht&#xe4;v&#xe4;t on kuitenkin mietitt&#xe4;v&#xe4; itse (mahd. ryhm&#xe4;ty&#xf6;n&#xe4;). Vanhojen vastausten suora kopiointi on verrattavissa lunttaamiseen!"/>
</node>
</node>
<node LINK="http://people.cc.jyu.fi/~minurmin/ohj2/ohjaus.php" TEXT="P&#xe4;&#xe4;teohjaukset"/>
<node TEXT="Harjoitusty&#xf6;">
<node TEXT="Pakollinen!"/>
<node LINK="http://people.cc.jyu.fi/~minurmin/ohj2/htohje.php" TEXT="Ks. harjoitusty&#xf6;ohje"/>
<node TEXT="Mieluiten ryhm&#xe4;ty&#xf6; (max. 3 henkil&#xf6;&#xe4; / ryhm&#xe4;)"/>
<node TEXT="P&#xe4;&#xe4;osin kurssin harjoitusty&#xf6; toteutetaan &quot;pohjalta&quot; alkaen, erityisesti tietorakenteiden osalta."/>
<node TEXT="Viikon viimeisten p&#xe4;&#xe4;teohjausten j&#xe4;lkeen varattu ylim&#xe4;&#xe4;r&#xe4;inen tunti pelk&#xe4;st&#xe4;&#xe4;n harjoitust&#xf6;iden ohjausta varten"/>
<node TEXT="Harjoitusty&#xf6; tehd&#xe4;&#xe4;n vaiheittain, jokainen vaihe esitelt&#xe4;v&#xe4; henkil&#xf6;kohtaisesti."/>
</node>
<node TEXT="Tentti">
<node TEXT="24.5."/>
<node TEXT="&quot;lunttilappu&quot; saa olla mukana ja kehitysv&#xe4;lineiden dokumentaatiota saa k&#xe4;ytt&#xe4;&#xe4;, ei Interneti&#xe4;."/>
<node TEXT="Harjoitusty&#xf6; oltava hyv&#xe4;ksyttyn&#xe4; ennen tenttiin menoa! (huom. miinukset)"/>
</node>
</node>
<node ID="_Freemind_Link_72382729" TEXT="Sis&#xe4;ll&#xf6;st&#xe4;" FOLDED="true" POSITION="left">
<node LINK="http://localhost/ohj2/materiaali/kasitekartta.png" TEXT="Ks. k&#xe4;sitekartta!"/>
<node ID="_Freemind_Link_511902555" TEXT="Ohjelman suunnittelu" FOLDED="true">
<node TEXT="&#xc4;l&#xe4; anna ohjelmointikielen syntaksin h&#xe4;m&#xe4;t&#xe4;. SUUNNITTELU on ohjelmoinnin vaikein osa-alue."/>
<node TEXT="Uuden kielen syntaksi ja laajakin luokkakirjasto on opeteltavissa kohtuullisella ty&#xf6;ll&#xe4;"/>
<node TEXT="Parhaatkaan frameworkit, suunnittelumallit tai &quot;keittokirjat&quot; eiv&#xe4;t kuitenkaan poista raakaa ajatteluty&#xf6;t&#xe4;, jota teht&#xe4;v&#xe4;n hahmottaminen, sovellusalueen k&#xe4;sitteiden suhteiden ymm&#xe4;rt&#xe4;minen ja soveltaminen k&#xe4;yt&#xe4;nt&#xf6;&#xf6;n vaativat (niist&#xe4; on toki apua)!"/>
<node ID="_" TEXT="Huom. t&#xe4;m&#xe4; ei tarkoita suunnittelua toteutus &apos;unohtaen&apos; (lukuunottamatta analyysivaihetta)" FOLDED="true">
<node ID="_Freemind_Link_325698872" TEXT="Riskej&#xe4;: k&#xe4;ytet&#xe4;&#xe4;n valtavasti aikaa suunnitelman hiomiseen, joka osoittautuu toteutuskelvottomaksi"/>
<node ID="_Freemind_Link_1005830459" TEXT="Miten yll&#xe4;pit&#xe4;&#xe4; laajoja suunnitelmia, kun vaatimukset kuitenkin muuttuvat jatkuvasti?"/>
</node>
</node>
<node ID="_Freemind_Link_186792465" TEXT="Tietorakenteet ja algoritmit" FOLDED="true">
<edge WIDTH="thin"/>
<font NAME="SansSerif" SIZE="12"/>
<node TEXT="Yleisi&#xe4; periaatteita, mm. &quot;hajota ja hallitse&quot;, iteraatio, rekursio"/>
<node TEXT="Taulukko- ja listarakenteiden toteutuksesta (huom. kehittyneemm&#xe4;t rakenteet j&#xe4;tet&#xe4;&#xe4;n p&#xe4;&#xe4;osin asiaan liittyv&#xe4;lle kurssille, muuten hy&#xf6;dynnet&#xe4;&#xe4;n Javan valmiita kirjastoja)"/>
</node>
<node TEXT="P&#xf6;yt&#xe4;testaus" FOLDED="true">
<node TEXT="Aliarvostettu tapa algoritmin testaamiseen ennen sen toteutusta"/>
</node>
<node ID="_Freemind_Link_1593819308" TEXT="Java-perusteet" FOLDED="true">
<node TEXT="Painopiste yleisiss&#xe4; ohjelmointirakenteissa, ei kielen tai kirjaston yksityiskohdissa"/>
<node TEXT="Kuitenkin kurssin edetess&#xe4; k&#xe4;sitell&#xe4;&#xe4;n my&#xf6;s Java 5:n (oikeastaan 1.5) uusia ominaisuuksia"/>
<node TEXT="K&#xe4;yt&#xf6;ss&#xe4; kurssin omia apualiohjelmia (mm. IO:n ja merkkijonojen k&#xe4;sittelyyn), muitakin (esim. Kypp&#xf6;-Vesterholm-aliohjelmat) saa k&#xe4;ytt&#xe4;&#xe4; rajoitetusti"/>
<node ID="_Freemind_Link_561666530" TEXT="Suosituimmat ohjelmointikielet ja kirjastot muuttuvat muutaman vuoden v&#xe4;lein, mutta ohjelmoinnin perusosaaminen ei ole 40 vuoden aikana muuttunut oleellisesti">
<node ID="_Freemind_Link_469159569" TEXT="Pyrkimyksen&#xe4; abstraktiotason nostaminen (vrt. assembler -&gt; c -&gt; java)"/>
<node ID="_Freemind_Link_803144374" TEXT="Toisaalta monet abstraktiotasoa nostavat ominaisuudet (!tarkista artikkeli!) ovat olleet funktiokieliss&#xe4; (esim. LISP, haskell) l&#xe4;hes alusta alkaen - integroituvat suositumpiin kieliin v&#xe4;hitellen (esim. C++:n templatet, Javan roskienkeruu)"/>
<node LINK="http://www.paulgraham.com/diff.html" ID="_Freemind_Link_1725892246" TEXT="ks. esim. Paul Graham: what made lisp different"/>
</node>
</node>
<node ID="_Freemind_Link_1390095324" TEXT="Luokkien suunnittelu ja testaus" FOLDED="true">
<node TEXT="Tulevat tutuksi harkkaty&#xf6;t&#xe4; tehdess&#xe4;..."/>
<node TEXT="Junit!"/>
</node>
<node ID="_Freemind_Link_1779025336" TEXT="Ohjelman kasaaminen" FOLDED="true">
<node TEXT="Ks. edellinen kohta"/>
</node>
</node>
<node ID="_Freemind_Link_1104597230" TEXT="Ohjelman suunnittelu" FOLDED="true" POSITION="right">
<node TEXT="Materiaali: moniste, luvut 1-3"/>
<node TEXT="Prosessimalleja" FOLDED="true">
<node TEXT="code &amp; fix"/>
<node TEXT="Vesiputousmalli (klassinen)">
<node TEXT="vaatimusm&#xe4;&#xe4;rittely, analyysi, suunnittelu, toteutus, testaus..."/>
</node>
<node TEXT="Iteratiivinen">
<node TEXT="toistetaan (iteroidaan) vesiputousmallin vaiheita"/>
</node>
<node TEXT="Inkrementaalinen">
<node TEXT="kehitet&#xe4;&#xe4;n pala (inkrementti) kerrallaan"/>
</node>
<node TEXT="XP (extreme programming -metodologia)">
<node TEXT="k&#xe4;sitt&#xe4;&#xe4; mm. pariohjelmoinnin, ennen koodausta kirjoitettavat yksikk&#xf6;testit ja voimakkaan refaktoroinnin"/>
</node>
<node TEXT="Lis&#xe4;&#xe4; &apos;ohjelmistotuotanto&apos;-kurssilla..."/>
</node>
<node TEXT="VL:n ohjelmointimalli, ks. kalvot" FOLDED="true">
<node TEXT="Teht&#xe4;v&#xe4;n saaminen"/>
<node TEXT="Teht&#xe4;v&#xe4;n tarkentaminen, toimintojen hahmottaminen"/>
<node TEXT="Luokkien, toimintojen ja tietorakenteiden suunnittelu"/>
<node TEXT="Yksityiskohtainen algoritmien suunnittelu"/>
<node TEXT="OHJELMOINTITY&#xd6;KALUN VALINTA"/>
<node TEXT="Luokkien ja algoritmien tarkentaminen valitulle ty&#xf6;kalulle"/>
<node TEXT="Ohjelmakoodin kirjoittaminen"/>
<node TEXT="Ohjelman testaus"/>
<node TEXT="Ohjelman k&#xe4;ytt&#xf6;&#xf6;notto"/>
<node TEXT="Ohjelman yll&#xe4;pito"/>
</node>
<node TEXT="Suunnittelusta" FOLDED="true">
<node TEXT="Ohjelmointi != ty&#xf6;kalun (kielen ja kehitysymp&#xe4;rist&#xf6;n) hienouksien opettelu!"/>
<node TEXT="Kehityksen alkuvaiheessa on syyt&#xe4; keskitty&#xe4; ongelman analysointiin ja ohjelman suunnitteluun"/>
<node TEXT="K&#xe4;ytt&#xe4;j&#xe4;n ja vaatimusm&#xe4;&#xe4;rittelyn kannalta protoilu ja joka k&#xe4;ytt&#xf6;ohjeen kirjoittaminen etuk&#xe4;teen kannattaa."/>
</node>
<node ID="_Freemind_Link_1809960531" TEXT="Ty&#xf6;kalun valinnasta" FOLDED="true">
<node ID="_Freemind_Link_753640469" TEXT="Ty&#xf6;kalu tarpeen mukaan: C, Java, Python, Fortran ym ym on suunniteltu erilaisten ongelmien ratkaisuun eik&#xe4; niiden &quot;paremmuuden&quot; vertailu ole t&#xe4;ysin mielek&#xe4;st&#xe4;"/>
<node TEXT="Joskus my&#xf6;s valmis tietokanta- taulukkolaskenta- tai jopa tekstink&#xe4;sittelyohjelma makroilla riitt&#xe4;&#xe4;"/>
<node TEXT="Ohjelmat vs. skriptit"/>
<node TEXT="Komentorivi vs. graafinen k&#xe4;ytt&#xf6;liittym&#xe4;"/>
<node TEXT="Hajautus: yhdistet&#xe4;&#xe4;n erillisi&#xe4; sovelluksia ja komponentteja (esim. ActiveX-kontrollit. l&#xf6;yhimmill&#xe4;&#xe4;n web-sovelluspalvelut)"/>
<node TEXT="Uudelleenk&#xe4;yt&#xf6;n mahdollisuudet (esim. Javalle saatavilla eritt&#xe4;in runsaasti valmiita komponentteja - toimivuus pit&#xe4;&#xe4; tietysti testata)"/>
</node>
<node ID="_Freemind_Link_487245843" TEXT="Koodauksesta" FOLDED="true">
<node TEXT="TOP-DOWN- ja BOTTOM-UP-periaatteet"/>
<node ID="_Freemind_Link_1652517884" TEXT="K&#xe4;yt&#xe4;nn&#xf6;ss&#xe4; jokaisen ohjelman kehitys vaatii kummankin periaatteen soveltamista, mahdollisesti samanaikaisesti"/>
<node ID="_Freemind_Link_1957649719" TEXT="Hajota ja hallitse - ratkaisu ohjelmistojen monimutkaisuuden ymm&#xe4;rt&#xe4;miseen" FOLDED="true">
<node ID="_Freemind_Link_1950279723" TEXT="&quot;Insin&#xf6;&#xf6;riparadigma&quot;: hajota ongelma pienempiin osiin niin kauan, ett&#xe4; yksitt&#xe4;iset osat ovat hallittavissa"/>
<node TEXT="ongelmia: kuinka hajottaa ja kuinka varmistaa viestint&#xe4; eri komponenttien v&#xe4;lill&#xe4;"/>
<node TEXT="komponenttien riippuvuudet?"/>
</node>
</node>
<node ID="_Freemind_Link_1419478491" TEXT="Testauksesta" FOLDED="true">
<node TEXT="Suunnitteluvaiheessa algoritmin p&#xf6;yt&#xe4;testaus ja ajonaikaisten testitapausten suunnittelu"/>
<node TEXT="Koodausvaiheessa jokainen metodi ja luokka pit&#xe4;isi yksikk&#xf6;testata (esim. JUnit)"/>
<node ID="_Freemind_Link_548006893" TEXT="Debuggerit ovat korvaamattomia, kunhan niit&#xe4; osaa k&#xe4;ytt&#xe4;&#xe4; oikein"/>
</node>
<node ID="_Freemind_Link_433475021" TEXT="ks. vl-kalvot (stroustrup-kommentteja ym)"/>
</node>
<node ID="_Freemind_Link_267489234" TEXT="Esimerkkiohjelmat: Kerhon j&#xe4;senrekisteri ja tulkkiohjelma" FOLDED="true" POSITION="right">
<node ID="_Freemind_Link_1948432606" TEXT="Materiaali: luentomoniste, luku 2">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_636858602" TEXT="Tiedostoformaateista">
<node TEXT="CSV">
<node TEXT="Siirrett&#xe4;v&#xe4; esim. Exceliin tai tietokantoihin"/>
</node>
<node ID="_Freemind_Link_1571142964" TEXT="XML">
<node LINK="http://appro.mit.jyu.fi/cgi-bin/printfile.cgi?file=http://appro.mit.jyu.fi/kurki/kelmit.xml" TEXT="Kerhoformaatti XML:n&#xe4;"/>
<node TEXT="Viinirekisteri. :-)"/>
</node>
<node ID="_Freemind_Link_1006157596" TEXT="Sovelletut tekstiformaatit"/>
<node ID="_Freemind_Link_655736584" TEXT="Bin&#xe4;&#xe4;riformaatit"/>
</node>
<node ID="_Freemind_Link_462461867" TEXT="K&#xe4;ytt&#xf6;liittym&#xe4;st&#xe4;">
<edge WIDTH="thin"/>
<node ID="_Freemind_Link_1558117832" TEXT="Ks. kerho-ohjelma, lukemine_71">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_1723669924" TEXT="Tekstipohjaisen k&#xe4;ytt&#xf6;liittym&#xe4;n etuna on sen helppo kuvattavuus suunnitelmassa">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_1873724566" TEXT="Lis&#xe4;ksi tekstipohjaista j&#xe4;rjestelm&#xe4;&#xe4; voidaa periaatteessa testata automaattisesti sy&#xf6;tt&#xf6;virran avulla (java Naytto &lt; syotto.txt)">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_1994615696" TEXT="Toisaalta ohjelman toiminta voidaan tallentaa tulostusvirran avulla (java Naytto &gt; tulos.txt) (kannattaa yhdist&#xe4;&#xe4; sy&#xf6;tt&#xf6;virtaan)">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_835779995" TEXT="Jo k&#xe4;ytt&#xf6;liittym&#xe4;n ohjetta voidaan &quot;testata&quot; loppuk&#xe4;yttj&#xe4;ll&#xe4;">
<edge WIDTH="thin"/>
<node ID="_Freemind_Link_1980816855" TEXT="Koodaajan ja loppuk&#xe4;ytt&#xe4;j&#xe4;n mielipiteet helppoudesta eiv&#xe4;t aina kohtaa...">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_371801111" TEXT="Toisaalta k&#xe4;ytt&#xe4;j&#xe4; ei aina tied&#xe4; mit&#xe4; haluaa">
<edge WIDTH="thin"/>
</node>
</node>
</node>
<node ID="_Freemind_Link_1489462512" TEXT="Ohjelmien yleisest&#xe4; rakenteesta:">
<node ID="_Freemind_Link_1502400550" TEXT="&quot;MVC&quot; (Model-View-Controller) -kerrosarkkitehtuuri"/>
<node ID="_Freemind_Link_845270507" TEXT=" = k&#xe4;ytt&#xf6;liittym&#xe4;, sovelluslogiikka ja &quot;tietokanta&quot; pyrit&#xe4;&#xe4;n erottamaan toisistaan"/>
<node ID="_Freemind_Link_39555825" TEXT="Etuja: tiedon esitystapa (esim. tekstitiedosto, tietokantapalvelin) voidaan vaihtaa, k&#xe4;ytt&#xf6;liittym&#xe4; (teksti, web, desktop) voidaan vaihtaa.">
<node ID="_Freemind_Link_1403908459" TEXT="ks. winkerho">
<edge WIDTH="thin"/>
</node>
</node>
<node ID="_Freemind_Link_1000386134" TEXT="Haittapuolena on, ett&#xe4; ohjelmaan joudutaan m&#xe4;&#xe4;rittelem&#xe4;&#xe4;n samoja asioita moneen kertaan. Lis&#xe4;ksi kerrosten pit&#xe4;minen erill&#xe4;&#xe4;n ei ole aina yksinkertaista."/>
</node>
</node>
<node ID="_Freemind_Link_599454644" TEXT="Algoritmit" FOLDED="true" POSITION="right">
<node TEXT="Materiaali: moniste, luku 4"/>
<node LINK="http://appro.mit.jyu.fi/2002/johdatusohjelmointiin/" ID="_Freemind_Link_122426586" TEXT="Ks. my&#xf6;s Johdatus ohjelmointiin -luentomoniste, luku 1"/>
<node ID="_Freemind_Link_854886494" TEXT="Mik&#xe4; on algoritmi?" FOLDED="true">
<node ID="_Freemind_Link_57714207" TEXT="Algoritmi == yksik&#xe4;sitteinen kuvaus teht&#xe4;v&#xe4;n ratkaisuun tarvittavista toimenpiteist&#xe4;" FOLDED="true">
<node ID="_Freemind_Link_754279710" TEXT="Tarkemmin: mahdollisimman pitk&#xe4;lle tarkennettu toimenpidesarja, jossa askel askeleelta esitet&#xe4;&#xe4;n yksik&#xe4;sitteisess&#xe4; muodossa toimenpiteet asetetun ongelman ratkaisuun">
<node ID="_Freemind_Link_1427180715" TEXT="Lis&#xe4;ksi algoritmin suorituksen on jossain vaiheessa p&#xe4;&#xe4;tytt&#xe4;v&#xe4;"/>
</node>
<node ID="_Freemind_Link_689996084" TEXT="Teht&#xe4;v&#xe4;n suoritus koostuu erillisist&#xe4; osateht&#xe4;vist&#xe4; (alialgoritmit)"/>
<node ID="_Freemind_Link_1637889802" TEXT="Algoritmin kirjoittaminen on hierarkkinen prosessi, jossa teht&#xe4;v&#xe4;t jaetaan osateht&#xe4;viin, joita edelleen tarkennetaan, kunnes kukin osateht&#xe4;v&#xe4; on niin yksik&#xe4;sitteinen, ettei sen suorittamisessa ole moniselitteisyyksi&#xe4;">
<node ID="_Freemind_Link_1175323971" TEXT="&quot;hajota ja hallitse&quot;-periaate toiminnoille"/>
<node ID="_Freemind_Link_70801495" TEXT="jos osateht&#xe4;v&#xe4; &quot;kutsuu itse&#xe4;&#xe4;n&quot;, algoritmi on rekursiivinen"/>
</node>
<node ID="_Freemind_Link_1695387594" TEXT="Kun algoritmi on kuvattu riitt&#xe4;v&#xe4;n tarkasti, sen toteuttaminen ohjelmointikielell&#xe4; on helppoa"/>
<node ID="_Freemind_Link_380994659" TEXT="M&#xe4;&#xe4;rittelyn j&#xe4;lkeen algoritmeja kannattaa yleist&#xe4;&#xe4; muidenkin kuin alkuper&#xe4;isen ongelman ratkaisuun">
<node ID="_Freemind_Link_1877634616" TEXT="&quot;k&#xe4;sitteellinen aliohjelmakirjasto&quot;"/>
<node ID="_Freemind_Link_249177639" TEXT="toimintojen abstrahointia"/>
<node ID="_Freemind_Link_1861866934" TEXT="esim. lajittelualgoritmissa ei ole merkityst&#xe4; sill&#xe4;, mit&#xe4; lajitellaan, kunhan lajiteltavia alkioita voidaan verrata"/>
</node>
<node ID="_Freemind_Link_1982790433" TEXT="Tietty ongelma voidaan ratkaista monellakin algoritmilla. Kun ongelma on hyvin m&#xe4;&#xe4;ritelty, ratkaisut ovat vaihdettavissa">
<node ID="_Freemind_Link_1315740197" TEXT="vrt. ohjelmointikielten rajapinnat tai funktioiden parametriv&#xe4;litys"/>
<node ID="_Freemind_Link_641446792" TEXT="koskee my&#xf6;s alialgoritmeja.."/>
</node>
<node ID="_Freemind_Link_1455707918" TEXT="Huom. kaikki ongelmat eiv&#xe4;t ole algoritmisesti ratkaistavissa (esim. pys&#xe4;htymisongelma). Lis&#xe4;ksi monille ongelmille ei ole olemassa (tai tiedossa) laskennallisesti tehokkaita algoritmeja (esim. NP-t&#xe4;ydelliset ongelmat).">
<node ID="_Freemind_Link_274043680" TEXT="Pys&#xe4;htymisongelma: tee algoritmi, joka tarkastaa, pys&#xe4;htyyk&#xf6; sille sy&#xf6;tteen&#xe4; annettu ongelma &#xe4;&#xe4;rellisess&#xe4; ajassa"/>
<node ID="_Freemind_Link_772875448" TEXT="NP (nondeterministic polynomial) -t&#xe4;ydelliset ongelmat liittyv&#xe4;t usein graafin ominaisuuksien selvitt&#xe4;miseen.">
<node ID="_Freemind_Link_289038067" TEXT="Esim. kauppamatkustajan ongelma: etsi lyhin silmukka, joka kiert&#xe4;&#xe4; kaikki painotetun t&#xe4;ydellisen verkon solmut"/>
<node ID="_Freemind_Link_1701839445" TEXT="Ongelma voidaan ratkaista eksponentiaalisella algoritmilla, mutta polynomista algoritmia ei tunneta (mutta ei ole pystytty todistamaan, ettei sellaista olisi olemassa)"/>
</node>
</node>
</node>
<node ID="_Freemind_Link_1727147309" TEXT="Ohjelmointi == toimintaohjeiden (algoritmien) antamista ennalta m&#xe4;&#xe4;r&#xe4;tyn toimenpiteen suorittamista varten" FOLDED="true">
<node ID="_Freemind_Link_656178864" TEXT="Klassinen ohjelmointiparadigma: proseduraalinen ohjelmointi:">
<node ID="_Freemind_Link_1239256330" TEXT="valitse ohjelmalle tietorakenteet. k&#xe4;sittele tietorakenteita parhailla tiedossa olevilla algoritmeilla"/>
<node ID="_Freemind_Link_619314900" TEXT="ks. kalvo"/>
</node>
<node ID="_Freemind_Link_914820347" TEXT="olio-ohjelmoinnissa l&#xe4;hestymistapa on erilainen: samassa yhteydess&#xe4; esiintyv&#xe4;t tiedot ja toiminnot on koottu yhteen ja ohjelma hahmotetaan vuorovaikutuksessa kesken&#xe4;&#xe4;n olevien olioiden joukkona">
<node ID="_Freemind_Link_695157124" TEXT="t&#xe4;st&#xe4; huolimatta my&#xf6;s olioiden toiminta perustuu viime k&#xe4;dess&#xe4; algoritmeihin"/>
</node>
<node ID="_Freemind_Link_168297012" TEXT="muitakin paradigmoja on: funktio-ohjelmointi (ohjelma on funktio) ja logiikkaohjelmointi (ohjelma on looginen p&#xe4;&#xe4;ttelyketju) - sivuutetaan t&#xe4;&#xe4;ll&#xe4;, lis&#xe4;tietoa esim. Ohjelmointikielten periaatteet -kurssilla."/>
</node>
<node ID="_Freemind_Link_1864056932" TEXT="Esim. reseptit, ajo-ohjeet, videoiden ajastus, matemaattiset operaatiot ja tietokoneohjelmat."/>
<node ID="_Freemind_Link_1285800714" TEXT="Tietokoneohjelmia varten suunnitellut algoritmit kuvataan usein kieliriippumattomana pseudokoodina">
<node ID="_Freemind_Link_1602591049" TEXT="Yksinkertaisissa tapauksissa tai algoritmin osien kuvailussa voidaan k&#xe4;ytt&#xe4;&#xe4; my&#xf6;s vuokaavioita"/>
<node ID="_Freemind_Link_1211351288" TEXT="Matemaattista symboliikkaa (esim. joukko-operaatiot, loogiset lausekkeet) k&#xe4;ytet&#xe4;&#xe4;n my&#xf6;s pseudokoodin ohessa"/>
<node ID="_Freemind_Link_201019137" TEXT="Algoritmeja ei pit&#xe4;isi kuvata pelk&#xe4;st&#xe4;&#xe4;n ohjelmointikielell&#xe4;, koska t&#xe4;ll&#xf6;in ollaan liiaksi kiinni toteutustekniikassa (sin&#xe4;ns&#xe4; ohjelmakoodi on algoritmin tarkka kuvaus). Lis&#xe4;ksi pseudokoodi on ohjelmakoodia helpommin luettava."/>
<node ID="_Freemind_Link_707210477" TEXT="Laudatur-tason algoritmikuvauksia: formaalit menetelm&#xe4;t..."/>
</node>
</node>
<node ID="_Freemind_Link_620117259" TEXT="Matematiikan puolella l&#xf6;ydett&#xe4;viss&#xe4; runsaasti algoritmeja:" FOLDED="true">
<node ID="_Freemind_Link_1745180691" TEXT="Esim. matriisin determinantin laskeminen, matriisien kertolasku, matriisin k&#xe4;&#xe4;nt&#xf6;, Fourier-muunnoksen laskeminen, &quot;allekkain&quot; yhteen- ja kertolasku, fibonaccin lukujen laskeminen, eukleideen algoritmi, piin arvon laskeminen, yht&#xe4;l&#xf6;iden (numeerinen) ratkaiseminen, kaikki konstruktiiviset todistukset..."/>
<node ID="_Freemind_Link_1746274786" TEXT="Huomaa avainsana: &quot;laskeminen&quot;."/>
<node ID="_Freemind_Link_1127836897" TEXT="Algoritmin suoritus on &quot;mekaanista&quot; laskentaa! Tietojenk&#xe4;sittelyteoria on laskennan teoriaa."/>
<node ID="_Freemind_Link_465228984" TEXT="Seuraus: matematiikan osaamisesta on apua my&#xf6;s ohjelmoinnissa. Toisaalta ohjelmointia voi oppia, vaikka ei matemaatikko olisikaan."/>
</node>
<node ID="_Freemind_Link_227319934" TEXT="Esimerkki: ajo-ohjeet"/>
<node ID="_Freemind_Link_336625510" TEXT="Esimerkki: sanojen vertailu" FOLDED="true">
<node ID="_Freemind_Link_317798377" TEXT="versioita:" FOLDED="true">
<node ID="_Freemind_Link_484071656" TEXT="1. sanallinen kuvaus">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_658656556" TEXT="2. &quot;lausekielinen&quot; kuvaus"/>
<node ID="_Freemind_Link_1785756793" TEXT="3. pseudokoodi">
<node ID="_Freemind_Link_1472157229" TEXT="huomioitavaa: miten verrata tyhji&#xe4; sanoja muihin, miten sanat kuvataan t&#xe4;sm&#xe4;llisesti">
<edge WIDTH="thin"/>
</node>
</node>
<node ID="_Freemind_Link_555238420" TEXT="4. ohjelmakoodi">
<edge WIDTH="thin"/>
<node ID="_Freemind_Link_255411415" TEXT="huomioitavaa: String-luokan k&#xe4;ytt&#xf6;, isot vs. pienet kirjaimet, skandit ja muut kansalliset merkist&#xf6;t, java-kielen tapauksessa null-viitteet jne, reagointi erikoismerkkeihin ym. virheellisiin sy&#xf6;tteisiin...">
<edge WIDTH="thin"/>
</node>
</node>
</node>
<node ID="_Freemind_Link_1369733438" TEXT="demoteht&#xe4;viss&#xe4; lausekielinen kuvaus (mahdollisesti sanallisella kuvauksella t&#xe4;ydennettyn&#xe4;) on sopiva abstraktiotaso">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_1225193825" TEXT="ks. vaihtoehdot sanojen pituuksista - erikoistapauksia"/>
</node>
<node ID="_Freemind_Link_1774838824" TEXT="Esimerkki: lajittelu" FOLDED="true">
<node ID="_Freemind_Link_1488015359" TEXT="Ks. &quot;j&#xe4;rjest&#xe4;&quot;-ohjelma (GKO-esimerkki), sovelma-animaatiot"/>
<node ID="_Freemind_Link_988332709" TEXT="Useita mahdollisia algoritmeja">
<node ID="_Freemind_Link_868389662" TEXT="lis&#xe4;yslajittelu"/>
<node ID="_Freemind_Link_642369589" TEXT="valintalajittelu (&quot;etsi pienin&quot;)">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_891530314" TEXT="kuplalajittelu"/>
<node ID="_Freemind_Link_834881948" TEXT="muita algoritmeja: lomituslajittelu (merge sort), pikalajittelu (quick sort)">
<edge WIDTH="thin"/>
<node ID="_Freemind_Link_581207258" TEXT="Tietorakenteet &amp; algoritmit -kurssi...">
<edge WIDTH="thin"/>
</node>
</node>
<node ID="_Freemind_Link_1255713465" TEXT="lis&#xe4;ksi esim: luokamiehen lajittelu (bogosort, heitell&#xe4;&#xe4;n aineistoa ilmaan, kunnes se laskeutuu j&#xe4;rjestyksess&#xe4; maahan) ja kvanttilajittelu (odotetaan, ett&#xe4; kvanttimekaaniset muutokset ovat aiheuttaneet sen, ett&#xe4; aineisto on j&#xe4;rjestyksess&#xe4;) :-)">
<edge WIDTH="thin"/>
</node>
</node>
<node ID="_Freemind_Link_985283763" TEXT="Tarkennuksia: pienimm&#xe4;n etsiminen ja paikalleen sijoittaminen">
<edge WIDTH="thin"/>
</node>
</node>
<node ID="_Freemind_Link_1218949351" TEXT="Esimerkki: haku j&#xe4;rjestetyst&#xe4; joukosta" FOLDED="true">
<node ID="_Freemind_Link_576705621" TEXT="per&#xe4;kk&#xe4;ishaku">
<edge WIDTH="thin"/>
<node ID="_Freemind_Link_1301760276" TEXT="soveltuu my&#xf6;s j&#xe4;rjest&#xe4;m&#xe4;tt&#xf6;m&#xe4;lle joukolle">
<edge WIDTH="thin"/>
</node>
</node>
<node ID="_Freemind_Link_300414434" TEXT="puolitushaku">
<edge WIDTH="thin"/>
<node ID="_Freemind_Link_331384844" TEXT="kuva: puolitushaun eteneminen">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_1911540039" TEXT="algoritmin kompleksisuus on verrannollinen bin&#xe4;&#xe4;ripuun syvyyteen (2:n logaritmeja)">
<edge WIDTH="thin"/>
</node>
</node>
<node ID="_Freemind_Link_366573820" TEXT="matematiikassa puolitushakua voidaan k&#xe4;ytt&#xe4;&#xe4; esim. funktion 0-kohtien approksimointiin...">
<edge WIDTH="thin"/>
</node>
</node>
<node ID="_Freemind_Link_310778937" TEXT="Algoritmin kompleksisuus" FOLDED="true">
<node LINK="http://www.uta.fi/~jm58660/jutut/ohjelmointi/kompleksisuus.html" TEXT="Ks. Jori M&#xe4;ntysalo: Tietokoneohjelmien nopeus ja kompleksisuuden k&#xe4;site"/>
<node ID="_Freemind_Link_947438544" TEXT="Kompleksisuus tarkoittaa miten nopeasti resurssien kulutus kasvaa, kun tietoalkioiden m&#xe4;&#xe4;r&#xe4;&#xe4; lis&#xe4;t&#xe4;&#xe4;n" FOLDED="true">
<node ID="_Freemind_Link_290710380" TEXT="Resurssi voi t&#xe4;ss&#xe4; olla esim. suoritusaika (aikavaativuus) tai muistin kulutus (tilavaativuus)"/>
</node>
<node ID="_Freemind_Link_1302247223" TEXT="Kompleksisuus ilmoitetaan usein O(n)-notaatiolla, miss&#xe4; O tarkoittaa pahimman tapauksen kompleksisuutta ja n on funktio" FOLDED="true">
<node ID="_Freemind_Link_406244868" TEXT="Vakiot ja termikertoimet j&#xe4;tet&#xe4;&#xe4;n yleens&#xe4; pois"/>
<node ID="_Freemind_Link_1801135123" TEXT="Esim O(k) - vakio, O(log n) - logaritminen, O(n) - lineaarinen, O(n^2) - neli&#xf6;llinen, O(n^k) - polynominen, O(k^n) - eksponentiaalinen (k jokin vakio)" FOLDED="true">
<node ID="_Freemind_Link_1961439160" TEXT="Esim. taulukon n:n alkion haku on vakioaikainen, puolitushaku on logaritminen, per&#xe4;kk&#xe4;ishaku on lineaarinen, kupla- lis&#xe4;ys- ja valintalajittelut ovat neli&#xf6;llisi operaatioita"/>
<node ID="_Freemind_Link_622407905" TEXT="Kompleksisuudeltaan eksponentiaalisia ongelmia ei yleens&#xe4; voida ratkaista t&#xe4;sm&#xe4;llsesti suurilla joukoilla"/>
<node ID="_Freemind_Link_1199388747" TEXT="Ks. Excel-taulukko"/>
</node>
<node ID="_Freemind_Link_226520675" TEXT="Vakiokertoimien vaikutuksesta johtuen kompleksisuudeltaan suuri algoritmi voi olla kompleksisuudeltaan pienemp&#xe4;&#xe4; algoritmia tehokkaampi pienill&#xe4; tietojoukoilla">
<node ID="_Freemind_Link_1804677135" TEXT="Kun joukon koko kasvaa, kompleksisuudeltaan pienempi algoritmi suoriutuu kuitenkin teht&#xe4;v&#xe4;st&#xe4; tehokkaammin"/>
<node ID="_Freemind_Link_1000342782" TEXT="Toteutusvaiheessa teoreettisen vaativuuden lis&#xe4;ksi my&#xf6;s kiintolevyn ja muistin k&#xe4;yt&#xf6;ll&#xe4; on suuri merkitys (todellisen maailman tietokoneissa ei ole &#xe4;&#xe4;rett&#xf6;m&#xe4;sti muistia...)"/>
</node>
</node>
<node ID="_Freemind_Link_783550020" TEXT="Ohjelmaa kehitett&#xe4;ess&#xe4; pit&#xe4;isi olla jonkinlainen &quot;tuntuma&quot; siit&#xe4;, mit&#xe4; kertaluokkaa ohjelman vaativuus on" FOLDED="true">
<node ID="_Freemind_Link_1031048814" TEXT="Esim. kaksi sis&#xe4;kk&#xe4;ist&#xe4; silmukkaa sis&#xe4;lt&#xe4;v&#xe4; algoritmi on yleens&#xe4; neli&#xf6;llinen. Toisaalta monet &quot;hajota ja hallitse&quot;-tyyppiset algoritmit ovat logaritmisia."/>
<node ID="_Freemind_Link_292762813" TEXT="Jos ratkaistava ongelma tunnistetaan NP-t&#xe4;ydelliseksi tai viel&#xe4;kin vaativammaksi, sille ei todenn&#xe4;k&#xf6;isesti ole olemassa polynomista ratkaisua."/>
</node>
</node>
<node ID="_Freemind_Link_1550171290" TEXT="Vinkkej&#xe4; algoritmin kehitt&#xe4;miseen" FOLDED="true">
<node ID="_Freemind_Link_873384311" TEXT="Kun kehit&#xe4;t algoritmia, unohda muut ohjelman osat. Keskity vain ratkaistavaan osaongelmaan!"/>
<node ID="_Freemind_Link_1396657564" TEXT="Pyri konkretisoimaan ongelmaa (vrt numerot - pelikortit)">
<edge WIDTH="thin"/>
<node ID="_Freemind_Link_1623355107" TEXT="Samaa periaatetta voidaan soveltaa my&#xf6;s ohjelmistotuotantoon yleens&#xe4;: esim. XP-metodologiassa yritet&#xe4;&#xe4;n l&#xf6;yt&#xe4;&#xe4; koko j&#xe4;rjestelm&#xe4;&#xe4; kuvaava konkreettinen metafora, jonka pohjalta toiminnallisuus suunnitellaan">
<edge WIDTH="thin"/>
</node>
</node>
<node ID="_Freemind_Link_425676605" TEXT="Jos mahdollista, jaa ongelma edelleen osiin.">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_1088885507" TEXT="Kaikkea ei tarvitse ratkaista kerralla - aluksi yleinen vaatimus toimintalistassa riitt&#xe4;&#xe4;.">
<node ID="_Freemind_Link_1110285543" TEXT="vrt. ohjelmiston arkkitehtuurin suunnittelu: t&#xe4;ll&#xf6;in ongelma ei ole en&#xe4;&#xe4; yksitt&#xe4;isen toiminnon toteutustapa, vaan rajapinnan kuvaaminen palveluun, joka toiminnon toteuttaa."/>
</node>
<node ID="_Freemind_Link_495664191" TEXT="Kun algoritmi on kerran kehitetty, siihen ei tarvitse j&#xe4;lkik&#xe4;teen palata (ellei esim. haluta optimoida koodia)"/>
<node ID="_Freemind_Link_1738684340" TEXT="Muista yleist&#xe4;minen."/>
<node ID="_Freemind_Link_1813416334" TEXT="Luonnostele, piirr&#xe4; kuvia ja kaavioita.">
<edge WIDTH="thin"/>
<node ID="_Freemind_Link_744090539" TEXT="Ainakin allekirjoittaneelle lyijykyn&#xe4; ja ruutupaperi ovat ylivoimaiset suunnitteluv&#xe4;lineet">
<edge WIDTH="thin"/>
</node>
</node>
<node ID="_Freemind_Link_280254455" TEXT="Ohjelma vrt. organisaation johtaminen: ohjelmoija jakaa teht&#xe4;vi&#xe4; algoritmeille, jotka edelleen jakavat teht&#xe4;vi&#xe4; alialgoritmeille jne..." FOLDED="true">
<edge WIDTH="thin"/>
<node ID="_Freemind_Link_274143006" TEXT="Jokainen vastaa omasta osuudestaan ja kutsujan on luotettava siihen, ett&#xe4; ty&#xf6; tulee tehty&#xe4;">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_1138166018" TEXT="Laajaa ohjelmaa ei ole mahdollista hahmottaa t&#xe4;ydellisen&#xe4; kokonaisuutena, mutta yksitt&#xe4;isiin ohjelman osiin voidaan keskitty&#xe4;">
<edge WIDTH="thin"/>
</node>
</node>
<node ID="_Freemind_Link_391329333" TEXT="Itsest&#xe4;&#xe4;nselvyyksi&#xe4; ei ole!">
<edge WIDTH="thin"/>
<node ID="_Freemind_Link_1254080907" TEXT="Kone tekee sen, mit&#xe4; sen k&#xe4;sket&#xe4;&#xe4;n tekev&#xe4;n...">
<edge WIDTH="thin"/>
</node>
<node ID="_Freemind_Link_468055400" TEXT="...ei sit&#xe4;, mit&#xe4; k&#xe4;ytt&#xe4;j&#xe4; haluaisi sen tekev&#xe4;n.">
<edge WIDTH="thin"/>
</node>
</node>
</node>
</node>
</node>
</map>
