<map version="0.7.1">
<node TEXT="GKO, luennot 1-2, 26.3.2004">
<node TEXT="Sis&#xe4;ll&#xf6;st&#xe4;" POSITION="right">
<node TEXT="Graafinen k&#xe4;ytt&#xf6;liittym&#xe4;?" FOLDED="true">
<node LINK="http://en.wikipedia.org/wiki/Graphical_user_interface" TEXT="Kurssin kannalta GUI == _tapahtumapohjainen_ k&#xe4;ytt&#xf6;liittym&#xe4;">
<node TEXT="Tapahtumat ovat keino mallintaa k&#xe4;ytt&#xf6;liittym&#xe4;&#xe4;"/>
<node TEXT="Tapahtumapohjaisuuden kannalta esim. pankkiautomaatti tai kelloradio sis&#xe4;lt&#xe4;v&#xe4;t &quot;graafisen&quot; k&#xe4;ytt&#xf6;liittym&#xe4;n"/>
<node TEXT="Perinteinen m&#xe4;&#xe4;ritelm&#xe4;: WIMP (windows, icons, mouse, pointers)">
<node LINK="http://en.wikipedia.org/wiki/Graphical_user_interface" TEXT="Wikipedian n&#xe4;kemys aiheesta"/>
</node>
<node TEXT="Lukuisia k&#xe4;ytt&#xf6;liittym&#xe4;kirjastoja saatavilla">
<node TEXT="VCL ( delphi, c++ builder)"/>
<node TEXT="CLX (kylix, &quot;cross-platform VCL&quot;)"/>
<node LINK="http://java.sun.com/products/jfc/index.jsp" TEXT="AWT ja Swing (java)"/>
<node LINK="http://www.eclipse.org/swt/" TEXT="SWT (java, eclipse)"/>
<node LINK="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/mfchm.asp" TEXT="MFC (C++, windows)"/>
<node LINK="http://www.wxwindows.org/" TEXT="wxWidgets (C++, python, &quot;cross-platform MFC&quot;)"/>
<node LINK="http://www.gtk.org/" TEXT="GTK+ (useita kieli&#xe4; ja k&#xe4;ytt&#xf6;j&#xe4;rjestelmi&#xe4;)"/>
</node>
</node>
<node TEXT="Painotus toiminnallisuudessa, ei visuaalisuudessa">
<node TEXT="K&#xe4;ytett&#xe4;vyydest&#xe4; ja ulkoasun suunnittelusta saisi omat kurssinsa!"/>
<node TEXT="Pyrit&#xe4;&#xe4;n yleisk&#xe4;ytt&#xf6;isyyteen ja yll&#xe4;pidett&#xe4;vyyteen"/>
<node TEXT="Tavoite: &quot;visualisti&quot; suunnittelee ulkoasun koodaajan tekemill&#xe4; komponenteilla">
<node TEXT="A.K.A. ulkoasun erottaminen sovelluslogiikasta"/>
<node TEXT="K&#xe4;yt&#xe4;nn&#xf6;ss&#xe4; ei aina aivan suoraviivaista..."/>
</node>
<node TEXT="Ihannetapauksessa k&#xe4;ytt&#xf6;liittym&#xe4; kootaan valmiista &quot;palikoista&quot;, joita mukautetaan."/>
<node TEXT="Kurssin peruskysymys: kuinka suunnitella ja toteuttaa mahdollisimman yleisk&#xe4;ytt&#xf6;isi&#xe4; (erityisesti k&#xe4;ytt&#xf6;liittym&#xe4;&#xe4;n soveltuvia) komponentteja?"/>
</node>
</node>
<node TEXT="Olio-ohjelmointi" FOLDED="true">
<node TEXT="Olio == (identiteetti, tila, toiminnallisuus)"/>
<node LINK="http://www.mit.jyu.fi/ji/opetus/oo2002/oo2002_holub.pdf" TEXT="Hieman perusteellisemmin : &quot;Mika on olio?&quot; - Jonne Itkonen"/>
<node TEXT="Kurssilla teht&#xe4;v&#xe4;t asiat eiv&#xe4;t v&#xe4;ltt&#xe4;m&#xe4;tt&#xe4; ole &apos;puhdasoppista&apos; olio-ohjelmointia" FOLDED="true">
<node TEXT="Esim. typecastit, get/set-muuttujat"/>
<node TEXT="&quot;Rakenteista&quot; olio-ohjelmointia?"/>
<node TEXT="Olemassa olevat k&#xe4;ytt&#xf6;liittym&#xe4;kirjastoja ei yleens&#xe4; ole tehty olioparadigman mukaan"/>
<node TEXT="Huom! Oliot eiv&#xe4;t ole itsetarkoitus, vaan tapa mallintaa ongelmaa. ">
<node TEXT="K&#xe4;yt&#xe4;nn&#xf6;ss&#xe4; oliot ovat osoittautuneet toimiviksi k&#xe4;ytt&#xf6;liittymien toteutuksessa"/>
<node LINK="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Math.html" TEXT="Varoittava esimerkki: Javan Math-&quot;luokka&quot;: oliosta &apos;nimiavaruusk&#xe4;&#xe4;reeksi&apos;"/>
</node>
</node>
<node LINK="http://www.omg.org/uml/" TEXT="Standardi kuvauskieli: UML">
<node LINK="http://www.holub.com/goodies/" TEXT="K&#xe4;tev&#xe4; pikareferenssi (holub)"/>
<node TEXT="Saa k&#xe4;ytt&#xe4;&#xe4; harjoitusty&#xf6;n suunnittelussa."/>
<node LINK="http://argouml.tigris.org/" TEXT="Kohtuullinen editori: argoUML, muitakin l&#xf6;ytyy runsaasti, laatu vaihtelee."/>
</node>
</node>
<node TEXT="Komponenttiohjelmointi" FOLDED="true">
<node TEXT="Analogia teollisuudesta (esim. elektroniikkakomponentit)"/>
<node LINK="http://www.isbn.nu/0201178885" TEXT="Er&#xe4;s m&#xe4;&#xe4;ritelm&#xe4; (Szyperski): " FOLDED="true">
<node TEXT="&quot;A unit of independent deployment&quot;"/>
<node TEXT="&quot;Unit of 3rd party composition&quot;"/>
<node TEXT="&quot;No persistent state&quot;">
<node LINK="http://www.cca-forum.org/pipermail/cca-forum/2002-August/000220.html" TEXT="Komponentit ja tila"/>
<node LINK="http://www.cca-forum.org/pipermail/cca-forum/2002-December/000329.html" TEXT="Komponentti luokkam&#xe4;&#xe4;rityksen&#xe4;?"/>
</node>
</node>
<node LINK="http://c2.com/cgi/wiki?ComponentDefinition" TEXT="Muitakin m&#xe4;&#xe4;ritelmi&#xe4; on (wikiwiki)">
<node TEXT="K&#xe4;yt&#xe4;nn&#xf6;ss&#xe4; yksi komponentin keskeinen tunnusmerkki on m&#xe4;&#xe4;rittely rajapinnoilla (esim COM-objektit)"/>
</node>
<node TEXT="Ovatko Delphin &quot;komponentit&quot; komponentteja vai &quot;vain&quot; olioita?">
<node TEXT="Kurssin kannalta ne ovat hy&#xf6;dyllisi&#xe4; apuv&#xe4;lineit&#xe4; k&#xe4;ytt&#xf6;liittymien suunnitteluun ja ohjelmointiin, jatkossa puhumme komponenteista!"/>
</node>
</node>
<node TEXT="Hajautetut j&#xe4;rjestelm&#xe4;t" FOLDED="true">
<node TEXT="2-kerrosarkkitehtuuri: Asiakas/palvelin">
<node TEXT="Perinteiset tietokantasovellukset"/>
<node TEXT="Web-k&#xe4;ytt&#xf6;liittym&#xe4;t"/>
</node>
<node TEXT="3-kerrosarkkitehtuuri: data/toiminnallisuus/k&#xe4;ytt&#xf6;liittym&#xe4;">
<node TEXT="Tunnetaan my&#xf6;s er&#xe4;&#xe4;n&#xe4; versiona ns. Model/Control/View-arkkitehtuurista"/>
<node TEXT="Web-tietokantasovellukset (selain/sovelluspalvelin/tietokantapalvelin)"/>
</node>
<node TEXT="Interneti&#xe4; k&#xe4;ytett&#xe4;ess&#xe4; pohjalla TCP/IP-protokollapino"/>
<node TEXT="Komponenttimalleja hajautettuihin j&#xe4;rjestelmiin" FOLDED="true">
<node LINK="http://www.google.com/url?sa=U&amp;start=1&amp;q=http://www.corba.org/&amp;e=7317" TEXT="CORBA (omg)"/>
<node LINK="http://www.microsoft.com/com/" TEXT="COM/DCOM/COM+ (Microsoft)"/>
<node LINK="http://java.sun.com/products/ejb/index.jsp" TEXT="Enterprise JavaBeans"/>
<node LINK="http://www.w3.org/2002/ws/" TEXT="Web-sovelluspalvelut (Web Services, viime vuoden &quot;hypetyst&#xe4;&quot;)"/>
</node>
<node TEXT="Paikallisesti sovellusta voidaan hajauttaa DLL-kirjastojen avulla "/>
</node>
</node>
<node TEXT="Byrokratiaa" POSITION="left">
<node LINK="https://korppi.jyu.fi/" TEXT="Korppi" FOLDED="true">
<node LINK="https://korppi.jyu.fi/kotka/course/student/generalCourseInfo.jsp?course=7516&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" FOLDED="true">
<node LINK="http://people.cc.jyu.fi/~minurmin/gko/index.php#materiaali" TEXT="Materiaali"/>
<node LINK="https://korppi.jyu.fi/kotka/course/student/generalCourseInfo.jsp?course=7516" TEXT="Luentojen aiheet">
<node TEXT="Kurssin rakenne">
<node TEXT="Aluksi (26.3.) oliokertaus (C++)"/>
<node TEXT="Kurssin p&#xe4;&#xe4;osa Delphi&#xe4; ja komponentteja"/>
<node TEXT="Keskivaiheilla Windows-ohjelmointia WinAPI:lla ja tutustutaan MFC-kirjastoon (C++)"/>
<node TEXT="Erikoisaiheita, esim. TCP/IP, avustukset"/>
<node TEXT="Lopuksi (12.6.) tutustutaan k&#xe4;ytt&#xf6;liittymien ohjelmointiin Javalla"/>
</node>
</node>
</node>
<node LINK="http://people.cc.jyu.fi/~minurmin/gko/demo.php" TEXT="Demot" FOLDED="true">
<node LINK="http://people.cc.jyu.fi/~minurmin/gko/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>
<node LINK="http://people.cc.jyu.fi/~minurmin/gko/ohjaus.php" TEXT="P&#xe4;&#xe4;teohjaukset"/>
<node TEXT="Harjoitusty&#xf6;" FOLDED="true">
<node TEXT="Pakollinen!"/>
<node TEXT="Mieluiten ryhm&#xe4;ty&#xf6; (max. 3 henkil&#xf6;&#xe4; / ryhm&#xe4;)"/>
<node TEXT="&quot;Tarjous&quot; palautettava 15.4. menness&#xe4;"/>
<node TEXT="kieli ja kehitysv&#xe4;line periaatteessa vapaa (tosin pit&#xe4;&#xe4; olla k&#xe4;&#xe4;nnett&#xe4;viss&#xe4; windowsille)">
<node TEXT="Delphi&#xe4; suositellaan voimakkaasti!">
<node TEXT="Suurin osa kurssin teht&#xe4;vist&#xe4; tehd&#xe4;&#xe4;n Delphill&#xe4;"/>
<node TEXT="Vaivattomin tapa tehd&#xe4; harjoitusty&#xf6;"/>
</node>
<node TEXT="Java my&#xf6;s hyv&#xe4; valinta">
<node TEXT="Kannattaa, jos kielest&#xe4; on ennest&#xe4;&#xe4;n tuntemusta"/>
<node TEXT="Eritt&#xe4;in runsaasti valmiita komponentteja saatavilla"/>
</node>
<node TEXT="C++ - ei suositella">
<node TEXT="Kannattaa harkita, jos tarkoituksena tehd&#xe4; esim. DirectX-pohjainen peli"/>
<node TEXT="Pelkk&#xe4; WinApi-kutsujen k&#xe4;ytt&#xf6; ei ole syy C++:n k&#xe4;ytt&#xf6;&#xf6;n - onnistuu my&#xf6;s Delphist&#xe4;."/>
</node>
</node>
</node>
<node TEXT="Tentti" FOLDED="true">
<node TEXT="23.6."/>
<node TEXT="Materiaali (esimerkkiohjelmat, monisteet ja omat muistiinpanot) saa olla mukana"/>
<node TEXT="Harjoitusty&#xf6; oltava hyv&#xe4;ksyttyn&#xe4; ennen tenttiin menoa!"/>
</node>
</node>
<node LINK="http://www.mit.jyu.fi/~vesal/kurssit/winohj/htyot/" TEXT="Harjoitust&#xf6;it&#xe4;" FOLDED="true" POSITION="right">
<node LINK="http://www.it.jyu.fi/users/vesal/gko" TEXT="&quot;Malliharjoitusty&#xf6;&quot;"/>
<node TEXT="Mahdollisia aiheita">
<node TEXT="Pelit">
<node TEXT="Esim. strategia/r&#xe4;iskint&#xe4;/lauta/korttipelit"/>
</node>
<node TEXT="Tietokantasovellukset " FOLDED="true">
<node LINK="http://www.mit.jyu.fi/~vesal/kurssit/ohj2/kerho/" TEXT="esim. &quot;kerhon j&#xe4;senrekisteri&quot;-tyylinen ohjelma graafisella k&#xe4;ytt&#xf6;liittym&#xe4;ll&#xe4; ja mahdollisuudella tietokantayhteyteen"/>
</node>
<node TEXT="Verkko-ohjelmat">
<node TEXT="Esim. oma irc/news/ftp-client"/>
<node TEXT="WWW:t&#xe4; hy&#xf6;dynt&#xe4;v&#xe4;t"/>
</node>
<node TEXT="Omat aiheet?"/>
</node>
</node>
<node TEXT="Oliokertaus" FOLDED="true" POSITION="left">
<node LINK="http://www.mit.jyu.fi/~vesal/kurssit/winohj/html/moniste.htm" TEXT="Oliomoniste"/>
<node LINK="http://www.mit.jyu.fi/~vesal/kurssit/ohj2/moniste/html/moniste.htm" TEXT="Ohjelmointimoniste"/>
<node TEXT="Malliohjelmat">
<node LINK="http://www.mit.jyu.fi/~vesal/kurssit/winohj/oop/cpp/elain.cpp" TEXT="C++"/>
<node LINK="http://www.mit.jyu.fi/~vesal/kurssit/winohj/vclclx/elain/elain.dpr" TEXT="Pascal"/>
</node>
<node TEXT="rakenteisesta ohjelmoinnista olio-ohjelmointiin">
<node TEXT="rakenteinen ohjelmointi">
<node TEXT="tietueita ja taulukoita k&#xe4;sitell&#xe4;&#xe4;n funktioilla, jotka ryhmitell&#xe4;&#xe4;n moduuleihin">
<node LINK="http://appro.mit.jyu.fi/2002/kesa/johdatusohjelmointiin/luennot/luento21/" TEXT="Yksinkertainen esimerkki: henkil&#xf6;tiedot"/>
</node>
<node TEXT="tiedot ovat julkisia"/>
<node TEXT="helppoa toteuttaa, mutta yll&#xe4;pidett&#xe4;vyys k&#xe4;rsii"/>
</node>
<node TEXT="oliol&#xe4;hestymistapa: k&#xe4;sitteellist&#xe4; mallinnusta">
<node TEXT="vrt: semanttiset verkot"/>
<node TEXT="helpottaa ongelma-alueen ymm&#xe4;rt&#xe4;mist&#xe4;"/>
<node TEXT="yli- ja aliluokat"/>
</node>
<node TEXT="olio-ohjelmointi">
<node TEXT="kootaan tiettyyn k&#xe4;sitteeseen liittyv&#xe4;t tiedot ja funktiot yhteen olioiksi"/>
<node TEXT="olio on luokan ilmentyn&#xe4;"/>
<node TEXT="tiedot (attribuutit) kapseloidaan olion sis&#xe4;lle, ohjelmoinnissa painopiste on olion toiminnassa (metodit)">
<node TEXT="metodit ovat yleens&#xe4; olion julkinen rajapinta (tietysti voi olla my&#xf6;s yksityisi&#xe4; metodeja)"/>
<node TEXT="tiedon kapselointi edist&#xe4;&#xe4; yll&#xe4;pidett&#xe4;vyytt&#xe4; (sis&#xe4;inen toteutus voidaan vaihtaa)"/>
</node>
<node TEXT="olion toiminnallisuutta voi laajentaa perinn&#xe4;ll&#xe4;">
<node TEXT="polymorfisten metodien toteutukset voi syrj&#xe4;ytt&#xe4;&#xe4; aliluokissa ja n&#xe4;in muuttaa olion k&#xe4;ytt&#xe4;ytymist&#xe4;">
<node TEXT="C++:ssa metodi voidaan m&#xe4;&#xe4;ritell&#xe4; virtuaalifunktioksi"/>
<node TEXT="Delphiss&#xe4; override-m&#xe4;&#xe4;ritys virtuaalifunktioille"/>
<node TEXT="Javassa kaikki metodit ovat virtuaalisia"/>
</node>
<node TEXT="C++:ssa my&#xf6;s moniperint&#xe4; mahdollista, Delphiss&#xe4; ja Javassa moniperint&#xe4; korvataan rajapinnoilla">
<node LINK="http://www.mit.jyu.fi/luk/toteutettuja/MoniperintaVastaanRajapinnat/" TEXT="Kiinnostuneille ks Moniperint&#xe4; vs. Rajapinnat -LuK (Heikki Kainulainen)"/>
</node>
<node TEXT="perint&#xe4; helpottaa uudelleenk&#xe4;ytt&#xf6;&#xe4;"/>
<node TEXT="soveltuu k&#xe4;ytt&#xf6;liittymiin: esim. monirivinen tekstikentt&#xe4; on tavallisen tekstikent&#xe4;n aliluokka"/>
<node TEXT="perint&#xe4; voidaan (mutta ei yleens&#xe4; kannata) korvata koostamisella"/>
</node>
<node TEXT="Polymorfismi">
<node TEXT="Funktioiden ja operaattorien kuormitus"/>
<node TEXT="My&#xf6;h&#xe4;inen sidonta">
<node TEXT="Hy&#xf6;dyllist&#xe4; erityisesti olio-osoittimia (tai viitteist&#xe4;) k&#xe4;ytett&#xe4;ess&#xe4;"/>
</node>
</node>
<node LINK="http://www.mit.jyu.fi/~vesal/kurssit/cpp/materiaali/olio/index.html" TEXT="Ks. my&#xf6;s &quot;Oliokyselyn yhteenveto&quot; (Minna Hillebrand)"/>
</node>
</node>
</node>
<node TEXT="Eri kielten osoittimista ja viitteist&#xe4;" FOLDED="true" POSITION="right">
<node TEXT="C++:ss&#xe4; erikseen osoittimet, viitteet ja konkreettiset muuttuja" FOLDED="true">
<node TEXT="Viite on C++:ssa kuin osoitin, jonka osoittamaa paikkaa ei voi muuttaa"/>
<node TEXT="Konkreettisilla (automaattisilla) muuttujilla konstruktoria ja destruktoria kutsutaan automaattisesti"/>
<node TEXT="Dynaamista muistinvarausta k&#xe4;ytett&#xe4;ess&#xe4; virheit&#xe4; sattuu eritt&#xe4;in helposti!"/>
</node>
<node TEXT="Pascalissa olioita k&#xe4;sitell&#xe4;&#xe4;n viitteill&#xe4;, vain perustyypit ja merkkijonot konkreettisia" FOLDED="true">
<node TEXT="Varsinaisia osoittimia voi my&#xf6;s k&#xe4;ytt&#xe4;&#xe4;, mutta ei yleens&#xe4; tarvita"/>
<node TEXT="Vaatii totuttelua, jos on tottunut C++:n tapaan"/>
<node TEXT="Osittainen &quot;roskienkeruu&quot; komponenttien viitelaskurin avulla">
<node TEXT="Huom. _osittainen_. Vaatii tarkkuutta l&#xe4;hes yht&#xe4; paljon kuin C++ erityisesti koostetuilla komponenteiila "/>
</node>
</node>
<node TEXT="Javassa &quot;ei ole osoittimia&quot;, mutta olioita k&#xe4;sitell&#xe4;&#xe4;n viitteill&#xe4;, joiden osoittamaa paikkaa voidaan muuttaa" FOLDED="true">
<node TEXT="Viitesemantiikka vaatii Pascalin tapaan totuttelua C++:aan tottuneille"/>
<node TEXT="Roskienkeruu - olioita ei tarvitse tuhota itse. Johtaa erilaiseen ohjelmointityyliin kuin C++:lla huolimatta samanlaisesta syntaksista">
<node TEXT="Automatiikasta voi olla my&#xf6;s haittaa, koska ei ole standardia &apos;resurssien vapautinta&apos;, jota voisi kutsua turvallisesti itse."/>
<node TEXT="Vaikka virtuaalikone huolehtii muistista, on my&#xf6;s muita resursseja, joita pit&#xe4;&#xe4; varata ja vapauttaa: esim. tietokanta- ja verkkoyhteydet, ikkunat."/>
</node>
</node>
<node LINK="http://www.mit.jyu.fi/~vesal/kurssit/cpp/materiaali/osoitin/index.html" TEXT="Ks. my&#xf6;s &quot;Osoitinkyselyn yhteenveto&quot; (MN)"/>
</node>
<node TEXT="Demoista" FOLDED="true" POSITION="left">
<node LINK="http://www.mit.jyu.fi/vesal/kurssit/cpp/moniste/esim/c-muut/kysykaks.cpp" TEXT="Vinkki teht&#xe4;v&#xe4;&#xe4;n 11"/>
<node LINK="http://www.mit.jyu.fi/~vesal/kurssit/cpp/materiaali/tiedosto/index.html" TEXT="Kertausta tiedostoista: &quot;Tiedostokyselyn yhteenveto&quot; (Mikko Luukkonen)"/>
</node>
</node>
</map>
