olutkaupan luokkakaavio - mluukkai/OTM2012 GitHub Wiki
Alla oleva kuva ei ole missään nimessä ainoa mahdollinen oikea vastaus. Erityisesti muutamien yhteyksien osallistumisrajoitusten olisi voitu tehdä myös toisin. Alla hieman selitystä.
Luokka Kauppa rooli on olla “laatikko johon kaikki muut ripustetaan”. Käuppa ei sinänsä ole välttämätön, mutta se selkeyttää muuta kaavioita:
- kaupalla on varasto
- kauppaan liittyy ostsotapahtumia
- kauppa käyttää postitusjärjestelmän ja luottokunnan rajapintoja
Ilmeisiä luokkia ovat Asiakas, Ostoskori ja Tuote. Luokka Varasto ajatellaan tässä siksi entiteetiksi joka on vastuussa yksittäisten tavaroiden säilömisestä ja hallinnoinnista.
On oletettu että kullakin asiakkaalla on vain yksi ostoskori. Voitaisiin toki olettaa että koreja olisi useita.
Ostoskoriin ei laiteta suoraan tuotteita, Tuote-olion oletetaan edustavat kaikkia tietynmerkkisiä yksittäisiä varastossa olevia pulloja/tölkkejä, tuotehan pitää kirjaa kyseisen tuotteen varastosaldosta.
Jos käyttäjä lisää ostoskoriin esim Lapin kullan, menee ostoskoriin Ostos-olio, joka tietää mihin tuotteeseen ostos liittyy ja kuinka monta kyseistä tuotetta korissa on.
Luokka Ostos ei suoraan ilmennyt tekstuaalisesta kuvauksesta. Hyvin usein onkin tilanne, että mallin tarkempi analyysi paljastaa tälläisiä “rivien välissä” olevia luokkia.
Ostostapahtumalla tarkoitetaan tietoa jonka Kauppa tallentaa kustakin erillisestä ostoksesta. Ostostapahtumaan liittyy Asiakas jonka ostoksesta on kyse sekä ostokset mitä kyseisessä tapahtumassa ostettiin.
Ostostapahtumaoliot siis tallettavat kaupan maksujen ja toimitusten “historian”.
Kaikki luokkakaavion yhteydet (poislukien kaupan riippuvuudet ulkoisten järjestelmien rajapintoihin) kuvaavat pysyväluontoisia yhteyksiä:
- asiakkaalla on ostoskori
- ostoskori sisältää ostoksia
- ostostapahtumaan liittyy asiaksa ja ostoksia
- ostokseen liittyy tuote
- kauppa tuntee ostostapahtumat
- kaupalla on varasto
- varastossa on tuotteita
Mitään tekemiseen liittyvää ei kuvata määrittelyvaiheen luokkakaaviossa. Esim se että asiakas valitsee tuotteen ei ole määrittelyvaiheen luokkakaaviossa ilmaistava asia.
Itseasiassa luokan Asiakas-oliot eivät kuvaa asiakasta itseään vaan asiakkaan representaatiota järjestelmän sisällä. Asiakas-oliot eivät siis ohjelmatoteutuksessa lisää tuotteita ostoskoriin, vaan ostoksien tekemisestä tulee huolehtimaan joku muu olio (jota ei todennäköisesti edes ole olemassa määrittelyvaiheen luokkakaaviossa).
Mallissa ei ole ollenkaan luokkaa Ylläpitäjä vaikka tekstuaalinen kuvaus puhui paljon ylläpitäjän käyttämästaä hallintasivusta ja ylläpitäjän toiminnasta. Hallintasivukaan ei näy kaaviossa millään tavalla. Ylläpitäjän toiminnallisuus liittyy Ostostapahtuma\- ja Tuote-olioiden käyttöön. Vasta suunnitteluvaiheessa lisätään olioita jotka huolehtivat ylläpitäjän toiminnallisuuden toteuttamisesta.