Suunnitteludokumentti
|
|
- Tuulikki Haapasalo
- 8 vuotta sitten
- Katselukertoja:
Transkriptio
1 Suunnitteludokumentti pokeriv3 Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
2 Kurssi Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Anne-Marie Grönroos Markus Oksanen Ville Pulkkinen Tommi Sankola Lari Sorvo Asiakas Teemu Saukonoja Tomi Pasanen Ryhmän ohjaaja Kim Ervasti Johtoryhmä Kimmo Simola Kotisivu Versiohistoria Versio Päiväys Tehdyt muutokset Ensimmäinen versio Katselmoitava versio Tarkastettava versio Korjattu toiseen tarkastukseen Jäädytetty versio
3 Sisältö i 1 Johdanto Dokumentin tarkoitus Aiheen kuvaus Sanasto 1 3 Arkkitehtuurisuunnitelma Järjestelmän kokonaiskuvaus Yleiskäyttöinen palvelin Palvelimen käyttöliittymä Yleiskäyttöinen asiakasohjelma Asiakasohjelman käyttöliittymät Pelimoduuli Pelimoduulin palvelinkomponentti Pelimoduulin asiakasohjelmakomponentti Tietokanta Rajapinnat Viestitysolioiden käsittelyyn liittyvät rajapinnat Interface CommunicationObjectReceiver Interface Router extends CommunicationObjectReceiver Moduulien rajapinnat Moduulit Palvelimen rajapinnat Asiakasohjelman rajapinnat Viestitysoliot Abstraktit luokat ClientObject ServerObject ServerDatabaseOperator Luokat 13
4 ii 6.1 Palvelin Asiakasohjelma Asiakasohjelman käyttöliittymät Pelimoduuli Tietokannat 46
5 1 Johdanto Dokumentin tarkoitus Tämä on Pokeriv3 -ryhmän suunnitteludokumentti pokeripalvelinohjelmiston toteutukselle. Suunnitteludokumentin tarkoitus on kertoa, miten vaatimusmäärittelydokumentista ilmi tulleet vaatimukset tullaan toteuttamaan. Suunnitteludokumentissa kuvataan järjestelmän arkkitehtuuri, komponentit, tietokanta sekä luokat. Suunnitteludokumentissa on kuvattu myös osien väliset rajapinnat. Komponenttien tarkempi toiminta tietorakenteiden ja algoritmien osalta on dokumentoitu vain, mikäli se on nähty tarpeelliseksi. 1.2 Aiheen kuvaus Kehitettävä pelipalvelinohjelmisto tarjoaa rajapinnan, jonka avulla voidaan testata erilaisia tekoälyratkaisuja peluuttamalla niitä eri tasoisia ja tyylisiä tietokone- ja ihmisvastustajia vastaan. Ohjelmisto mahdollistaa eräajon, jolloin voidaan pelata suuri määrä käsiä ja täten saada luotettavampaa tietoa tekoälyratkaisun hyvyydestä minimoimalla sattuman osuus korttien jakautumisessa. Järjestelmä mahdollistaa pokerin lisäksi myös muiden vuoropohjaisten pelien pelaamisen. Pelimoduulit voivat tarjota käyttäjälle mahdollisuuden muokata pelin sääntöjä tai parametrejä. Projektin yhteydessä on tarkoitus kehittää järjestelmään pokeripeli Texas Hold em -säännöillä. 2 Sanasto Järjestelmä Komponenteista ja niiden välisistä suhteista koostuva itsenäinen yksikkö, joka tuottaa erilaisia palveluita käyttäjälle. Pokeriv3 ohjelmiston yhteydessä järjestelmällä tarkoitetaan koko Pokeriv3-ohjelmistoa. Osajärjestelmä Järjestelmän tapaan itsenäinen kokonaisuus, mutta osajärjestelmä on osa suurempaa järjestelmää. Pokeriv3 ohjelmiston yhteydessä osajärjestelmällä tarkoitetaan esimerkiksi palvelinta tai asiakasohjelmaa. Komponentti Osajärjestelmän osa, joka tuottaa yhteenkuuluvia palveluita järjestelmälle. Pokeriv3 ohjelmiston yhteydessä komponentilla tarkoitetaan esimerkiksi palvelukokonaisuuksia, jotka liittyvät tietokannan käsittelyyn. Moduuli Itsenäinen osajärjestelmä, joka voidaan liittää sen hyvinmääriteltyjen rajapintojen avulla tiettyyn järjestelmään. Moduuli voidaan liittää järjestelmään ja poistaa siitä. Pokeriv3 ohjelmiston yhteydessä moduulilla tarkoitetaan pelimoduulien asiakaskomponenttia ja sen palvelinkomponenttia, sekä bottia ja käyttöliittymäkomponentteja.
6 Luokka Luokka on jonkin reaalimaailmaan rinnastettavien ominaisuuksien ja toimintojen kokonaisuus. Se on suunnitteludokumentin matalimman tason ohjelmistoyksikkö. Tätä tarkempaan kuvaukseen suunnitteludokumentissa ei yleisesti ottaen mennä. Pelimoduuli Järjestelmään liitettävä moduuli, joka sisältää tietyn pelin toimintalogiikan ja sen käyttöön tarvittavat komponentit. Pelimoduulin palvelinkomponentti on pelimoduulin osa, joka sijoittuu järjestelmässä palvelimen koneelle. Siellä sijaitsee varsinainen pelimoottori, joka toteuttaa pelissä toimivan logiikan. Pelimoduulin asiakaskomponentti on pelimoduulin osa, joka ladataan peliin liityttäessä asiakkaan koneelle palvelimelta. Se sisältää pelimoduulin käyttöliittymän sekä siihen liittyvien toimintojen tulkkaamisen pelimoduulin palvelinkomponentille välitettävään muotoon. Viestitysolio on kiertoilmaus CommunicationObject-oliolle, joita käytetään tiedonvälitykseen järjestelmässä. Viestittäjä on yleisnimitys komponentille, joka osallistuu järjestelmän viestinvälitykseen. Skeema on looginen kokonaisuus tietokannassa. Pokeriv3-projektissa niitä käytetään eri pelimoduulien tarvitsemien tietokantaobjektien erottelemiseksi itsenäisiksi kokonaisuuksikseen. Rooli on tietokannassa joukon oikeuksia yhteen niputtava käyttäjätaso, joka voidaan antaa käyttäjälle väliaikaisesti tai pysyvästi. Meerkat API on Poker Academyn määrittelemä rajapinta Texas Holdem -pokerin pelaamiseen. Florida-ohjelmiston Texas Holdem -toteutus perustuu samaan rajapintaan. ANSI SQL-92 on tietokantakielistandardi, jonka kanssa toteutettava Florida-ohjelmisto on yhteensopiva. Näin järjestelmän toimivuus ei ole riippuvainen tietystä tietokantajärjestelmästä, vaan mikä tahansa ANSI SQL-92 -yhteensopiva tietokantajärjestelmä käy. 2 3 Arkkitehtuurisuunnitelma 3.1 Järjestelmän kokonaiskuvaus Järjestelmä koostuu kahdesta varsinaisesta osajärjestelmästä: palvelimesta ja asiakasohjelmasta. Lisäksi palvelimeen liitetään pelimoduuli, jonka ns. pelimoottori toimii pelimoduulin palvelinkomponentissa. Käyttöliittymä ja pelaajan toiminnallisuuteen liittyvät
7 Kuva 1: Yleiskuva toiminnallisista komponenteista 3
8 tapahtumien tulkkaus toteutetaan pelimoduulin asiakaskomponentissa. Pelimoduulin asiakaskomponentti ladataan asiakasohjelmaan palvelimelta. Järjestelmä tallentaa myös joka jaon jälkeen tietoja palvelimeen liitettävään tietokantaan. Järjestelmä tullaan toteuttamaan siten, että se toimii PostgreSQL -tietokantajärjestelmän kanssa. Mikä tahansa ANSI SQL-92 -yhteensopiva tietokantajärjestemä sopii järjestelmän kanssa käytettäväksi. Järjestelmän toteutuskielenä käytetään Javaa. Käyttäjä käyttää järjestelmää pääosin graafisen käyttöliittymän kautta, mutta joitain toiminnallisuuksia tullaan toteuttamaan myös siten, että ne voidaan toteuttaa komentoriviltä syöttäen (esim. palvelimen pystytys ja eräajo). Järjestelmän päätarkoitus on tarjota alusta bottien testaamiseen ja näin ollen asiakasohjelmaan voidaan liittää botti, joka käyttää samaa rajapintaa kuin normaali käyttäjä. Asiakkaan pyynnöstä käyttäjän ja botin rajapinta asiakasohjelmassa pyritään toteuttamaan Poker Academyn Meerkat-APIa hyväksikäyttäen Yleiskäyttöinen palvelin Palvelimen tehtävä on hoitaa kaikkea eri moduulien ja asiakasohjelman välistä viestintää. Palvelin on yhteydessä asiakasohjelmiin ja hoitaa kaikki yhteydenpitoon ja viestintään liittyvän hallinnoinnin. Palvelimen toteutus ei ota kantaa siihen liitettyjen pelimoduulien toteutuksesta, vaan tarjoaa ainoastaan yhteiset rajapinnat tiedonvälitykseen. Palvelin on myös vastuussa kaikista pyydetyistä tietokantaoperaatioista. Palvelin tarjoaa olion, joka suorittaa tietokantaoperaatioita. Tietoliikenteen salaus on myös osa palvelimen keskeistä toiminnallisuutta. Palvelin tarjoaa kaksi yhteyttä asiakasohjelmaa kohden: salaamattoman ja salatun yhteyden. Salattua yhteyttä käytetään arkaluontoisen datan toimittamiseen verkon yli. Tällaisia ovat esimerkiksi pelaajan käyttäjätunnus ja salasana, sekä moduulien erikseen salattavaksi pyydetyt tiedot Palvelimen käyttöliittymä Palvelimen käyttöliittymä on yksinkertaisesti komentorivi, josta se voidaan käynnistää tietyin asetuksin. Sille toteutetaan myös graafinen käyttöliittymä, mikäli siihen jää aikaa. 3.3 Yleiskäyttöinen asiakasohjelma Asiakasohjelman tehtävänä on luoda yhteys asiakkaan ja palvelimen välille, ylläpitää yhteyttä, välittää viestitysolioita verkon yli palvelimelle sekä ohjata objekteja oikeille moduuleille asiakasohjelmassa. Asiakasohjelma myös vastaanottaa ClientObject -tyyppisiä viestitysolioita. Lisäksi asiakasohjelma antaa käyttäjälle mahdollisuuden luoda pelin tai liittyä peliin. Halutun pelin komponentit lähetetään palvelimelta asiakasohjelmaan vasta peliin liityttäessä.
9 Asiakasohjelma koostuu tehtävien mukaan jaotelluista komponenteista. Pääohjelman tarkoitus on toimia eri komponenttien toiminnot kokoavana yksikkönä. Yhteydenluonti-komponentin tehtävä on luoda normaali sekä salattu yhteys palvelimeen. Yhteyksiä käyttää ClientObjectManagerkomponentti, joka toimii yhteydestä tulevien ja sinne menevien viestitysolioiden reitittäjänä. Sen tehtävänä on olioiden reititys asiakasohjelman komponenteille Asiakasohjelman käyttöliittymät Asiakasohjelmaan kuuluu palvelimen sille toteuttamia käyttöliittymiä sekä pelimoduulikohtaisia käyttöliittymiä ja käyttöliittymäkomponentteja, jotka lisätään asiakasohjelmaan peliin liityttäessä. Yhteydenmuodostus toteuttaa yhteydenmuodostukseen liittyvät syötekentät kuten palvelimen osoitteen ja portin ja painikkeen yhteyden muodostamiseen. Tämä on ainut ikkuna, joka on toteutettu kiinteästi asiakasohjelmaan. Sisäänkirjautuminen toteuttaa sisäänkirjautumiseen liittyvät syötekentät kuten käyttäjätunnuksen ja salasanan. Ikkunassa on painike "Log in", joka toteuttaa sisäänkirjautumisen. Lisäksi ikkunassa voidaan painaa painiketta "Sign in as a new user", jolloin ohjelma yrittää lisätä käyttäjän uudeksi käyttäjäksi annetuilla tunnuksella ja salasanalla. Salasana pitää tässä tapauksessa antaa toisen kerran varmistukseksi oikeinkirjoituksesta. Aula on ikkuna, jossa on nähtävillä kaikki palvelimella sillä hetkellä pyörivät pelipöydät. Pelipöydän riviä klikkaamalla listan oikealle puolelle tulee tarkemmat tiedot pelipöydästä, sekä siihen liittyvät syötekentät. Tarkemmat tiedot pelipöydästä ja peliin liittymiseen liittyvät syötekentät tulevat JFrame-oliona pelipalvelimelta, jolloin jokaisen pelimoduulin pelitiedot ja syötekentät ovat yksilöllisiä. Pelilista-ikkunassa on napit peliin liittymiselle ja uuden pelipöydän luomiselle. Tässä näkymässä on pelaajan myös mahdollisuus liittää asiakasohjelmaan botti, joka pelaa pelejä ihmispelaajan sijasta. Asetukset -ikkunassa voidaan muuttaa pelaajakohtaisia asetuksia. Täältä voidaan ladata botti pelaamaan ihmiskäyttäjän puolesta. Pelitietojen selaus -ikkunassa voidaan tehdä kysely, jonka jälkeen se näyttää listan jaoista. Jos käyttäjä on "superuser", voi se tehdä sille tarkoitettuja lisäkyselyitä. Kyselyt mukana vaatimusmäärittelydokumentin liitteessä Pelimoduuli Pelimoduuli määrittelee pelisäännöt, pelin kulun ja toteutukseen ja pelaamiseen vaaditut komponentit, esim. korttipakan ja pelaajat. Pelimoduuli vastaa myös käyttöliittymäkom-
10 ponenttien ja toimintojen tulkkaukseen liittyvien komponenttien tarjoamisesta asiakasohjelmalle mukaanlukien mahdolliset tietokantakyselyt. Pelimoduulin erottaminen palvelimesta mahdollistaa uusien pelien lisäämisen järjestelmään, kunhan lisättävä peli toteuttaa pelimoduuleille yhteisesti määritellyt rajapinnat. Projektin puitteissa toteutetaan pelimoduuli tavallisella 52:n kortin pakalla pelattavalle Texas Hold em -pokerille. Asiakkaan toivomuksesta Texas Hold em -pokerin toteuttamisessa on käytetty Poker Academyn Meerkat API:a. Käytetty versio on Pelimoduulin palvelinkomponentti Pelimoduulin palvelinkomponentti on eräänlainen pelimoottori, joka määrittelee pelisäännöt, pelin kulun ja toteutukseen ja pelaamiseen vaaditut komponentit. Palvelimelle luodaan pelipöytiä luomalla pelimoottorista ilmentymiä. Pelimoottori on itsenäinen kokonaisuus, joka vastaa pelin etenemisestä saaden syötteitä pelaajilta Pelimoduulin asiakasohjelmakomponentti Palvelimen yhteydessä suoritettava pelimoduulin osa lähettää asiakkaalle graafisessa käyttöliittymässä näytettävät pelitapahtumia ja -tilannetta kuvaavat sekä pelin toimintojen käyttämiseen tarkoitetut käyttöliittymäkomponentit. Näin käyttäjä näkee käyttöliittymässään esim. pelipöydän, korttien kuvat, pelimerkit käytettävissään olevien toimintojen painikkeet. Lähetettävät komponentit ja niiden tarkat sisällöt riippuvat pelimoduulissa tehdyistä määrityksistä. Pelimoduulin asiakasohjelmakomponentti käsittelee pelaajan tapahtumat ja paketoi ne pelimoduulin palvelinkomponentille lähetettävään muotoon. Se osaa myös purkaa ja käsitellä pelimoottorilta sille tulleet objektit. 3.5 Tietokanta Palvelimen käyttäjätietokanta sisältää käyttäjien tunnukset ja salasanat. Lisäksi jokaisella palvelimeen liitettävällä pelimoduulilla voi olla tietokannassa oma skeemansa, joka on samassa tietokannassa kuin palvelimen oletusarvoinen public-skeema. Skeemoja käyttämällä kaikki pelimoduulit voidaan liittää samaan tietokantaan ilman tietokantaobjektien nimien päällekkäisyyksistä aiheutuvia ongelmia. Lisäksi rooleja käyttämällä voidaan rajata käyttäjän pääsy vain tiettyihin skeemoihin ja näin estää pelimoduuleja muuttamasta toistensa tietoja. Roolin voi asettaa käyttäjälle vain väliaikaisesti ja palauttaa käyttäjän oikeustaso entiselleen tietokantaoperaation päätyttyä. 4 Rajapinnat 4.1 Viestitysolioiden käsittelyyn liittyvät rajapinnat Kuvan 2 rajapinnat toteutetaan palvelin- ja asiakasohjelmassa.
11 7 Kuva 2: Viestittäjien hierarkia Interface CommunicationObjectReceiver Tämän rajapinnan toteuttaa luokka, joka ottaa vastaan CommunicationObject-olioita. receivecommunicationobject(communicationobject co) Ottaa vastaan CommunicationObject-olion ja käsittelee sen Interface Router extends CommunicationObjectReceiver Tämän rajapinnan toteuttaa luokka, joka toimii CommunicationObject-olioiden reitittäjänä. subscribe(class<communicationobject> type, CommunicationObjectReceiver subscriber) Pyytää Router-oliota lähettämään saamansa type-tyyppiset CommunicationObject-oliot subscriber-oliolle. 4.2 Moduulien rajapinnat Moduulit Moduulien rajapintahierarkia näkyy kuvassa 3. Ulkoisen moduulin tulee periä jokin abstrakteista luokista ServerGameModule, ClientGameModule tai GUIModule. ServerGameModulen perivät pelimoduulin palvelinkomponentit, ClientGameModulen perivät pelimoduulin asiakaskomponentit ja GUIModulen perivät käyttöliittymäkomponentit, jotka eivät suoraan liity mihinkään pelin ilmentymään. Varsinainen pelinäkymä (ks. kuvaliite) tuotetaan ClientGameModulessa.
12 8 4.3 Palvelimen rajapinnat Kuva 3: Moduulin rajapinnat Palvelin toimii yhteyssolmuna kolmelle eri komponentille: asiakasohjelmalle, pelimoduulin palvelimen yhteydessä suoritettavalle osalle ja tietokannalle. Tämän lisäksi palvelin tarjoaa rajapinnan tietokannan käyttöön. Tietokantaa käyttävät pelimoduulin palvelimen yhteydessä suoritettava osa ja palvelimen sisäinen käyttäjähallinta. 4.4 Asiakasohjelman rajapinnat Asiakasohjelma toimii yhteyssolmuna kolmelle eri komponentille: palvelimelle, pelimoduulin asiakasohjelman yhteydessä suoritettavalle osalle ja käyttöliittymälle. Asiakasohjelma vastaa tietoliikenteestä palvelimen ja pelimoduulin sekä käyttöliittymän välillä. Tässä tapauksessa käyttöliittymällä tarkoitetaan niitä käyttöliittymiä, jotka liittyvät vain asiakasohjelman käyttöön. Pelimoduulin asiakasohjelman yhteydessä suoritettavalla osalla on olemassa näistä käyttöliittymistä erilliset käyttöliittymät. 5 Viestitysoliot Tieto asiakasohjelman ja palvelimen välillä liikkuu kapseloituna CommunicationObjectolioihin. Asiakasohjelma käyttää viestitysolioita palvelimen tarjoamien palvelujen käyt-
13 9 Kuva 4: Asiakasohjelman luokkien rajapintojen toteutus Kuva 5: Viestitysolioiden hierarkia
14 tämiseen, ja palvelin käyttää olioita välittääkseen tiedot asiakasohjelmalle. Router-rajapinnan toteuttava komponentti huolehtii pakettien reitityksestä osajärjestelmän sisällä, välittäen ne tyypin mukaan sille komponentille, joka on kunkin tyyppisen CommunicationObject-olion tilannut. Kuvassa 5 näkyy viestysolioiden hierarkia. CommunicationObject on yläluokka kaikille viestitysolioille. Seuraavalla tasolla erotellaan palvelimelle ja asiakasohjelmalle osoitetut viestit. Ja näiden aliluokat identifioivat sen komponentin palvelimen tai asiakasohjelman sisällä, jolle viesti kuuluu. 1. tason viestitysolioita perimällä voidaan järjestelmään tuoda uusia komponentteja, jotka keskustelevat palvelimen kanssa. Lisäksi kaikki viestitysoliot toteuttavat Serializable-rajapinnan, jotta niitä voidaan lähettää tietoliikenneyhteyden käyttämän ObjectStream-in välityksellä Abstraktit luokat Kuva 6: Viestitysolioiden abstraktit luokat Viestitysolioiden abstraktit luokat määrittävät kaikille viestitysolioille yhteisten toimintojen toiminnallisuuden. CommunicationObject -luokka on kaikkien viestitysolioiden yliluokka. Se määrittelee viestitysluokkien toiminnallisuuden sen suhteen, mitä niillä voidaan kuljettaa, miten viestitysolio yksilöidään palvelimella, ja kenelle mahdollinen vastausviesti pitää lähettää. CommunicationObject-luokasta ei voi tehdä ilmentymiä. message -kenttä on viestitysolion viestikenttä. Viestitysolioiden välityksellä voi välittää siis minkälaisia olioita tahansa. replyclass -kenttä antaa CommunicationObject-luokan, josta tehtyyn ilmentymään vastaus alkuperäiseen viestiin tulee tehdä. encryption -kenttä kertoo, pitääkö viesti lähettää salatun yhteyden kautta. userid -kenttä yksilöi viestitysolion palvelimen puolella johonkin tiettyyn käyttäjään.
15 useridstatus -kenttä on totuusmuuttuja, joka kertoo, onko userid asetettu vai ei. Tämä on oletusarvoisesti epätosi. communicationobject -konstruktorin parametrit asettavat arvot vakiokentille message, replyclass ja encryption. isuseridset -metodi tarkistaa, onko userid jo asetettu. setuserid -metodi sijoittaa userid-kentälle arvon, jos sillä ei vielä arvoa ole, ja muuttaa useridstatus-kentän arvon todeksi. Paluuarvo on tosi, mikäli sijoitus onnistui. Tätä metodia on tarkoitus käyttää vain kahdessa tilanteessa: silloin, kun ServerConnection saa viestitysolion käyttäjältä, ja silloin kun jokin palvelimen komponentti lähettää viestin tietylle asiakkaalle. getuserid -metodi antaa userid-kentän arvon. ServerObject -luokka perii CommunicationObject-luokan, ja ylikirjoittaa replyclasskentän siten, että vastauksen tyyppi voi olla vain ClientObject. ClientObject -luokka perii CommunicationObject-luokan, ja ylikirjoittaa replyclass-kentän siten, että vastauksen tyyppi voi olla vain ServerObject ClientObject Kuva 7: ClientObject-luokat ClientObject-luokan aliluokat ovat tyypin perusteella yksilöity jollekin asiakasohjelman komponentille. Kuvassa 7 näkyy Florida-asiakasohjelman käyttämien viestietysolioiden hierarkia. GMClientObject -luokan ilmentymät on asiakasohjelman pelimoduulimanagerin käyttämiä viestitysolioita. Yliluokan message-kentän tyyppi on korvattu ModuleActionluokalla, joka kapseloi moduulin käyttämän tiedon yksilöimällä sen. MainClientObject on ClientMainin käyttämä viestitysluokka. ClientGUIObject on ClientGUIObjectManager-luokan käyttämä viestitysluokka. Tämäkin kapseloi viestin ModuleAction-olioon.
16 12 Kuva 8: ServerObject-luokat 5.3 ServerObject ServerObject-luokan aliluokat ovat ClientObjectin tapaan yksilöity tyypin perusteella jollekin asiakasohjelman komponentille. Kuvassa 8 näkyy Florida-asiakasohjelman käyttämien viestietysolioiden hierarkia. GMServerObject -luokan ilmentymät on palvelimen pelimoduulimanagerin käyttämiä viestitysolioita. Yliluokan message-kentän tyyppi on korvattu ModuleAction-luokalla, joka kapseloi moduulin käyttämän tiedon yksilöimällä sen. MainServerObject on ServerMainin käyttämä viestitysluokka. 5.4 ServerDatabaseOperator Tietokannan ja pelimoduulin palvelinkomponentin tiedonvälitykseen tarkoitettu olio. databasequery: PreparedStatement Tehtävä tietokantaoperaatio SQL92-standardin mukaisesti. Operaation oikeellisuus on täysin palvelua pyytävän komponentin harteilla. queryresult: ResultSet Tietokantaoperaation tulos. ResultSet-olio palautetaan sellaisenaan palvelua pyytäneelle komponentille. makequery(preparedstatement dbquery) Metodi suorittaa tietokantaoperaation parametrina välitetyllä kyselyllä. Metodi palauttaa tietokantaoperaation tuloksen ResultSet muodossa. makequery(preparedstatement databasequery, Module module) Metodi suorittaa tietokantaoperaation parametrina välitetyllä kyselyllä. Parametrinna an-
17 nettu moduli rajaa tietokannan käytön kyseiselle skeemalle (Schema). Metodi palauttaa tietokantaoperaation tuloksen ResultSet muodossa. 13 Kuva 9: ServerDatabaseOperator-rajapinnat 6 Luokat 6.1 Palvelin ServerConnection Kuvaus: Luokka toteuttaa CommunicationObjectReceiver rajapinnan. Luokka ServerConnection mahdollistaa palvelimen ja asiakasohjelman välisen kommunikoinnin. Palvelin kuuntelee sisäänpäin tulevia yhteydenottoja määritellystä portista ja luo uusia yhteyksiä asiaskasohjelmiin Socket-olioiden avulla. Luokka toteuttaa myös tietoliikenteen salauksen. EncryptObject() ja decryptobject() hoitavat olioiden salaamisen ja salauksen purkamisen ennen kuin tieto reititetään ObjectManagerille. Luokka perii Thread-luokan, jotta sen ilmentymiä voidaa ajaa säikeinä. Muuttujat: ServerSocket server server kuuntelee sisäänpäintulevia yhteydenottoja. Socket client client oliota käytetään palvelimen ja asiaskasohjelman väliseen TCP/IP datayhteyteen. ObjectInputStream out Ulospäin lähtevä data. ObjectOutputStream in Sisäänpäin tuleva data.
18 Kuva 10: Palvelimen luokkakaavio 14
19 15 Key key Salauksen purkamiseen tarvittava avain. Metodit: listensocket() Metodi kuuntelee määriteltyä porttia. closeconnection() Metodi sulkee yhteyden määrättyyn asiakasohjelmaan. receivecommunicationobject(communicationobject co) Otetaan vastaan parametrina saatu CommunicationObject-olio. encryptobject(object object) Metodi salaa olion jonka jälkeen se on valmis lähetettäväksi verkon yli. decryptobject(object object) Metodi purkaa olion salauksen jonka jälkeen se on valmis ohjelmiston käsiteltäväksi. ServerObjectManager Kuvaus: Luokka toteuttaa Router rajapinnan. Luokka vastaa olioiden reitityksestä. Muuttujat: private Map <Class<ServerObject>, ServerObjectReceiver> routingmap Tietorakenteessa on määritelty vastaanottaja kullekin edelleenlähetettävälle tietotyypille. Metodit: subscribe(class<communicationobject> type, CommunicationObjectReceiver subscriber ) Pyytää ServerObjectManager-oliota lähettämään type-tyyppiset CommunicationObjectoliot subscriber-oliolle. GameObjectManager Kuvaus: Luokka toteuttaa CommunicationObjectReceiver ja ServerGMManager -rajapinnat. Välittää peliobjektin oikealle pelimoduulille. Muuttujat: Arraylist<String> gamemodules
20 16 Kaikki palvelimeen liitetyt pelimoduulit. Arraylist<String> gametypes Kaikki palvelimen pelityypit. Jokaisella pelimoduulilla on joku tyyppi. Esimerkiksi Texas Hold emin tyyppi on Poker. Useampi pelimoduuli voi olla samaa tyyppiä. Metodit: creategame(string module, HoldEmSettings settings) Luo uuden ilmentymän parametrina annetusta pelistä (module). Asetusmuuttuja (settings) määrittelee peliin liittyvät säännöt. Texas Hold emin tapauksessa luodaan uusi pelipöytä annetuilla parametreilla. receivecommunicationobject(communicationobject co) Metodi CommunicationObject-olion siirtämiselle. getgamemodules() Palauttaa ArrayList-muodossa kutsujalle kaikki palvelimeen liitetyt pelimoduulit. Tiedot saadaaan gamemodules ArrayList:istä. setgamemodules(string module) Metodi saa parametrina Module-tyyppisen olion jonka se lisää gamemodules ArrayListiin. Metodia ajetaan palvelimen käynnistyksen yhteydessä sekä kun uusi pelimoduuli on liitetty järjestelmään. getgametypes() Palauttaa ArrayList-muodossa kutsujalle kaikki palvelin eri pelityypit. Tiedot saadaan gametypes ArrayList:istä. setgametypes(string gametype) Kun palvelin havaitsee uuden pelimoduulin jota ei vielä löydy gametypes ArrayList:istä, lisätään ko. metodilla tyyppi pelien tyyppilistaukseen. sendgamemoduleobject(serialializable message, int user, Module sender, encrypt boolean) Toteuttaa ServerGMManager rajapinnan. Metodi lähettää viestitysolion. sendguiobject(serialializable message, int user, Module sender, boolean encrypt) Toteuttaa ServerGMManager rajapinnan. Metodi lähettää GUI-olion. checkfornewmodules() Metodi tarkistaa onko palvelimeen liitetty uusia pelimoduleita. Tarkistus tehdään käynnistyksen yhteydessä sekä superuserin kirjautuessa järjestelmään. Mikäli uusi moduuli löydetään lisätään se järjestelmään kutsumalla setgamemodules()-metodia.
21 17 ServerMain Kuvaus: Luokka palvelimen käynnistämiseen ja ylläpitämiseen. Luokka toteuttaa CommunicationObjectReceiver -rajapinnan. Muuttujat: File serverlog Palvelimen lokitiedosto. int serverport Palvelimen käyttämä portti. ArrayList<ServerUser> connectedusers Kaikki käyttäjät jotka ovat yhteysdessä palvelimeen. Metodit: receivecommunicationobject(communicationobject co) Vastaanottaa CommunicationObject -olion. Jos CommunicationObject sisältää jonkin toiminnon, ServerMain toimii sen mukaan. createdatabaseconnection(string module) Metodi luo tietokantayhteyden kutsujalle. Kutsuja on joko GameObjectManager tai ServerUser- Authentication. Metodi palauttaa ServerDatabaseOperator-tyyppisen olion kutsujalle jonka avulla metodia kutsunut moduuli voi suorittaa omia tietokantaoperaatioita. setconnectedusers(serveruser user) Metodi saa parametrina ServerUser-olion jonka se lisää connectedusers ArrayList:iin. getconnectedusers() Metodi metodi palauttaa connectedusers ArrayListin kutsujalle. createserveruser(int userid) Metodi luo ServerUser-tyyppisen olion annetulla userid:llä ja palauttaa ko. ServerUserolion. ServerUserAuthentication Kuvaus: Jokaisella palvelimeen yhteydessä olevalla käyttäjällä tulee olla voimassa oleva käyttäjätunnus. Luokalla tarkistetaan täsmäävätkö käyttäjätunnus ja salasana, sekä rekisteröidään uusia käyttäjätunnuksia.
22 18 Muuttujat: String username Syötteenä saatu käyttäjätunnus. String userpasswd Syötteenä saatu salasana. Metodit: userlogin() Metodi sisäänkirjautumiseen. Tarkistaa täsmäävätkö käyttäjän syöttämät käyttäjänimi ja salasana. userlogout() Metodi uloskirjautumiseen. userregister() Uuden tunnuksen rekisteröintiin tarkoitettu metodi. Syötteenä saaduilla tiedoilla yritetään luoda uusi tunnus. Mikäli käyttäjänimeä ei vielä ole käytössä onnistuu rekisteröinti. ServerDataBaseOperator Kuvaus: Toimii tietokantarajapintana PostgreSQL-tietokannan ja loppujärjestelmän välillä. Ainoastaan tällä luokalla on oikeudet tehdä tietokantakyselyjä. Muuttujat: String dbuser Tietokannan käyttäjänimi. String dbpasswd Tietokannan salasana. String dbaddress Tietokannan osoite. PreparedStatement dbquery Tehtävä kysely. ResultSet dbqueryresult Kyselyn tulokset. Metodit: makequery(preparedstatement dbquery) Metodi suorittaa tietokantakyselyn parametrina annettulla PreparedStatement-lauseella.
23 19 Metodi palauttaa arvonaan kyselyn tuloksen ResultSet-muodossa. makequery(preparedstatement dbquery, Module module) Metodi suorittaa tietokantakyselyn parametrina annettulla PreparedStatement-lauseella. Muuttuja module rajaa kyselyn parametrina annetun moduulin omaan tietokanta skeemaan. Metodi palauttaa arvonaan kyselyn tuloksen ResultSet-muodossa. ServerUser Kuvaus: Luokasta luodaan ServerUser-ilmentymiä. Jokaisesta palvelimelle onnistuneesti kirjautuneesta käyttäjästä luodaan ServerUser-olio. Muuttujat: String username Käyttäjän käyttäjänimi. int userid Käyttäjän yksilöivä ID. Metodit: setusername(string username) Metodi asettaa username muuttujan parametrina saaduksi String-olioksi. setuserid(int userid) Metodi asettaa userid muuttujan parametrina saaduksi int:ksi. getusername() Metodi palauttaa ServerUser-olion tämänhetkisen username String-olion. getuserid() Metodi palauttaa ServerUser-olion tämänhetkisen userid int:in. 6.2 Asiakasohjelma ClientMain ClientMain extends Observable Kuvaus: Tämä luokka on asiakasohjelman pääluokka, jossa toteutetaan Main-metodi. Luokka on myös vastuussa muiden pääkomponenttien kuten ClientConnectionin, ClientObjectManagerin, ClientGameObjectManagerin ja ClientGUIObjectManagerin alustamisesta ja niiden välisten yhteyksien luomisesta. Muuttujat:
24 Kuva 11: Asiakasohjelman luokkakaavio 20
25 21 ClientConnection co ClientConnection-olio, joka on yhteys asiakasohjelmalta palvelimeen. Metodit: public void receivecommunicationobject(communicationobject co) Ottaa vastaan CommunicationObject-olion ja käsittelee sen sisältämän viestin. private void createconnection(inetaddress address, int port) throws Exception Muodostaa ClientConnection-olion yhteyden annetuilla parametreilla. ClientMainController Kuvaus: Tämä luokka toteuttaa tapahtumienkäsittelyn ClientMainGUI-oliossa tapahtuville tapahtumille. Muuttujat: private static ClientMain model Viite ClientMain-olioon, jotta tapahtumienkuuntelija voi käyttää sen metodeja. private static ClientGUI view Viite ClientGUI-olioon, jonka tapahtumiin reagoidaan. Metodit: ClientMainGUI implements observer Kuvaus: Tämä luokka toteuttaa graafiset komponentit Connect to server-ikkunalle. Muuttujat: Metodit:
26 22 public void update() Päivittää graafisen näkymän. ClientConnection impelments CommunicationObjectReceiver Kuvaus: Tämä luokka sisältää yhteyden palvelimeen. Sen kautta voidaan lähettää ja vastaanottaa CommunicationObject-olioita. Muuttujat: private Socket socket Pistoke palvelinkoneeseen private SecretSocket secretsocket Salattu pistoke palvelinkoneeseen. private Key key Avain salattuun pistokkeeseen. private Router clientobjectmanager Viite Router-rajapinnan toteuttavaan olioon, jonne tulleet CommunicationObject-oliot siirretään reititystä varten. private ObjectOutputStream oos Objektivirta, johon kirjoitetaan Serializable-rajapinnan toteuttavia olioita. Tämä virta alustetaan antamalla parametrinä ByteArrayOutputStream ja liitetään socket-olioon. private ObjectInputStream ois Objektivirta, josta otetaan vastaan Serializable-rajapinnan toteuttavia olioita. Tämä virta alustetaan antamalla parametrinä ByteArrayInputStream ja liitetään socket-olioon. private ObjectOutputStream oosencrypted Objektivirta, johon kirjoitetaan Serializable-rajapinnan toteuttavia olioita. Tämä virta alustetaan antamalla parametrinä ByteArrayOutputStream ja liitetään securesocket-olioon. private ObjectInputStream oisencrypted Objektivirta, josta otetaan vastaan Serializable-rajapinnan toteuttavia olioita. Tämä virta alustetaan antamalla parametrinä ByteArrayInputStream ja liitetään securesocket-olioon.
27 Metodit: void public receivecommunicationobject(communicationobject co) Ottaa vastaan CommunicationObject-olioita ja reitittää sen joko salaamattomaan tai salattuun pistokkeeseen tai clientobjectmanagerille riippuen CommunicationObject-olion tyypistä. void private write(communicationobject co) Kirjoittaa annetun CommunicationObject-olion oos-olioon. void private writeencrypted(communicationobject co) Kirjoittaa annetun CommunicationObject-olion oosencrypted-olioon. CommunicationObject private read() Lukee oos-virtaa. CommunicationObject private readencrypted() Lukee oosencrypted-virtaa. 23 ClientObjectManager implements Router Kuvaus: Asiakasohjelman CommunicationObject reitittäjä. Reitittää CommunicationObject-oliot niiden tyyppien mukaan eteenpäin. Muuttujat: private Map <Class<ClientObject>, CommunicationObjectReceiver Tietorakenteessa on määritelty vastaanottaja kullekin edelleenlähetettävälle tietotyypille. private CommunicationObjectReceiver connectiontoserver Palvelinyhteys Metodit: public void subscribe(class<clientobject> type, CommunicationObjectRec subscriber) Pyydetään ClientObjectManager-oliota lähettämään saamansa type-tyyppiset ClientObjectoliot subscriber-oliolle. public void receivecommunicationobject(communicationobject co) Otetaan vastaan CommunicationObject-olio ja reititetään sen tyypin mukaan (Map-tietorakenteessa) oikealle komponentille. ClientGameObjectManager implements ClientGMManager, CommunicationObjectReceiver Kuvaus: ClientGameObjectManager ottaa vastaan ClientGameObject-olioita ja reitittää ne oikeille
28 vastaanottajamoduuleille. Luokka on myös vastuussa CommunicationObject-olioiden luomisesta. Muuttujat: Map<int, Module> Viitetaulukko, joka yhdistää moduulin tunnuksen viitteeseen kyseiseen olioon. Router clientobjectmanager CommunicationObject-olioiden reititin, jonne moduuleilta lähtevät oliot lähetetään. Metodit: public void receivemessage(object message, Module sender) Ottaa vastaan olion ja paketoi sen CommunicationObject-olioksi, jonka jälkeen laittaa sen eteenpäin. public void receivecommunicationobject(communicationobject co) Ottaa vastaan CommunicationObject-olion, jonka jälkeen selvittää mille moduulille se kuuluu ja laittaa sen eteenpäin. 24 ClientGUIObjectManager implements GUIModuleManager, CommunicationObjectReceiver Kuvaus: ClientGUIObjectManager ottaa vastaan ClientGUIObject-olioita ja reitittää ne oikeille vastaanottajamoduuleille. Luokka on myös vastuussa CommunicationObject-olioiden luomisesta. Muuttujat: Map<int, Module> Viitetaulukko, joka yhdistää moduulin tunnuksen viitteeseen kyseiseen olioon. Router clientobjectmanager CommunicationObject-olioiden reititin, jonne moduuleilta lähtevät oliot lähetetään. Metodit: public void receivemessage(object message, Module sender) Ottaa vastaan olion ja paketoi sen CommunicationObject-olioksi, jonka jälkeen laittaa sen eteenpäin. public void receivecommunicationobject(communicationobject co) Ottaa vastaan CommunicationObject-olion, jonka jälkeen selvittää mille moduulille se kuuluu ja laittaa sen eteenpäin
29 Asiakasohjelman graafiset käyttöliittymät palvelimelta Nämä kuvassa 12 näkyvät käyttöliittymät ladataan palvelimelta niitä käytettäessä. 6.4 Pelimoduuli Game Kuvaus: Rajapintaluokka Game määrittelee kaikkia järjestelmään liitettäviä pelimoduuleita koskevat muuttujat ja metodit. Game on GameServerModulen aliluokka. Muuttujat: private List<User> players Lista pelipöydässä olevista pelaajista. private String name Pelin nimi, esim. Texas Hold em. private String type Pelityyppi, esim. pokeri. private String tablename Pelipöydän nimi private User createdby Pelipöydän luoja private databaseoperator dboperator Tietokantaoperaatioiden tekemiseen käytettävä olio Metodit: List<User> getplayers() Palautetaan pelaajalista. String getname() Palautetaan pelin nimi. String gettype() Palautetaan pelityyppi. GameGUI getgui() Palautetaan pelin graafisen käyttöliittymän toteuttava GameGUI-olio.
30 Kuva 12: Asiakasohjelman käyttöliittymät(palvelimelta) 26
31 27 GameEventHandler getgameeventhandler() Palautetaan graafisen käyttöliittymän tapahtumanhallinnan suorittava GameEventHandlerolio. List<Method> getmethods() Palautetaan lista pelimoduulin toteuttamista metodeista. String getsqlcreatetable() Palautetaan SQL-kielen CREATE TABLE-lause. Luotuun tauluun tallennetaan pelitietoja. String getsqlinsert() Palautetaan SQL-kielen INSERT-lause, jolla tallennetaan pelitietoja. String gettablename() Palautetaan pelipöydän nimi. settablename(string tn) Asetetetaan pelipöydän nimi parametrina saaduksi. String getcreatedby() Palautetaan pelipöydän luoja. setcreatedby(int id, String name Asetetaan pelipöydän luoja saatujen parametrien perusteella muodostetuksi User-olioksi. GameClient getclient() Palautetaan GameClient-olio, jonka avulla määritellään pelin graafinen käyttöliittymä, sen tapahtumakuuntelu ja tapahtumien välittäminen palvelinpuolen pelimoottorilta ja - moottorille. private parse(gameservermoduleobject gsmo) Käsitellään vastaanotettu GameServerModuleObject, jonka sisältönä on asiakkaalta tullut pelitapahtumatieto tai chatviesti. Chatviesti välitetään muille pelipöytään kiinnittyneille asiakkaille. Pelitapahtumatiedon avulla päivitetään pelin tilatieto, joka sekin sitten välitetään pelipöytään kiinnittyneille asiakkaille. GameClient Kuvaus: Luokka GameClient perii GUIModulen. GameClient apuluokkineen määrittelee pelin graafisen käyttöliittymän, sen tapahtumakuuntelun ja tapahtumien välittämisen palvelinpuolen pelimoottorilta ja -moottorille.
32 28 Muuttujat: private GameClientController controller Pelin asiakasohjelman tapahtumakäsittelijä private GameClientModel model Pelin asiakasohjelman tietosisältö GameClientController Kuvaus: Luokka GameClientController on pelin asiakasohjelman tapahtumakäsittelijä. Sen rooli ja toiminta perustuvat MVC-suunnittelumalliin. Muuttujat: private GameClientModel model Pelin asiakasohjelman tietosisältö private GameClientGUI view Pelin asiakasohjelman käyttöliittymä protected ArrayList<Class> Lista pelin asiakasohjelman tarvitsemista luokista. Nämä luokat saattavat olla tarpeen esim. botin ajamisessa GameClientModel Kuvaus: Luokka GameClientModel perii java.util.observable-luokan. GameClientModel määrittelee pelin asiakasohjelman tietosisällön. Sen rooli ja toiminta perustuvat MVC-suunnittelumalliin. GameClientGUI Kuvaus: Luokka GameClientGUI toteuttaa java.util.observer-rajapintaluokan. GameClientGUI määrittelee pelin asiakasohjelman käyttöliittymän. Käyttöliittymää päivitetään tietosisällön muuttuessa GameClientModel-oliossa. Metodit: void update(observable o, Object obj Observer-rajapinnan määrittelemä metodi, jota kutsutaa, kun tarkkailtavassa kohteessa on ollut muutoksia. Parametreina saadaan tarkkailtava kohde ja argumentti.
33 29 TransmittableAction Kuva 13: Pelimoduuli Kuvaus: Luokka TransmittableAction määrittelee oliot, joiden välityksellä pelimoduulin asiakaspuoli ja pelimoottori kommunikoivat. TexasHoldEm Kuvaus: Luokka TexasHoldEm on peli, joka toteuttaa rajapintaluokan Game. Muuttujat: Deck deck Korttipakka, joka on yksi Deck-olio. Metodit: TexasHoldEm(HoldemSettings init) Luodaan ilmentymä parametrina saaduin asetuksin. Yksi TexasHoldEm-ilmentymä vastaa yhtä pelipöytää. String dbinserttostring() Palautetaan String-olio pelitiedon tietokantaan viemistä varten. String handlogtostring() Palautetaan String-olio käsilokitiedostoon viemistä varten. Arraylist<Players> getplayers() Palautetaan lista pelipöydässä olevista pelaajista ArrayList-oliona, jossa alkioina on Playerolioita.
34 Kuva 14: Texas Hold em -luokat 30
35 31 private parse(chatmessage cm) Käsitellään vastaanotettu chatviesti. private parse(transmittableaction ta) Käsitellään vastaanotettu pelitapahtumatieto. GameSettings Kuvaus: Luokka GameSettings määrittelee pelipöydän luomisessa käytettävän asetusolion. Muuttujat: private String tablename Pelipöydän nimi private String createdby Pelipöydän luoja private int userid Pelipöydän luojan tunnus private String gamename Pelin nimi, esim. Texas Hold em Metodit: String gettablename() Palautetaan pelipöydän nimi String getcreatedby() Palautetaan pelipöydän luojan nimi String getuserid() Palautetaan pelipöydän luojan tunnus String getgamename() Palautetaan pelipöydässä pelattavan pelin nimi HoldEmSettings Kuvaus: Luokka HoldemSettings määrittelee pelipöydän asetusolion, jonka avulla luodaan pelipöytä,
36 32 jossa pelataan Texas Hold em -pokeria. HoldemSettings perii GameSettings-luokan. Muuttujat: private int limittype Käytettävä panosrajoitustyyppi private int timetoact Vuoron aikaraja private double bigblind Ison sokkopanoksen koko private double ante Aloituspanoksen koko private double chipsmin Pöytään tuotava vähimmäispelimerkkimäärä private double chipsmax Pöytään tuotava enimmäispelimerkkimäärä private int playersmin Vähimmäispelaajamäärä, joka tarvitaan pelipöytään ennen kuin peli käynnistyy Metodit: HoldemSettings(String name, int type, int time, double blind, double ante, double cmin, double cmax, int pmin) Luodaan HoldemSettings-olio saatujen parametrien avulla. String gettablename() Palautetaan pelipöydän nimi. int getlimittype() Palautetaan käytettävä panostusrajoitustyyppi. int gettimetoact() Palautetaan vuoron aikaraja. double getbigblind() Palautetaan ison sokkopanoksen koko. double getante()
37 33 Palautetaan aloituspanoksen koko. double getchipsmin() Palautetaan pöytään tuotava vähimmäispelimerkkimäärä. double getchipsmax() Palautetaan pöytään tuotava enimmäispelimerkkimäärä. Deck Kuvaus: Luokka Deck määrittelee korttipeleissä käytettävän korttipakan. Luokka on yhteensopiva Meerkat API:ssa määritellyn Deck-luokan kanssa. Metodit: Deck() Luodaan 52 kortin sekoittamaton korttipakka. Deck(long seed) Luodaan 52 kortin saadulla siemenluvulla sekoitettu korttipakka. Deck(byte numberofjokers) Luodaan korttipakka, jossa on 52 kortin lisäksi parametrina annettu määrä jokereita. Deck(short[] cardarray) Luodaan korttipakka parametrina saadun taulukon korteista. shuffle() Sekoitetaan pakka. shuffle(long seed) Sekoitetaan pakka parametrina saadulla siemenluvulla. Card deal() Jaetaan pakasta päällimmäinen kortti. Card dealcard() Jaetaan pakasta satunnainen kortti. int cardsleft() Palautetaan pakassa jäljellä olevien korttien määrä. copy(deck d) Kopioidaan parametrina saatu pakka kutsuvaan pakkaan.
38 34 extractcard(card c) Poistetaan parametrina saatu kortti pakasta. extractcard(int c_index) Poistetaan parametrina saadussa kohtaa sekoittamattonta pakkaa oleva kortti pakasta. extracthand(hand h) Poistetaan parametrina saadun käden kortit pakasta. Card extractrandomcard() Poistetaan ja palautetaan satunnainen kortti pakasta. int findcard(card c) Etsitään pakasta parametrina saatu kortti ja palautetaan sen sijainti pakassa. int findcard(int c_index) Etsitään parametrina saadussa kohdassa sekoittamattomassa pakkassa sijaitseva kortti pakasta ja palautetaan sen sijainti pakassa. int finddiscard(card c) Etsitään parametrina saatu kortti, palautetaan sen sijainti pakassa ja poistetaan se. int finddiscard(int c_index) Etsitään parametrissa saadussa kohdassa sekoittamattomassa pakassa oleva kortti, palautetaan sen sijainti ja poistetaan se. Card getcard(int i) Palautetaan parametrina saadussa kohdassa pakkaa sijaitseva kortti. Card gettopcard() Palautetaan pakan päällimmäinen kortti. Korttia ei poisteta pakasta. boolean indeck(card c) Palautetaan tosi, jos parametrina saatu kortti on pakassa ja epätosi, jos kortti ei ole pakassa. Card pickrandomcard() Palautetaan pakasta satunnainen kortti poistamatta sitä pakastaö. void replacecard(card c) Pannaan parametrina saatu kortti takaisin pakkaan. void replacecard(int c_index) Pannaan parametrina saadussa kohdassa sekoittamattomassa pakassa oleva kortti takaisin
39 35 pakkaan. void reset() Pannaan kaikki kortit takaisin pakkaan. Pakkaa ei järjestetä. void setseed(long seed) Asetetaan pakan sekoittamiseen käytettävä siemenluku parametrina saaduksi, jos seed <> nolla. Jos seed = nolla, siemenluku pidetään ennallaan. String tostring() Palautetaan pakan merkkijonoesitys. Hand Kuvaus: Luokka Hand määrittelee korkeintaan seitsemästä kortista (Card) muodostuvan käden. Hand toteuttaa java.io.serializable-rajapinnan. Muuttujat: static int MAX_CARDS Korttien maksimimäärä. Metodit: Hand() Luodaan tyhjä käsi. Hand(Hand h) Luodaan parametrina saadun käden kopio. Hand(String cs) Luodaan käsi parametrina saadun merkkijonoesityksen perusteella. boolean addcard(card c) Lisätään parametrina saatu kortti käteen, jos kädessä on tilaa. Jos parametri on null, lisäysyritys jätetään huomiotta. Palautetaan tosi, jos kortti lisättiin ja epätosi, jos korttia ei lisätty. boolean addcard(int i) Lisätään parametrina saadussa kohdassa sekoittamattomassa pakassa oleva kortti käteen, jos kädessä on tilaa. Palautetaan tosi, jos lisäys onnistui ja epätosi, jos lisäys ei onnistunut. void addhand(hand h) Lisätään parametrina saadun käden kortit käteen.
40 36 void clear() Poistetaan kortit kädestä. void clearbadcards() Poistetaan kelvottomat (sic) kortit kädestä. boolean contains(card c) Palautetaan tosi, jos kädessä on parametrina saatu kortti. Muuten palautetaan epätosi. boolean equals(hand h) Palautetaan tosi, jos parametrina saatu käsi sisältää samat kortit kuin kutsuja. Muuten palautetaan epätosi. String flashingstring() Palautetaan käden merkkijonoesitys käden näyttämistä varten. (Kortit näytetään vastustajan lukemiseksi. Kädestä ei luovuta.) Card getcard(int pos) Palautetaan kortti, joka on parametrina saadussa kohdassa kättä. Kortit on numeroitu 1 7. int[] getcardarray() Palautetaan taulukko, jossa ensimmäisenä alkiona on kädessä olevien korttien määrä. Sitä seuraavissa alkioissa on korttien sijainnit sekoittamattomassa pakassa. int getcardindex(int pos) Palautetaan kädessä parametrina saadussa olevan kortin sijainti sekoittamattomassa pakassa. String getcardstring(card c1, Card c2,) Palautetaan parametreina saatujen korttien merkkijonoesitys. Card getfirstcard() Palautetaan käden ensimmäinen kortti eli ensimmäinen piilokortti. Card getlastcard() Palautetaan käden viimeinen kortti. int getlastcardindex() Palautetaan käden viimeisen kortin sijainti sekoittamattomassa pakassa. Card getsecondcard() Palautetaan käden toinen kortti eli toinen piilokortti. void makeempty() Poistetaan kaikki kortit kädestä.
41 37 void removecard() Poistetaan käden viimeinen kortti. void removecard(int i) Poistetaan kädestä parametrina saadussa kohdassa oleva kortti. void setcard(int pos, Card c) Lisätään parametrina saatuna kortti parametrinan saatuun paikkaan kädessä. void setcard(int pos, int cind) Lisätään sekoittamattomassa pakassa parametrina pos saadussa kohdassa oleva kortti parametrina c saatuun paikkaan kädessä. int size() Palautetaan kädessä olevien korttien määrä. void sort() Kuplajärjestetetään käsi suurimmasta pienimpään sekoittamattomassa pakassa sijainnin perusteella. String tostring() Palautetaan käden merkkijonoesitys. GameInfo Kuvaus: Luokka GameInfo on rajapintaluokka, joka määrittelee kaiken käynnissä olevaan jakoon liittyvän julkisen tiedon. Metodit: boolean canraise(int seat) Palautetaan tosi, jos parametrina saadulla paikalla istuva pelaaja voi korottaa.palautetaan pelimerkkimäärä, jonka parametrina saadulla paikalla istuvalta pelaajalta vaaditaan katsomiseen. double getamounttocall(int seat Palautetaan pelimerkkimäärä, jonka parametrina saadulla paikalla istuvalta pelaajalta vaaditaan katsomiseen. double getante() Palautetaan aloituspanoksen koko. double getbankroll(int seat) Palautetaan pelimerkkimäärä, joka parametrina saadulla paikalla istuvalla pelaajalla on
42 38 käytettävissään. double getbankrollatrisk(int seat) Palautetaan pelimerkkimäärä, jonka verran parametrina saadulla paikalla istuvalla pelaajalla on korkeintaan mahdollisuus menettää jaossa. Määrä on suurin mukana oleva merkkimäärä, jos pelaajalla on enemmän pelimerkkejä tai pelaajan koko merkkimäärä, suurin mukana oleva merkkimäärä on pelaajan merkkimäärää suurempi. double getbetstocall(int seat) Palautetaan katsomiseen vaadittava pelimerkkimäärä panoksina (jos panoksen koko on rajoitettu). int getbigblindseat() Palautetaan ison sokkopanoksen maksaneen pelaajan paikka. double getbigblindsize() Palautetaan ison sokkopanoksen koko. Hand getboard() Palautetaan pöytäkortit Hand-oliona. int getbuttonseat() Palautetaan jakajan paikka. double getcurrentbetsize() Palautetaan panoksen koko (jos rajoitettu). int getcurrentplayerseat() Palautetaan vuorossa olevan pelaajan paikka. double geteligiblepot(int seat) Palautetaan pelimerkkimäärä, jonka parametrina annetulla paikassa oleve pelaaja voi jaossa voittaa. Pelaaja voi voittaa merkkejä vain niistä poteista, joissa on hänen omia merkkejään mukana. long getgameid() Palautetaan jaon yksikäsitteinen tunniste. lava.lang.string getlogdirectory() Metodi toteutetaan tynkänä yhteensopivuuden vuoksi. Metodin kutsuminen aiheuttaa ajonaikaisen poikkeuksen, Unsupported Operation Exceptionin. double getmainpotsize() Palautetaan pääpotin koko. double getminraise() Palautetaan pienimmän sallitun korotuksen koko.
43 39 int getnumactiveplayers() Palautetaan vielä jaossa mukana olevien pelaajien määrä (osallistujat - korteistaan luopuneet pelaajat). int getnumactiveplayersnotallin() Palautetaan pelaajien määrä, jotka eivät ole jaossa all-in. int getnumberofallinplayers() Palautetaan pelaajien määrä, jotka ovat jaossa all-in. int getnumplayers() Palautetaan jakoon osallistuneiden pelaajien määrä. int getnumraises() Palautetaan jaossa tehtyjen panostusten ja korotusten yhteismäärä. int getnumseats() Palautetaan peliin osallistujien määrälle asetettu yläraja. int getnumsidepots() Palautetaan sivupottien määrä. int getnumtoact() Palautetaan tällä panostuskierroksella vuoroon tulevien pelaajien määrä olettaen, ettei uusia korotuksia tehdä. int getnumwinners() Palautetaan pelaajien määrä, jotka voittivat jaossa. PlayerInfo getplayer(int seat) Palautetaan parametrina saadulla paikalla olevan pelaajan tilatieto Playerinfo-oliona. PlayerInfo getplayer(java.lang.string name) Palautetaan parametrina saadun nimisen pelaajan tilatieto Playerinfo-oliona. int getplayerseat(java.lang.string name) Palautetaan parametrina saadun nimisen pelaajan paikka. java.util.list getplayersinpot(double amountin) Palautetaan lista pelaajista, jotka voivat voittaa potin ja joilla on vähintään parametrina annetun määrän verran pelimerkkejä mukana potissa. double getrake() Palautetaan pelimerkkimäärä, jonka pelinjärjestäjä on ottanut itselleen palkkioksi potista.
44 double getsidepotsize(int i) Palautetaan parametrina saadun sivupotin koko. Parametri i on väliltä 0..n-1, n on sivupottien määrä. int getsmallblindseat() Palautetaan paikka, jolla oleva pelaaja on maksanut pienen sokkopanoksen. Palautettavan paikan valintaan vaikuttava pieni sokkopanos voi olla maksettu myös jakojen väliin jättämisen takia. double getsmallblindsize() Palautetaan pienen sokkopanoksen koko. int getstage() Palautetaan meneillään oleva pelivaihe (Holdem.PREFLOP, Holdem.FLOP, Holdem.TURN, Holdem.RIVER). double getstakes() Palautetaan pelimerkkimäärä, joka pelaajan on täytynyt sijoittaa peliin pysyäkseen jaossa mukana. double gettotalpotsize() Palautetaan pääpotin ja sivupottien yhteenlaskettu koko. int getunacted() Palautetaan niiden pelaajien määrä, jotka vielä tulevat tämän kierroksen aikana vuoroon. boolean ingame(int seat) Palautetaan tosi, jos parametrina annetulla paikalla oleva pelaaja on osallistunut jakoon, ts. ei ole jättänyt jakoa väliin (sit-out) boolean isactive(int seat) Palautetaan tosi, jos parametrinan annetulla paikalla olevan pelaaja on vielä mukana jaossa, ts. osallistunut jakoon eikä ole luopunut korteistaan. Muuten palautetaan epätosi. boolean iscommitted(int seat) Palautetaan tosi, jos parametrina annetulla paikalla oleva pelaaja on sijottanut menossa olevalla kierroksella pelimerkkejä. Muuten palautetaan epätosi. boolean isfixedlimit() Palautetaan tosi, jos pelimuoto on fixed limit eli panoksen enimmäiskoko on kiinnitetty. boolean isflop() Palautetaan tosi, jos menossa on boolean isgameover() 40
45 41 Palautetaan tosi, jos jako on päättynyt. Muuten palautetaan epätosi. boolean isnolimit() Palautetaan tosi, jos pelimuoto on no limit eli panoksen enimmäiskokoa ei ole rajoitettu. boolean ispostflop() Palautetaan tosi, jos menossa ei ole ensimmäinen panostuskierros (pre-flop). Muuten palautetaan epätosi. boolean ispotlimit() Palautetaan tosi, jos pelimuoto on pot limit eli suurin mahdollinen panostus tai korotus on yhtä suuri kuin potin koko. boolean ispreflop() Palautetaan tosi, jos menossa on ensimmäinen panostuskierros (pre-flop.) Muuten palautetaan epätosi. boolean isreverseblinds() Palautetaan tosi, jos kaksinpelissä jakajan paikalla oleva pelaaja maksaa pienen sokkopanoksen. Muuten palautetaan epätosi. boolean isriver() Palautetaan tosi, jos menossa on neljäs panostuskierros (river). boolean issimulation() Palautetaan aina epätosi. boolean isturn() Palautetaan tosi, jos menossa on kolmas panostuskierros (turn). Muuten palautetaan epätosi. boolean iszipmode() Palautetaan aina epätosi. int nextactiveplayer(int seat) Palautetaan parametrina annetulla paikalla olevaa pelaajaa seuraan, jaossa vielä mukana olevan pelaajan paikka. Palautettava ei voi olla tyhjä tai korteistaan luopuneen pelaajan paikka. int nextplayer(int seat) Palautetaan parametrina annetulla paikalla olevaa pelaajaa seuraavan pelaajan paikka. Palautettava ei voi olla tyhjä paikka. int nextseat(int seat) Palautetaan parametrina saatua paikkaa seuraava paikka.
46 42 int previousplayer(int seat) Palautetaan parametrina annetulla paikalla olevaa pelaajaa edeltävän pelaajan paikka. Palautettava ei voi olla tyhjä paikka. GameObserver Kuvaus: Luokka GameObserver on rajapintaluokka, joka määrittelee pokeripeliä seuraavalta oliolta vaadittavat ominaisuudet. Kaikki julkiset pelitapahtumat lähetetään rajapinnan toteuttajalle mahdollistaen pelin seuraamisen. Metodit: actionevent(int pos, Action act) Otetaan vastaan parametrina saadulla paikalla olevan pelaajan toiminto, joka saadaan toisena parametrina. Metodin voi kuormittaa saadakseen tiedot tietyn pelaajan kaikista toiminnoista. dealholecardsevent() Käsikortit jaetaan. gameoverevent() Jako on päättynyt. gamestartevent(gameinfo gi) Jako alkaa. Parametrina saadaan GameInfo-olio, joka määrittelee jaon tilatiedot. gamestatechanged() Jaon tilatieto on muuttunut. Metodia kutsutaan, kun jonkin pelaajan toiminto on käsitelty kokonaan. showdownevent(int pos, Card c1, Card cd) Parametrina saadulla paikalla oleva pelaaja on näyttänyt toisena ja kolmantena parametrina saadut kortit. stageevent(int stage) Uusi panostuskierros on alkanut. winevent(int pos, double amount, String handname) Ensimmäisenä parametrina saadulla paikalla oleva pelaaja on voittanut toisena parametrina saadun pelimerkkimäärän kolmantena parametrina saadun merkkijonon esittämällä kädellä. Player
47 Kuvaus: Luokka Player on GameObserverin alirajapintaluokka. Siinä on määritelty pokerin pelaamiseen vaadittavat metodit. Metodit: Action getaction() Pelaajalta pyydetään toimintoa. Metodia kutsutaan, kun on pelaajan vuoro. holecards(card c1, Card c2, int seat Otetaan vastaan parametreina saadut käsikortit. Kolmas parametri on pelaajan paikka. init(preferences prefs) Metodi toteutetaan tynkänä yhteensopivuuden vuoksi. Metodin kutsuminen aiheuttaa ajonaikaisen poikkeuksen, Unsupported Operation Exceptionin. 43 PlayerInfo Kuvaus: Luokka PlayerInfo on rajapintaluokka, joka määrittelee pelaajan julkisen tilatiedon meneillään olevassa jaossa. Metodit: double getamountcallable() Palautetaan pelimerkkimäärä, jonka pelaaja voi maksaa tehdystä panostuksesta. double getamountinpot() Palautetaan pelimerkkimäärä, joka pelaajalla on potissa. double getamountinpotthisround() Palautetaan pelimerkkimäärä, jonka pelaaja on tällä kierroksella pannut pottiin. double getamountriseable() Palautetaan pelaajan enimmäiskorotus. double getamounttocall() Palautetaan pelimerkkimäärä, joka pelaajan on maksettava pysyäkseen mukana. double getbankroll() Palautetaan pelaajan pelimerkkimäärä. double getbankrollatrisk() Palautetaan pelimerkkimäärä, joka on pelaajan oma pelimerkkimäärä, jos toisella jaossa mukana olevalla pelaajalla on enemmän merkkejä tai muista mukana olevien pelaajien pelimerkkimääristä suurin, jos pelaajalla on enemmän merkkejä kuin muilla mukana oli-
48 44 joilla. double getbankrollatstartofhand() Palautetaan pelimerkkimäärä, joka pelaajalla oli jaon alussa ennen sokko -tai aloituspanoksien maksamista. double getbankrollinsmallbets() Palautetaan pelaajan pelimerkkimäärä isoina sokkopanoksina. GameInfo getgameinfo() Palautetaan GameInfo-olio, joka määrittelee jaon tilatiedon pelaajan viimeisen toiminnon aikana. int getlastaction() Palautetaan kokonaisluku, joka vastaa pelajan viimeistä toimintoa. Palautettava on Holdemluokassa määritelty vakio FOLD, CALL tai RAISE. java.lang.string getname() Palautetaan pelaajan nimen merkkijonoesitys. double getnetgain() Palautetaan pelimerkkimäärä, jonka pelaaja on voittanut tai hävinnyt jaon alettua. double getraiseamount(double amounttoraise) Palautetaan pelaajan korotuksen enimmäismäärä. Parametrina saadaan pelaajan pyytämä korotus. Palautettava määrä ei voi olla suurempi kuin pelaajan käytettävissä oleva pelimerkkimäärä. Hand getrevealedhand() Palautetaan pelaajan näyttämistä korteista muodostettu Hand-olio. int getseat() Palautetaan pelaajan paikka. boolean hasactedthisround() Palautetaan tosi, jos pelaaja on ollut jo vuorossa tällä kierroksella. Muuten palautetaan epätosi. boolean hasenoughtoraise() Palautetaan tosi, jos pelaajalla on tarpeeksi pelimerkkejä korottaakseen. Muuten palautetaan epätosi. boolean ingame() Palautetaan tosi, jos pelaajalle on jaettu kortteja tässä jaossa. Muuten palautetaan epätosi.
49 boolean isactive() Palautetaan tosi, jos pelaaja on vielä on vielä mukana kädessä. Muuten palautetaan epätosi. boolean isallin() Palautetaan tosi, jos pelaaja on all-in. Muuten palautetaan epätosi. boolean isbutton() Palautetaan tosi, jos pelaaja on jakajan paikalla. Muuten palautetaan epätosi. boolean iscommitted() Palautetaan tosi, jos pelaaja on sijoittanut rahaa tällä kierroksella. Muuten palautetaan epätosi. boolean isfolded() Palautetaan tosi, jos pelaaja on luopunut korteistaan. Muuten palautetaan epätosi. boolean issittingout() Palautetaan tosi, jos pelaaja on jättänyt jaon väliin. Muuten palautetaan epätosi. java.lang.string tostring() Palautetaan pelaajan tilatiedon merkkijonoesitys. 45 ActionTypes Kuvaus: Luokassa ActionTypes on määritelty tunnukset Texas Hold em -pelipöydän eri toiminnoille. Muuttujat: static final int ALLIN_PASS Pelaaja on pannut peliin kaikki pelimerkkinsä ja siten jättää väliin vuoron. static final int BET Panostaminen static final int BIG_BLIND Ison sokkopanoksen maksaminen static final int CALL Maksaminen static final int CHECK
50 46 Passaaminen static final int FOLD Korteista luopuminen static final int INVALID Epäkelpo(sic) toiminto static final int MUCK Käden luovuttaminen näyttämättä kortteja static final int POST_ANTE Aloituspanoksen maksaminen static final int POST_BLIND Ison sokkopanoksen maksaminen peliin liityttäessä static final int POST_DEAD_BLIND Pelaajan jätettyä jakoja väliin kesken pelin häneltä ohi menneiden sokkopanosvuorojen maksaminen static final int RAISE Korottaminen static final int SIT_OUT Jaon jättäminen väliin static final int SMALL_BLIND Pienen sokkopanoksen maksaminen static final int ENTER_TABLE Pelipöytään liittyminen static final int LEAVE_TABLE Pelipöydästä poistuminen static final int SIT_DOWN Pelipöytään istuminen static final int SIT_UP Pelipöydästä nouseminen Action Kuvaus: Luokka Action määrittelee pelaajan pokeripelissä tekemät toiminnot. Toimintotyypit per-
51 47 itään ActionTypes-luokalta. Muuttujat: private int type Action-olion tyyppi, joka on jokin edellä ActionTypes-luokassa määritellyistä private double tocall Maksamisen hinta private double amount Korotuksen määrä Metodit: Action(int type, double tocall, double amount) Luodaan Action-olio antamalla parametreina toiminnon tyyppi, joka on yksi luokan muuttujista, maksamiseen vaadittava pelimerkkimäärä sekä maksun lisäksi sijoitettava pelimerkkimäärä. static Action allinpassaction() Palautetaan Action-olio, jonka tyyppi on ALLIN_PASS. static Action betaction(double amounttoraise) Palautetaan Action-olio, jonka tyyppi on BET. Panostuksen koko määräytyy parametrina saadun pelimerkkimäärän perusteella. static Action betaction(gameinfo gi) Palautetaan Action-olio, jonka tyyppi on BET. Panostuksen koko määräytyy parametrina saadun GameInfo-olion perusteella. static Action bigblindaction(double topost) Palautetaan Action-olio, jonka tyyppi on BIG_BLIND. Parametrina saadaan ison sokkopanoksen koko. static Action callaction(double tocall) Palautetaan Action-olio, jonka tyyppi on CALL. Parametrina saadaan maksamiseen vaadittava pelimerkkimäärä. static Action callaction(gameinfo gi) Palautetaan Action-olio, jonka tyyppi on CALL. Maksamisen hinta määräytyy parametrina saadun GameInfo-olion perusteella. static Action checkaction() Palautetaan Action-olio, jonka tyyppi on CHECK.
52 48 static Action checkorfoldaction(double tocall) Palautetaan Action-olio, jonka tyyppi on on CHECK, jos passaaminen on mahdollista, ts. parametrina saatu tocall = 0. Muuten palautettavan Action-olion tyyppi on FOLD. static Action checkorfoldaction(gameinfo gi) Palautetaan Action-olio, jonka tyyppi on CHECK, jos passaaminen on mahdollista, ts. parametrina saadun GameInfo-olion perusteella saatu maksaminen hinta = 0. Muuten palautettavan Action-olion tyyppi on FOLD. Action equivalent(action a) Palautetaan tosi, jos parametrina saatu Action-olion muuttujat type, tocall ja amount ovat kukin yhtä suuria kutsuvan Actionin muuttujien kanssa. static Action foldaction(double tocall) Palautetaan Action-olio, jonka tyyppi on FOLD. Parametrina saadaan maksamiseen vaadittava pelimerkkimäärä. static Action foldaction(gameinfo gi) Palautetaan Action-olio, jonka tyyppi on FOLD. Maksamisen hinta määräytyy parametrina saadun GameInfo-olion perusteella. static String formatcash(double value) Metodi toteutetaan tynkänä yhteensopivuuden vuoksi. Metodin kutsuminen aiheuttaa ajonaikaisen poikkeuksen, Unsupported Operation Exceptionin. static String formatcashfulol(double value) Metodi toteutetaan tynkänä yhteensopivuuden vuoksi. Metodin kutsuminen aiheuttaa ajonaikaisen poikkeuksen, Unsupported Operation Exceptionin. static Action getaction(int a, double tocall, double amount) Palautetaan saatujen parametrien perusteella luotava Action-olio. Parametri a määrää, onko palautettavan Action-olion tyyppi FOLD, CALL vai RAISE, tocall on maksamiseen vaadittava pelimerkkimäärä ja amount on korotettava pelimerkkimäärä (tai 0). int getactionindex() Palautetaan kokonaisluku kutsuvan Action-olion tyypin perusteella. Jos tyyppi on FOLD, CALL tai RAISE, palautetaan vastaava HOLDEM-luokan määrittelemä vakio. Jos tyyppi ei vastaa tavallista vapaaehtoista toimintoa, palautetaan -1. double getamount() Palautetaan amount-muuttujan arvo. double gettocall() Palautetaan tocall-muuttujan arvo.
53 49 int gettype() Palautetaan type-muuttujan arvo. boolean isallinpass() Palautetaan tosi, jos kutsujan tyyppi on ALLIN_PASS. Muuten palautetaan epätosi. boolean isante() Palautetaan tosi, jos kutsujan tyyppi on POST_ANTE. Muuten palautetaan epätosi. boolean isbet() Palautetaan tosi, jos kutsujan tyyppi on on BET. Muuten palautetaan epätosi. boolean isbetorraise() Palautetaan tosi, jos kutsujan tyyppi on BET tai RAISE. Muuten palautetaan epätosi. boolean isbigblind() Palautetaan tosi, jos kutsujan tyyppi on BIG_BLIND. Muuten palautetaan epätosi. boolean isblind() Palautetaan tosi, jos kutsujan tyyppi on BIG_BLIND tai SMALL_BLIND. Muuten palautetaan epätosi. boolean iscall() Palautetaan tosi, jos kutsujan tyyppi on CALL. Muuten palautetaan epätosi. boolean ischeck() Palautetaan tosi, jos kutsujan tyyppi on CHECK. Muuten palautetaan epätosi. boolean ischeckorcall() Palautetaan tosi, jos kutsujan tyyppi on on CHECK tai CALL. Muuten palautetaan epätosi. boolean isfold() Palautetaan tosi, jos kutsujan tyyppi on FOLD. Muuten palautetaan epätosi. boolean isfoldormuck() Palautetaan tosi, jos kutsujan tyyppi on FOLD tai MUCK. Muuten palautetaan epätosi. boolean ismuck() Palautetaan tosi, jos kutsujan tyyppi on MUCK. Muuten palautetaan epätosi. boolean ispost() Palautetaan tosi, jos kutsujan tyyppi on POST_ANTE, POST_BLIND tai POST_DEAD_BLIND. Muuten palautetaan epätosi.
54 50 boolean ispostdeadblind() Palautetaan tosi, jos kutsujan tyyppi on POST_DEAD_BLIND. Muuten palautetaan epätosi. boolean israise() Palautetaan tosi, jos kutsujan tyyppi on RAISE. Muuten palautetaan epätosi. boolean issitout() Palautetaan tosi, jos kutsujan tyyppi on SIT_OUT. Muuten palautetaan epätosi. boolean issmallblind() Palautetaan tosi, jos kutsujan tyyppi on SMALL_BLIND. Muuten palautetaan epätosi. boolean isvoluntary() Palautetaan tosi, jos kutsujan tyyppi on FOLD, CALL tai RAISE. Muuten palautetaan epätosi. static Action muckaction() Palautetaan Action-olio, jonka tyyppi on MUCK. static Action postante(double topost() Palautetaan Action-olio, jonka tyyppi on POST_ANTE. Aloituspanoksen koko saadaan parametrina. static Action postblindaction(double topost) Palautetaan Action-olio, jonka tyyppi on POST_BLIND. Sokkopanoksen koko saadaan parametrina. static Action postdeadblindaction(double topost) Palautetaan Action-olio, jonka tyyppi on POST_DEAD_BLIND. Sokkopanoksen koko saadaan parametrina. static Action raiseaction(double tocall, double amounttoraise) Palautetaan Action-olio, jonka tyyppi on RAISE. Maksamiseen vaadittava pelimerkkimäärä ja korotuksen koko saadaan parametreina. static Action raiseaction(gameinfo gi) Palautetaan Action-olio, jonka tyyppi on RAISE. Maksamiseen vaadittava pelimerkkimäärä ja korotuksen koko määräytyvät parametrina saadun GameInfo-olion perusteella. static Action raiseaction(gameinfo gi, double amounttoraise) Palautetaan Action-olio, jonka tyyppi on RAISE. Maksamiseen vaadittava pelimerkkimäärä määräytyy parametrina saadun GameInfo-olion ja korotuksen koko amounttoraise-parametrin perusteella.
55 51 static Action sitout() Palautetaan Action-olio, jonka tyyppi on SIT_OUT. static Action smallblindaction(double topost) Palautetaan Action-olio, jonka tyyppi on SMALL_BLIND. Pienen sokkopanoksen koko saadaan parametrina. String tostring() Palautetaan Action-olion merkkijonoesitys. Metodi kuormittaa class.java.lang.object-luokalta perityn metodin. String tostring2() Palautetaan Action-olion merkkijonoesitys. Holdem Kuvaus: Luokka Holdemissa on määritelty Texas Hold emissa käytettäviä vakioita. Muuttujat: static int BET Vakioarvo panostamiselle static int CALL Vakioarvo maksamiselle static int CHECK Vakioarvo passaamiselle static int FLOP Vakioarvo toiselle panostuskierrokselle static int MAX_PLAYERS Vakioarvo pelaajien enimmäismäärälle static int MAX_RAISES Vakioarvo panostusikkunoiden enimmäismäärälle rajoitetussa Texas hold em -pelissä static int PREFLOP Vakioarvo ensimmäiselle panostuskierrokselle static int RAISE Vakioarvo korottamiselle
56 52 static int RIVER Vakioarvo neljännelle panostuskierrokselle static int SHOWDOWN Vakioarvo käden paljastamiselle static int TURN Vakioarvo kolmannelle panostuskierrokselle 7 Tietokannat Kunkin pelimoduulin tarvitsemat taulut tehdään omaan skeemaansa. Käyttäjät lisätään rekisteröinnin yhteydessä palvelimen käyttäjätietokantaan ja ensimmäistä kertaa peliin liittymisen yhteydessä pelimoduulin käyttäjätauluun. SQL-lauseet Palvelimen käyttäjätietokanta Palvelimen käyttäjätietokantaan eli automaattisesti luotavaan public-skeemaan liittyvät lauseet. Taulun luominen: CREATE TABLE public.user ( username varchar(12) PRIMARY KEY, password char(20) NOT NULL, superuser boolean ); Käyttäjän lisääminen (ensin tarkistettava, onko käyttäjä jo tietokannassa, kts. alempana): INSERT INTO public.user VALUES ( Pokeriv3, salasana, false); Käyttäjän tunnistaminen käyttäjätietokannasta (annetut parametrit käyttäjätunnus "Pokeriv3"ja salasana "salasana"; jos kysely palauttaa luvun yksi, käyttäjä on tietokannassa): SELECT count(*) FROM public.user WHERE username= Pokeriv3 AND password= salasana ;
57 Kuva 15: Texas Hold em pelimoduulin asiakasliittymä 53
58 Kuva 16: Relaatiokaavio palvelimen käyttäjätietokannasta ja TexasHoldem -pelimoduulin tietokannasta 54
59 TexasHoldem-pelimoduulin skeema Muiden pelimoduulien skeemat voi piilottaa istunnon aikana asettamalla käyttäjälle roolin, jolloin hänellä on vain rooliin kuuluvat oikeudet. 55 TexasHoldem-skeemalle luodaan rooli komennolla: CREATE ROLE texasholdem_role LOGIN; Tarvittavien oikeuksien antaminen roolille: GRANT USAGE ON SCHEMA texasholdem TO texasholdem_role; GRANT ALL ON public.user, texasholdem.table, texasholdem.deal, texasholdem.event, texasholdem.player TO texasholdem_role; Oikeuksien poistaminen roolilta: REVOKE USAGE ON SCHEMA texasholdem TO texasholdem_role; REVOKE ALL ON public.user, texasholdem.table, texasholdem.deal, texasholdem.event, texasholdem.player FROM texasholdem_role; Roolin tuhoaminen: DROP ROLE texasholdem_role; Roolin jäsenyyden antaminen käyttäjälle: GRANT texasholdem_role TO tkt_pok3; Roolin asettaminen käyttäjälle niin, että käyttäjä pääsee istunnon aikana käsiksi vain roolin oikeuksien sallimiin tauluihin (palvelimen pitäisi tehdä tämä pelimoduulin tehdessä tietokantaoperaatioita): SET ROLE texasholdem_role; Käyttäjä saadaan takaisin alkuperäiselle oikeustasolle komennolla: RESET ROLE; Skeeman luonti:
60 56 CREATE SCHEMA texasholdem; Taulujen luomiset: CREATE TABLE texasholdem.player ( username varchar(12) PRIMARY KEY REFERENCES public.user (username), balance numeric(11,2), gamesplayed integer ); CREATE TABLE texasholdem.table ( tableid integer PRIMARY KEY, tabletimestamp timestamp, tablename varchar(16), gamecreator varchar(12) REFERENCES texasholdem.player (username), maxplayers integer, minplayers integer, password char(20), timelimitforaction integer, bigblindamount numeric(11,2), ante numeric(11,2), fixedlimit numeric(11,2), potlimit boolean ); Funktio taulukossa olevien pelaajien käsittelyä varten (tarkistaa, ovatko taulukossa olevat pelaajat olemassa Player-pöydässä): CREATE FUNCTION test_players (varchar(12)[]) RETURNS bool AS select case when count(1) = array_upper($1,1) then true else false end from texasholdem.player where username=any($1); LANGUAGE SQL; CREATE TABLE texasholdem.deal ( dealtimestamp timestamp, tableid integer REFERENCES texasholdem.table (tableid), players varchar(20)[10] CHECK (test_players(players)), playerhand smallint[10][2], communitycards smallint[5], dealer smallint,
61 57 dealnumber smallint, PRIMARY KEY(dealtimestamp, tableid) ); CREATE TABLE texasholdem.event ( eventtimestamp timestamp, dealtimestamp timestamp, tableid integer, player varchar(12) REFERENCES texasholdem.player (username), action smallint, amount numeric(11,2), PRIMARY KEY(eventtimestamp, tableid), FOREIGN KEY (dealtimestamp, tableid) REFERENCES texasholdem.deal (dealtimestamp, tableid) ); Pelaajan lisääminen TexasHoldemiin: INSERT INTO texasholdem.player VALUES ( Pokeriv3, 0, 0); Käyttäjän tunnistaminen TexasHoldem-skeemasta (annettu parametri käyttäjätunnus "Pokeriv3"; jos kysely palauttaa luvun yksi, käyttäjä on skeemassa): SELECT count(*) FROM texasholdem.user WHERE username= Pokeriv3 ; Pöydän lisääminen (pöydän aikaleima luodaan samalla kuin itse pöytä): INSERT INTO texasholdem.table VALUES (13, CURRENT_TIMESTAMP, Kairo, Pokeriv3, 10, 2, salasana, 90, 5000, 1000, , true); Jaon lisääminen (pelimoduuli vastaa tietokantaan tallennettavan tiedon sisällöstä): INSERT INTO texasholdem.deal (dealtimestamp, tableid, players, playerhand, communitycards, dealer, dealnumnber) VALUES ( :46: , 13, ARRAY[ Pokeriv3, Richelieu, Leonardo ], ARRAY[[2,3], [10,40], [32,12]], ARRAY[4,17,51,20], 2, 2);
62 58 Tapahtuman lisääminen: INSERT INTO texasholdem.event (eventtimestamp, tableid, dealtimestamp, player, action, amount) VALUES ( :47: , 13, :46: , Pokeriv3, 2, ); Tallennettua pelilokia syötettäessä tietokantaan käytetään ylläolevia lauseita kunkin jaon ja sen tapahtumien tallentamiseen. Lisäksi peliin osallistuneiden pelaajien balance on päivitettävä (korvaa parametrit Pokeriv3 kyseisen pelaajan tunnuksella ja 1000 voitettujen pelimerkkien määrällä): UPDATE texasholdem.player SET balance = ((SELECT balance FROM texasholdem.player WHERE username = Pokeriv3 ) ) WHERE username = Pokeriv3 ; Pelipöydän hakeminen TexasHoldem-skeemasta: SELECT tablename, CASE WHEN password IS NOT NULL THEN true ELSE false END AS ispasswordprotected, (maxplayers - array_upper(players, 1)) AS seats_left, timelimitforaction, bigblindamount, ante, fixedlimit, potlimit FROM texasholdem.table, texasholdem.deal WHERE texasholdem.table.tableid=texasholdem.deal.tableid; Esimerkki pelipöydän fixedlimitin päivittämisestä: UPDATE texasholdem.table SET fixedlimit = WHERE tableid=13; Jako-otteen kysyminen tietokannasta (tiedettävä pöydän id ja jaon aika): SELECT DISTINCT tablename, dealnumber, array_upper(players, 1), dealer, bigblindamount, potlimit, fixedlimit, ante, players, playerhand, communitycards FROM texasholdem.deal, texasholdem.table WHERE texasholdem.table.tableid=13 AND texasholdem.deal.tableid=13 AND texasholdem.deal.dealtimestamp= :46: ;
63 59 Jaon pelaajamäärän kysyminen: SELECT array_upper(players, 1) FROM texasholdem.deal WHERE tableid=13 AND dealtimestamp= :46: ; Jaon korttien kysyminen: SELECT playerhand, communitycards FROM texasholdem.deal WHERE tableid=13 AND dealtimestamp= :46: ; Voittotietojen tulostus (vain TexasHoldem-tietokannasta) (KT17): SELECT public.user.username, gamesplayed, balance FROM public.user, texasholdem.player WHERE public.user.username=texasholdem.player.username; Voittojen määrä jaoista, joihin pelaaja on osallistunut (korvaa muuttuja VOITTO voittoactionin numerolla ja Pokeriv3 pelaajan tunnuksella) (KT11): SELECT wins/alldeals FROM (SELECT count(deal.dealtimestamp) AS wins FROM texasholdem.deal, texasholdem.event WHERE action=voitto AND Pokeriv3 = ANY (deal.players)) winstable, (SELECT count(deal.dealtimestamp) AS alldeals FROM texasholdem.deal WHERE Pokeriv3 = ANY (deal.players)) alldealstable;
64 Kuva 17: Texas Hold em pöytänäkymä 0
65 Kuva 18: Aulanäkymä 1
Testaussuunnitelma. pokeriv3. Helsinki 10.4.2008 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Testaussuunnitelma pokeriv3 Helsinki 10.4.2008 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Anne-Marie Grönroos
Olio-ohjelmointi Javalla
1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi
Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys
Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Tällä kurssilla on tutustuttu ohjelmistojen mallintamiseen oliomenetelmiä ja UML:ää käyttäen Samaan aikaan järjestetyllä kurssilla on käsitelty
Testaussuunnitelma. Asdf. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Testaussuunnitelma Asdf Helsinki 22.2.2008 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Kuisma Sami Louhio
Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014
Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.
Vaatimusmäärittely dokumentti
Vaatimusmäärittely dokumentti Asdf Helsinki 5.5.2008 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Kuisma
Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:
Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int
Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto
Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
18. Abstraktit tietotyypit 18.1
18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki
Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.
Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Ylläpitodokumentti Boa Open Access Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari
Rajapinta (interface)
1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä
Javan perusteita. Janne Käki
Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).
812341A Olio-ohjelmointi Peruskäsitteet jatkoa
812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää
Java kahdessa tunnissa. Jyry Suvilehto
Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Rajapinnat Java-kieli ei tue luokkien moniperintää. Jokaisella luokalla voi olla vain yksi välitön yliluokka. Toisinaan olisi
Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)
Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi
16. Javan omat luokat 16.1
16. Javan omat luokat 16.1 Sisällys Johdanto. Object-luokka: tostring-, equals-, clone- ja getclass-metodit. Comparable-rajapinta: compareto-metodi. Vector- ja ArrayList-luokat. 16.2 Javan omat luokat
Vaatimusmäärittelydokumentti
Vaatimusmäärittelydokumentti pokeriv3 Helsinki 15.2.2008 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Anne-Marie
HAME PostGIS-tietokanta
HAME PostGIS-tietokanta Harmonisoidut maakuntakaavat e-palveluiksi (HAME) VSL 10.12.2019 HAME-hankkeelle maakuntakaavoja varten rakennettu PostGIS-serveri sijaitsee Lounaistiedon AWS (Amazon Web Service)
15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:
15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja
Enigmail-opas. Asennus. Avainten hallinta. Avainparin luominen
Enigmail-opas Enigmail on Mozilla Thunderbird ja Mozilla Seamonkey -ohjelmille tehty liitännäinen GPG-salausohjelmiston käyttöä varten. Sitä käytetään etenkin Thunderbirdin kanssa sähköpostin salaamiseen
Ohjelmisto on selainpohjaisen käyttöliittymän tarjoava tietokantajärjestelmä merikotkien seurantaan WWF:n Merikotka-työryhmän tarpeisiin.
TIETOKANTA MERIKOTKIEN SEURANTAAN Käyttöohje Versiohistoria: Versio Päivämäärä Kuvaus Tekijä 1.0 11.12.2007 Ensimmäinen luonnos Janne Piippo 2.0 13.12.2007 Virallinen verio Janne Piippo HELSINGIN YLIOPISTO
Tietokannat II -kurssin harjoitustyö
Tietokannat II -kurssin harjoitustyö Jyri Lehtonen (72039), jkoleh@utu.fi Azad Hajipour (72187), azhaji@utu.fi 10.6.2007 Sisältö 1. Tietokannan kuvaus... 1 1.1 Tietokannan rakenne... 1 1.2 Relaatiokaava
Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.
Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi olioperustainen sokkeloseikkailu peli Javakielellä. Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen
Metodien tekeminen Javalla
1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.
2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)
2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi
JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?
JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,
Ohjelmointi 2 / 2010 Välikoe / 26.3
Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään
Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.
11. Rajapinnat 11.1 Sisällys Johdanto. Abstrakti luokka vai rajapinta? Rajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen
Projektisuunnitelma. Asdf. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Projektisuunnitelma Asdf Helsinki 22.2.2008 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Kuisma Sami Louhio
Action Request System
Action Request System Manu Karjalainen Ohjelmistotuotantovälineet seminaari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos 25.10.2000 Action Request System (ARS) Manu Karjalainen Ohjelmistotuotantovälineet
MY STANDARD -OHJE. mystandard.hansaworld.com. Standard ERP Pilvipalvelu Sivu 1/6
MY STANDARD -OHJE mystandard.hansaworld.com Standard ERP Pilvipalvelu Sivu 1/6 KÄYTTÖÖNOTTO Mikäli Standard ERP -ohjelmistonne on HansaWorldin pilvipalvelimella (hostingissa), teidän on mahdollista hallinnoida
Taulukot. Jukka Harju, Jukka Juslin 2006 1
Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti
Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen
Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus
Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia
Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia Tehtävä 1 Tehtävässä 1 mallinnettiin Monopolipeliä. Alla olevassa esimerkissä peliin liittyy aina 2 noppaa, peliä pelataan pelilaudalla,
Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Testausdokumentti Kivireki Helsinki 17.12.2007 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Anu Kontio Ilmari
Listarakenne (ArrayList-luokka)
Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen
Convergence of messaging
Convergence of messaging Testausdokumentti The Converge Group: Mikko Hiipakka Anssi Johansson Joni Karppinen Olli Pettay Timo Ranta-Ojala Tea Silander Helsinki 20. joulukuuta 2002 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen
Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)
Sisällys JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys Periytyminen (inheritance) Näkyvyys (visibility) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E. Hyvönen: Java Osa
Sisällys. 11. Rajapinnat. Johdanto. Johdanto
Sisällys 11. ajapinnat. bstrakti luokka vai rajapinta? ajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen avulla.
4. Luokan testaus ja käyttö olion kautta 4.1
4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään
SSH Secure Shell & SSH File Transfer
SSH Secure Shell & SSH File Transfer TIETOHALLINTO Janne Suvanto 1.9 2002 Sisällysluettelo Sisällysluettelo... 1 Yleistä... 2 SSH Secure Shell ohjelman asetukset... 3 POP3 tunnelin asetukset... 6 Yhteyden
Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista
Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma
Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.
Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi Java-kielellä keskustelualuetta simuloiva olioperustainen ohjelma (Simple Oope Board, S.O.B). Linkitetystä listasta perittyä omaa listaa käytetään muun muassa
1. Omat operaatiot 1.1
1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma
Käyttöohje. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Käyttöohje Boa Open Access Helsinki 5.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari Heikkinen
Sisältö. 22. Taulukot. Yleistä. Yleistä
Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä
Tietokannat II -kurssin harjoitustyö
Tietokannat II -kurssin harjoitustyö Olli Opiskelija (123), olli.opiskelija@foo.fi Maija Mallioppilas (321), maija.mallioppilas@foo.fi 13.3. 2007 1 Sisältö 1 Tietokannan kuvaus 3 1.1 Tietokannan rakenne..................................
Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla
Tietojen syöttäminen ohjelmalle Tähän mennessä on käsitelty Javan tulostuslauseet System.out.print ja System.out.println sekä ohjelman perusrakenneosat (muuttujat, vakiot, lauseet). Jotta päästään tekemään
14. Poikkeukset 14.1
14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.
Java-API, rajapinnat, poikkeukset, UML,...
Java-API, rajapinnat, r poikkeukset, UML,... Janne Käki 12.10.2006 Keskeisimmät Java-API:n pakkaukset API = Application Programming Interface eli sovellusohjelmointirajapinta (!) pakkaus (engl. package)
9. Periytyminen Javassa 9.1
9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.
Subversion-ohje. Linux Traffic Control-käyttöliittymä Ryhmä paketti2
Subversion-ohje Linux Traffic Control-käyttöliittymä Ryhmä paketti2 Helsinki 1.11.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti
CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0
CODEONLINE Monni Oo- ja Java-harjoituksia Version 1.0 Revision History Date Version Description Author 25.10.2000 1.0 Initial version Juha Johansson Inspection History Date Version Inspectors Approved
Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä
Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä
A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)
1(37) PERIYTYMINEN (inheritance) YLILUOKKA (superclass) ALILUOKKA (subclass) A) on käytännöllinen ohjelmointitekniikka = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) B) on käsitteiden
812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä
2016 IX Olioiden välisistä yhteyksistä Sisältö 1. Johdanto 2. Kytkentä 3. Koheesio 4. Näkyvyydestä 2 Johdanto n Ohjelmassa syntyy kytkentöjä olioiden välille Toivottuja ja epätoivottuja n Näkyvyys vaikuttaa
Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2
4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä
Sisällys. 14. Poikkeukset. Johdanto. Johdanto
Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.
Luokan sisällä on lista
1 Luokan sisällä on lista Luokan sisällä lista Listan sisältävä luokka Konstruktorit get-metodi Lista muissa metodeissa addxx-metodi Yksinkertainen pääohjelma Kertauksen List-luokan metodeja 1 Luokan sisällä
Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2
4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely
Verkkopokerijärjestelmä. Suunnitteludokumentti, 2. iteraatio Ryhmä Kanat Ohjelmistotuotantoprojekti, syksy 2008
Verkkopokerijärjestelmä Suunnitteludokumentti, 2. iteraatio Ryhmä Kanat Ohjelmistotuotantoprojekti, syksy 2008 Projektiryhmä Samuli Aalto Setälä Jukka Kekälainen Jarno Kyykkä Mika Mielonen Mårten Smeds
Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen
Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Poikkeukset Poikkeuksella tarkoitetaan yllättävää ajonaikaista tilannetta, joka
Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.
1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).
Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä
www.niksula.cs.hut.fi/~jjkankaa// Demosovelluksen tekninen määrittely v. 0.6 Päivitetty 11.12.2000 klo 20:26 Mickey Shroff 2 (12) Dokumentin versiohistoria Versio Päivämäärä Tekijä / muutoksen tekijä Selite
Hakemistojen sisällöt säilötään linkitetyille listalle.
Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi Java-kielellä komentoikkunaa (komentotulkkia, komentoriviä) simuloiva olioperustainen ohjelma. Hakemistojen sisällöt säilötään linkitetyille listalle. Työ
Sisältö. 2. Taulukot. Yleistä. Yleistä
Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä
14. Poikkeukset 14.1
14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla
12. Monimuotoisuus 12.1
12. Monimuotoisuus 12.1 Sisällys Johdanto. Periytymismekanismi määrittää alityypityksen. Viitteiden sijoitus ja vertailu. Staattinen ja dynaaminen luokka. Myöhäinen ja aikainen sidonta. Parametrinvälitys
Tekstiviestipalvelun rajapintakuvaus
Tekstiviestipalvelun rajapintakuvaus Sisällysluettelo 1. Yleistä... 1 2. Lähtevien viestien rajapinta... 1 2.1. Rajapinnan tekniset tiedot ja parametrit... 1 2.2. Rajapinnan paluuarvot... 3 2.3. Rajapinnan
Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma
1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja
Graafisen käyttöliittymän ohjelmointi Syksy 2013
TIE-11300 Tietotekniikan vaihtuva-alainen kurssi Graafisen käyttöliittymän ohjelmointi Syksy 2013 Luento 8 Suunnittelumallit käyttöliittymäohjelmoinnissa Juha-Matti Vanhatupa Yleistä Suunnittelumalli on
Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie
Ylläpitodokumentti Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie Helsinki 16.7.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti
Käyttöohje Suomen Pankin DCS2-järjestelmään rekisteröityminen
1 (13) Käyttöohje Suomen Pankin DCS2-järjestelmään rekisteröityminen 2 (13) Sisällysluettelo 1 Palveluun rekisteröityminen... 3 1.1 Henkilötiedot...4 1.2 Suomen Pankin tiedonkeruut... 5 1.2.1 Alustava
Sisällys. 14. Poikkeukset. Johdanto. Johdanto
Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla
Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4
Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.
KServer Etäohjaus Spesifikaatio asiakaspuolen toteutuksille
KServer Etäohjaus 1 (5) KServer Etäohjaus Spesifikaatio asiakaspuolen toteutuksille Palvelimen toteutuksen ollessa versio 1.0, spesifikaation versio 1.0.0. 2009, Riku Eskelinen/ KServer Software Development
Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:
1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri
Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.
2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä
Asennusohje. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Asennusohje Sahara-ryhmä Helsinki 24.8.2005 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Sanna Keskioja Sampo
Ilmoitus saapuneesta turvasähköpostiviestistä
Tullin turvasähköposti Asiakkaan ohje www.tulli.fi versio 2.2 8.1.2015 Korvaa version 2.1 22.5.2014 Tullin turvasähköposti Tulli lähettää sinulle sähköpostiviestin salattuna silloin, kun viesti tai sen
Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen
Esimerkki: Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen Luo tietokanta Koulu. Tietokantaan lisätään 3 taulua. Kurssit-taulu: kurssiid not null primary key INTEGER aineid not
Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.
Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen
JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä 6.11.2002
JReleaser Yksikkötestaus ja JUnit Mikko Mäkelä 6.11.2002 Sisältö Johdanto yksikkötestaukseen JUnit yleisesti JUnit Framework API (TestCase, TestSuite) Testien suorittaminen eri työkaluilla Teknisiä käytäntöjä
Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1
Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri 2 28.11.2008 Harri Laine 1 Ohjelmistoarkkitehtuuri Rajapinta UML:ssä piirteiden (attribuuttien ja operaatioiden) kokoelma, josta ei voi suoraan luoda ilmentymiä
Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)
HAAGA-HELIA ICT1TA006: Ohjelmointi 1 /5 Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC) (Lähteet: Oracle java jdbc Tutorial, Arvo Lipitsäinen: Tietokannan käsittely JDBC:n
FTP -AINEISTOSIIRRON OHJE PC / MAC Ympäristö
FTP -AINEISTOSIIRRON OHJE PC / MAC Ympäristö Versio 1.0 Tiedostonsiirto FTP -menetelmällä Lahden Väriasemoinnilla on käytössä suurempien tiedostojen siirtoa varten oma FTP -yhteys. Tällä menetelmällä saadaan
Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:
Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Microsoft SQL käyttö Yleistä VisualStudiosta Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen: - sovellushallintaan -
Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.
Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen
Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito
Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito Henri Kinnunen, Seppo Tompuri, Tero Malkki, Matti Heiskanen, Tommi Rönkönharju, Tuomas Valkeapää Sisällysluettelo 1. Alkusanat.2 2. Asennusohje..2 3.
Sähköpostitilin käyttöönotto
Sähköpostitilin käyttöönotto Versio 1.0 Jarno Parkkinen jarno@atflow.fi Sivu 1 / 16 1 Johdanto... 2 2 Thunderbird ohjelman lataus ja asennus... 3 3 Sähköpostitilin lisääminen ja käyttöönotto... 4 3.2 Tietojen
Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:
Linux-harjoitus 6 Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä: http://www.mysql.com/, MySQL-tietokantaohjelman kotisivu. http://www.mysql.com/doc/en/index.html,
SuomiCom-sähköpostiasetukset Microsoft Outlook 2016
SuomiCom-sähköpostiasetukset Microsoft Outlook 2016 Nämä ohjeet on suunnattu Microsoft Outlook 2016 -ohjelmalle, mutta ohje todennäköisesti toimii suuntaa-antavana myös vanhemmille versioille. Kuvat ovat
Ohjelmointi 1 Taulukot ja merkkijonot
Ohjelmointi 1 Taulukot ja merkkijonot Jussi Pohjolainen TAMK Tieto- ja viestintäteknologia Johdanto taulukkoon Jos ohjelmassa käytössä ainoastaan perinteisiä (yksinkertaisia) muuttujia, ohjelmien teko
Verkkopokerijärjestelmä. Loppuraportti Ryhmä Kanat Ohjelmistotuotantoprojekti, syksy 2008
Verkkopokerijärjestelmä Loppuraportti Ryhmä Kanat Ohjelmistotuotantoprojekti, syksy 2008 Projektiryhmä Samuli Aalto-Setälä Jukka Kekälainen Jarno Kyykkä Mika Mielonen Mårten Smeds Otto Waltari Ohjaaja
Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu
Taulukot Taulukon määrittely ja käyttö Taulukko metodin parametrina Taulukon sisällön kopiointi toiseen taulukkoon Taulukon lajittelu esimerkki 2-ulottoisesta taulukosta 1 Mikä on taulukko? Taulukko on