- GKO, luennot 1-2, 26.3.2004
- Sisällöstä
- Graafinen käyttöliittymä?
- Kurssin kannalta GUI == _tapahtumapohjainen_ käyttöliittymä
- [ http://en.wikipedia.org/wiki/Graphical_user_interface ]
- Tapahtumat ovat keino mallintaa käyttöliittymää
- Tapahtumapohjaisuuden kannalta esim. pankkiautomaatti tai kelloradio sisältävät "graafisen" käyttöliittymän
- Perinteinen määritelmä: WIMP (windows, icons, mouse, pointers)
- Lukuisia käyttöliittymäkirjastoja saatavilla
- Painotus toiminnallisuudessa, ei visuaalisuudessa
- Käytettävyydestä ja ulkoasun suunnittelusta saisi omat kurssinsa!
- Pyritään yleiskäyttöisyyteen ja ylläpidettävyyteen
- Tavoite: "visualisti" suunnittelee ulkoasun koodaajan tekemillä komponenteilla
- A.K.A. ulkoasun erottaminen sovelluslogiikasta
- Käytännössä ei aina aivan suoraviivaista...
- Ihannetapauksessa käyttöliittymä kootaan valmiista "palikoista", joita mukautetaan.
- Kurssin peruskysymys: kuinka suunnitella ja toteuttaa mahdollisimman yleiskäyttöisiä (erityisesti käyttöliittymään soveltuvia) komponentteja?
- Olio-ohjelmointi
- Olio == (identiteetti, tila, toiminnallisuus)
- Hieman perusteellisemmin : "Mika on olio?" - Jonne Itkonen
- [ http://www.mit.jyu.fi/ji/opetus/oo2002/oo2002_holub.pdf ]
- Kurssilla tehtävät asiat eivät välttämättä ole 'puhdasoppista' olio-ohjelmointia
- Esim. typecastit, get/set-muuttujat
- "Rakenteista" olio-ohjelmointia?
- Olemassa olevat käyttöliittymäkirjastoja ei yleensä ole tehty olioparadigman mukaan
- Huom! Oliot eivät ole itsetarkoitus, vaan tapa mallintaa ongelmaa.
- Standardi kuvauskieli: UML
- [ http://www.omg.org/uml/ ]
- Komponenttiohjelmointi
- Analogia teollisuudesta (esim. elektroniikkakomponentit)
- Eräs määritelmä (Szyperski):
- [ http://www.isbn.nu/0201178885 ]
- "A unit of independent deployment"
- "Unit of 3rd party composition"
- "No persistent state"
- Muitakin määritelmiä on (wikiwiki)
- [ http://c2.com/cgi/wiki?ComponentDefinition ]
- Käytännössä yksi komponentin keskeinen tunnusmerkki on määrittely rajapinnoilla (esim COM-objektit)
- Ovatko Delphin "komponentit" komponentteja vai "vain" olioita?
- Kurssin kannalta ne ovat hyödyllisiä apuvälineitä käyttöliittymien suunnitteluun ja ohjelmointiin, jatkossa puhumme komponenteista!
- Hajautetut järjestelmät
- 2-kerrosarkkitehtuuri: Asiakas/palvelin
- Perinteiset tietokantasovellukset
- Web-käyttöliittymät
- 3-kerrosarkkitehtuuri: data/toiminnallisuus/käyttöliittymä
- Tunnetaan myös eräänä versiona ns. Model/Control/View-arkkitehtuurista
- Web-tietokantasovellukset (selain/sovelluspalvelin/tietokantapalvelin)
- Internetiä käytettäessä pohjalla TCP/IP-protokollapino
- Komponenttimalleja hajautettuihin järjestelmiin
- Paikallisesti sovellusta voidaan hajauttaa DLL-kirjastojen avulla
- Byrokratiaa
- Korppi
- [ https://korppi.jyu.fi/ ]
- Luennot
- Demot
- [ http://people.cc.jyu.fi/~minurmin/gko/demo.php ]
- Pääteohjaukset
- [ http://people.cc.jyu.fi/~minurmin/gko/ohjaus.php ]
- Harjoitustyö
- Pakollinen!
- Mieluiten ryhmätyö (max. 3 henkilöä / ryhmä)
- "Tarjous" palautettava 15.4. mennessä
- kieli ja kehitysväline periaatteessa vapaa (tosin pitää olla käännettävissä windowsille)
- Delphiä suositellaan voimakkaasti!
- Suurin osa kurssin tehtävistä tehdään Delphillä
- Vaivattomin tapa tehdä harjoitustyö
- Java myös hyvä valinta
- Kannattaa, jos kielestä on ennestään tuntemusta
- Erittäin runsaasti valmiita komponentteja saatavilla
- C++ - ei suositella
- Kannattaa harkita, jos tarkoituksena tehdä esim. DirectX-pohjainen peli
- Pelkkä WinApi-kutsujen käyttö ei ole syy C++:n käyttöön - onnistuu myös Delphistä.
- Tentti
- 23.6.
- Materiaali (esimerkkiohjelmat, monisteet ja omat muistiinpanot) saa olla mukana
- Harjoitustyö oltava hyväksyttynä ennen tenttiin menoa!
- Harjoitustöitä
- [ http://www.mit.jyu.fi/~vesal/kurssit/winohj/htyot/ ]
- "Malliharjoitustyö"
- [ http://www.it.jyu.fi/users/vesal/gko ]
- Mahdollisia aiheita
- Pelit
- Esim. strategia/räiskintä/lauta/korttipelit
- Tietokantasovellukset
- Verkko-ohjelmat
- Esim. oma irc/news/ftp-client
- WWW:tä hyödyntävät
- Omat aiheet?
- Oliokertaus
- Oliomoniste
- [ http://www.mit.jyu.fi/~vesal/kurssit/winohj/html/moniste.htm ]
- Ohjelmointimoniste
- [ http://www.mit.jyu.fi/~vesal/kurssit/ohj2/moniste/html/moniste.htm ]
- Malliohjelmat
- rakenteisesta ohjelmoinnista olio-ohjelmointiin
- rakenteinen ohjelmointi
- tietueita ja taulukoita käsitellään funktioilla, jotka ryhmitellään moduuleihin
- tiedot ovat julkisia
- helppoa toteuttaa, mutta ylläpidettävyys kärsii
- oliolähestymistapa: käsitteellistä mallinnusta
- vrt: semanttiset verkot
- helpottaa ongelma-alueen ymmärtämistä
- yli- ja aliluokat
- olio-ohjelmointi
- kootaan tiettyyn käsitteeseen liittyvät tiedot ja funktiot yhteen olioiksi
- olio on luokan ilmentynä
- tiedot (attribuutit) kapseloidaan olion sisälle, ohjelmoinnissa painopiste on olion toiminnassa (metodit)
- metodit ovat yleensä olion julkinen rajapinta (tietysti voi olla myös yksityisiä metodeja)
- tiedon kapselointi edistää ylläpidettävyyttä (sisäinen toteutus voidaan vaihtaa)
- olion toiminnallisuutta voi laajentaa perinnällä
- polymorfisten metodien toteutukset voi syrjäyttää aliluokissa ja näin muuttaa olion käyttäytymistä
- C++:ssa metodi voidaan määritellä virtuaalifunktioksi
- Delphissä override-määritys virtuaalifunktioille
- Javassa kaikki metodit ovat virtuaalisia
- C++:ssa myös moniperintä mahdollista, Delphissä ja Javassa moniperintä korvataan rajapinnoilla
- perintä helpottaa uudelleenkäyttöä
- soveltuu käyttöliittymiin: esim. monirivinen tekstikenttä on tavallisen tekstikentän aliluokka
- perintä voidaan (mutta ei yleensä kannata) korvata koostamisella
- Polymorfismi
- Funktioiden ja operaattorien kuormitus
- Myöhäinen sidonta
- Hyödyllistä erityisesti olio-osoittimia (tai viitteistä) käytettäessä
- Ks. myös "Oliokyselyn yhteenveto" (Minna Hillebrand)
- [ http://www.mit.jyu.fi/~vesal/kurssit/cpp/materiaali/olio/index.html ]
- Eri kielten osoittimista ja viitteistä
- C++:ssä erikseen osoittimet, viitteet ja konkreettiset muuttuja
- Viite on C++:ssa kuin osoitin, jonka osoittamaa paikkaa ei voi muuttaa
- Konkreettisilla (automaattisilla) muuttujilla konstruktoria ja destruktoria kutsutaan automaattisesti
- Dynaamista muistinvarausta käytettäessä virheitä sattuu erittäin helposti!
- Pascalissa olioita käsitellään viitteillä, vain perustyypit ja merkkijonot konkreettisia
- Varsinaisia osoittimia voi myös käyttää, mutta ei yleensä tarvita
- Vaatii totuttelua, jos on tottunut C++:n tapaan
- Osittainen "roskienkeruu" komponenttien viitelaskurin avulla
- Huom. _osittainen_. Vaatii tarkkuutta lähes yhtä paljon kuin C++ erityisesti koostetuilla komponenteiila
- Javassa "ei ole osoittimia", mutta olioita käsitellään viitteillä, joiden osoittamaa paikkaa voidaan muuttaa
- Viitesemantiikka vaatii Pascalin tapaan totuttelua C++:aan tottuneille
- Roskienkeruu - olioita ei tarvitse tuhota itse. Johtaa erilaiseen ohjelmointityyliin kuin C++:lla huolimatta samanlaisesta syntaksista
- Automatiikasta voi olla myös haittaa, koska ei ole standardia 'resurssien vapautinta', jota voisi kutsua turvallisesti itse.
- Vaikka virtuaalikone huolehtii muistista, on myös muita resursseja, joita pitää varata ja vapauttaa: esim. tietokanta- ja verkkoyhteydet, ikkunat.
- Ks. myös "Osoitinkyselyn yhteenveto" (MN)
- [ http://www.mit.jyu.fi/~vesal/kurssit/cpp/materiaali/osoitin/index.html ]
- Demoista