Vaihe 3 - Suunnittelu I - staattinen mallintaminen
Edellisissä vaiheissa on tarkasteltu pääasiassa järjestelmän
rakenteellisia ominaisuuksia. Näkemys on esitetty analyysivaiheen
luokkakaaviona ja tekstikuvauksina. Kolmannen ja neljännen vaiheen
tarkoituksena on tuottaa kuvauksia järjestelmän käyttäytymisestä ja
täydentää järjestelmän rakenteellinen kuvaus suunnitteluvaiheen
luokkakaavioilla. Dynaaminen kuvaus esitetään sekvenssi- ja
tilakaavioina. Nykyisissä oliopohjaisissa menetelmissä järjestelmän
kehitysprosessi on useimmiten luonteeltaan iteratiivinen (ts.
vaiheet toteutetaan sykleinä, sarjoina peräkkäisiä
"minivesiputouksia") ja inkrementaalinen (so. kuvauksia
täydennetään ja tarkennetaan jokaisessa iteraatiossa). Tähän
pyritään myös kolmannen ja neljännen vaiheen ohjauksissa.
Analyysivaiheen luokkakaaviossa on kuvattu pääasiallisesti liiketoimintaluokkia. Suunnitteluvaiheen luokkakaaviossa esitetään liiketoimintaluokkien lisäksi myös tärkeimmät käyttöliittymä- ja ohjausluokat. Täydennetään luokkakaaviota tarvittaessa myös uusilla liiketoimintaluokilla ja assosiaatioilla.
Tehtävät
- Piirrä analyysivaiheen luokkakaavion pohjalta suunnitteluvaiheen luokkakaavio. Täydennä/osita käyttöliittymä- ja ohjausluokkia ja lisää luokkiin operaatioita. Vastaavia muutoksia / täydennyksiä ei tehdä analyysivaiheen kuvauksiin.
- Määritä luokkakaavion keskeisimpien luokkien vastuut
CRC-korttien
avulla.
- Täydennä luokkakaaviota myös assosiaatioiden toteutuksen osalta: lisää viitearvoiset attribuutit, taulukkotyyppiset viiteattribuutit tai mahdolliset säiliöluokat.
- Ryhmittele luokat paketteihin. Käyttämästäsi työkalusta riippuen varsinaisia pakettisymboleja ei tarvitse välttämättä käyttää, kunhan pakettirakenne käy selville luokkien asettelusta tai kommenttimerkinnöistä. Laajemmilla järjestelmillä voit vaihtoehtoisesti piirtää eri paketeille omat luokkakaaviot.
Vinkkejä
- Hyödynnä analyysivaiheen yhteistoimintakaaviota ja CRC-kortteja määritellessäsi metodeja luokkiin. Voit käyttää esim. seuraavaa CRC-korttipohjaa (html, doc, odt).
- Ohjeita suunnitteluvaiheen luokkakaavion laadintaan:
-
- Abstrahoidut käyttöliittymää ja ohjainta kuvaavat luokat tulee osittaa erillisiin luokkiin (huom. käyttöliittymäluokista ei tarvitse erotella esim. yksittäisiä ikkunoita tai niiden komponentteja). Tarkastele tätä varten vaatimusmäärittelyä (=aiheen kuvaus), käyttötapauskuvauksia ja yhteistoimintakaavioita:
-
- Millaisten laitteiden avulla käyttäjä vuorovaikuttaa järjestelmän kanssa, voiko käyttöliittymää osittaa käyttäjien mukaan eli tarjota eri käyttäjille eri tapoja vaikuttaa järjestelmän kanssa, voiko käyttöliittymää osittaa järjestelmän tarjoamien palvelujen mukaan eli yksi käyttöliittymän osa tarjoaa yhden palvelun?
- Voiko ohjaimia jaotella palvelemaan eri aktoreita, tai määrätä eri ohjaimia hoitamaan eri järjestelmän toimintojen (= käyttötapausten) mukaista sovelluslogiikkaa?
- Assosiaatioiden toteutus (ks. luentomonisteen kohta 5.2.5, detailed design -luentokalvot, malliharjoitustyö, demojen 6 vastaukset sekä luennont 17 tiivistelmä):
-
- Yhden-suhde-yhteen assosiaatio: Jos viestintä tapahtuu vain toiseen suuntaan, määrittele lähettävälle luokalle viitearvoinen attribuutti, joka sisältää vastaanottavan olion viitteen (esim. nide_ref). Jos viestitään molempiin suuntiin, määrittele viiteattribuutti molempiin luokkiin.
- Yhden-suhde-moneen assosiaatio: Tässä luokan A mukainen olio
voi olla kytketty useampaan luokan B mukaiseen olioon, mutta B:n
mukainen olio vain yhteen A:n mukaiseen olioon. Toteuta siten, että
määrittele luokkaan A taulukko- tai kokoelmatyyppinen (Collection,
ArrayList jne) viiteattribuutti joka sisältää viitteitä B:n
mukaisiin olioihin TAI määrittele erillinen "säiliöluokka"
(Collection), jonka mukaiseen olioon tallennetaan viitteet -
tällöin luokaan A tulee määritellä viite luotuun säiliöluokkaan
(esim. AsiakasSäiliö tai pikemminkin Asiakkaat). Voit myös käyttää
jotain valmista luokkakirjastoa (esim.
Java Collections Framework tai C++:n Standard Template
Libraryn säiliöluokat) tietorakenteen toteutukseen.
- Monen-suhde-moneen assosiaatio: Tässä luokan A mukainen olio voi olla kytketty useampaan luokan B mukaiseen olioon, ja B:n mukainen olio useaan A:n mukaiseen olioon. Toteutus kuten edellä TAI kahdella säiliöluokalla (ks. luentomonisten kuva 5.39).
- Järjestelmän käyttötarkoituksesta riippuen luokkiin voi edelleen olla tarvetta lisätä liiketoimintaluokkien hakuihin ja päivityksiin liittyviä yleisiä operaatioita (lisää, hae, muokkaa,..).
- Pakettirakenne on pohja järjestelmän arkkitehtuurille ja
komponenteille. Pohdi, miten eri paketeissa olevien luokkien
keskinäinen kommunikointi saadaan mahdollisimman
selkeäksi.
