Tässä vähän kommentteja 1. tapaukseen liittyen. Varsinaisesti “oikeita vastauksia” yksinkertaisten laskutehtävien tapaan ei tämänkaltaisissa suunnittelutehtävissä voi antaa, mutta eri ratkaisuehdotelmissa on kuitenkin hyvät ja huonot puolensa.

Tietoliikenneprotokollan "täydelliseen" spesifiointiin kuuluu

- funktioiden kutsut ja parametrit, joiden välityksellä palvelua käytetään (näiden tarkka syntaksi kuitenkin vaihtelee ohjelmointikielestä ja käyttöjärjestelmästä toiseen)
- viestit, joita osapuolten välillä lähetetään (standardoitava yksityiskohtaisesti) sekä
- esim. (mm. digitaalitekniikan peruskurssissa käytettyä) tilakone-esitystä käyttäen määritellyt säännöt siitä, mitä asioita missäkin vaiheessa tehdään.

Näistä asioista painopiste oli tällä kertaa ensin mainitussa, mutta ei muitakaan em. näkökohtia painottavia ratkaisuja voi pitää väärinä.

Olennaista on ymmärtää, mikä on sovellustason protokollan rooli suuremmassa kokonaisuudessa. Kysymys on kahdesta ohjelmasta, jotka vaihtavat keskenään varsinaiseen tietoliikennettä käyttävään sovellukseen, esim. kaupankäyntiin liittyviä viestejä (kysy tuotteen hintaa, tee tilaus jne.). Koko homma toimii luotettavan kuljetustason palvelun (käytännössä aliohjelmapakkauksen, esim. TCP) päällä, joten varsinaisesti tietoliikenteeseen liittyviä ongelmia (esim. siirtovirheet) ei tarvitse miettiä. Jonkinlainen aloitus- ja lopetusproseduuri on kuitenkin tarpeen, vaikka se ei itse asiassa teekään juuri muuta kuin kutsuu vastaavaa TCP-tason funktiota.

Toisaalta kysymys ei myöskään ole varsinaisesti koko sovellusohjelmasta, vaan vain asiakas- ja palvelinohjelmien väliseen kommunikaatioon liittyvästä ohjelman osasta, lähinnä em. viestien muodostamisesta ja purkamisesta. Niinpä protokollaan ei kuulu esim. kommunikointi käyttäjän kanssa näytön ja näppäimistön välityksellä. Palvelimen puolella vastaavasti tietojen tallettaminen tiedostoon ja lukeminen sieltä kuuluvat protokollan käyttäjälle (pääohjelmalle), eivät itse protokollaan.

Prujussa esitetyt funktiot  tyyliin open, waitfor, send, receive, close liittyvät em. tietoliikennepalveluun (kuljetuspalveluun), joka mahdollistaa luotettavan tietojen siirron ohjelmien välillä, mutta ei mitenkään liity varsinaiseen sovellukseen. Kuljetustasolla on oma protokollansa (TCP, UDP, ...), jossa on varauduttu mm. virheellisten sanomien uudelleen lähettämiseen. Sovellustason protokolla - sovellukseen liittyvien viestien välitys ja sovellukseen liittyvät funktiot, esim. tilaa(...) - käyttävät sitten hyväkseen näiden funktioiden tarjoamaa luotettavaa tiedonsiirtoa. Näin ei sovellustasolla tarvitse enää varautua esim. siirtovirheisiin.

Funktioista (metodeista) riittää kertoa lyhyesti, mitä kukin funktio tekee ja mitä parametreja tarvitaan. Ohjelmointikielen syntaksisäännöt eivät ole tärkeitä eikä ohjelman sisäistä rakennetta tarvitse pohtia ollenkaan. Parametrin tyypin (kokonaisluku, merkkijono…) voi kuitenkin hyvin mainita.

<>Java RMI -pakkaukseen perustuvat ratkaisut käyttävät Javan suunnittelijoiden päättämiä viestiformaatteja ohjelmien välillä. Tämä onnistuu vain, jos myös toisen osapuolen ohjelma on kirjoitettu Javalla ja luokat on määritelty samalla tavalla. Käytännössä näin voi olla yhden organisaation sisällä organisaation omaan käyttöön suunnitelluissa sovelluksissa.

WWW-sivujen ja CGI-skriptien (tms.) käyttöön perustuvat ratkaisut eivät kelpaa, koska tarkoituksena on juuri opettaa mistä osista tällainen ratkaisu koostuu ja miten suunnitellaan tätä "köyhän miehen pikaratkaisua" parempia tietoliikenneohjelmia.

Jäikö vielä epäselvää?

Kysy vaikka kurssin news-ryhmässä (klikkaa "keskustelua" webbisivun vasemmasta reunasta). Jos haluat kysyä incognito, käytä sähköpostia. Vastaus voi silloinkin tulla news-ryhmän välityksellä, mutta ilman kysyjän nimeä.