TIE-20200 Ohjelmistojen suunnittelu Luento 6: suunnittelua Samuel Lahtinen TIE-20200 Samuel Lahtinen 1
Ajankohtaista Harjoitustyö Protosessioita tällä viikolla
Ohjelmassa tänään Ohjelmistojen suunnittelujuttuja Hitunen UML-asioita
Ohjelmistojen suunnittelusta Mitkä asiat vaikuttavat ohjelmistojen suunnitteluun? Tekijät, osaaminen Toteutusympäristö Valittu ekosysteemi Avoimen lähdekoodin käyttö/avoimen lähdekoodin tuottaminen Työkalut, Kieli/paradigma Aikataulut, kulttuuri, taustat, koulutus, henkilökohtaiset mieltymykset jne.
Korkean tason suunnittelu Mikälainen korkeamman tason rakenne ohjelmalle tulee? Tehdäänkö jonkun olemassaolevan ympäristön päälle, käyttöjärjestelmät jne. Laitteistoläheisyys yms. minkälaisia abstraktioita käytetään? Tulevatko valmiina vai pitääkö toteuttaa MVC/jne., kerroksittainen rakenne, viestien lähettelyä jne. valinta ohjaa varsinaista ohjelman jatkosuunnittelua Usein suunnittelu tehdään useassa vaiheessa, korkean tason rakenne ja siihen liittyvät päätökset ja varsinainen toteutusläheisempi suunnittelu, rajapintojen suunnittelu, lopulta toteuttaminen Eri vaiheet tuottavat eri tason kuvauksia järjestelmästä ja eri tason dokumentaatiota
Yleistä suunnittelusta Dokumentoi myös miksi joku tekniikka, lähestymistapa jne. on valittu! Miksi käytetään vaikkapa tiettyä versiota, tiettyä tietokantaa, jossain on jonkinlainen tarkkailijaratkaisu jne.
Oliosuunnittelu Oliosuunnittelu, olio-pohjainen lähestymistapa Olio-ohjelmointi ja olio-jotain sanoina poissa muodista, eivät tihku tällä hetkellä erotiikkaa sun muuta Ei kuitenkaan kuollut ja kuopattu, vaan osa hyvää ohjelmistojen toteutuksen perustaa Hyvä väline abstraktioiden toteuttamisessa
Oliosuunnittelu Tavoitteena löytää oliot ja niiden vastuualueet, mitä joku olio tekee, tarjoaa muille olioille, mitä yhteyksiä sillä on muualle? Suunnitteluvaiheessa tarkat tietotyypit jne. eivät ole olennaisia
Mallintaminen olioilla TIE-20200 Samuel Lahtinen
Oliosuunnittelun vaiheita 1. Tunnistetaan/löydetään järjestelmän komponentit Substantiivien etsiminen (tarjoaa lähtökohdan) Määrittelystä Järjestelmän aihepiiristä 2. Määrittellään komponenttien vastuut (~verbit abstraktissa spesifikaatiossa) 3. Määritellään komponenttien väliset riippuvuudet, vastuiden kautta (mitä tarvitaan, että voidaan tarjota vastuiden mukainen toiminta) 4. Määritellään komponenttien todelliset rajapinnat toteutus, testaus
Luokkakaavioista Dependency/riippuvuus: heikoin suhde (esim. A käyttää B:tä jossakin jäsenfunktiossaan) Kooste(aggregation): Esimerkiksi joukkue koostuu pelaajista (tietty minimi- ja maksimimäärä, pelaaja voi vaihtaa joukkueesta toiseen. Muodoste (composition): rakennus-kerros, jäsenoliot (esim. henkilö ja syntymäaika) Koosteet, muodosteet, assosiaatiot voivat olla yksisuuntaisia tai kaksisuuntaisia.
Assosiaatiot ja nuolet 12
Lukumääräsuhteet Assosiaatiolla, koosteilla, muodostumisilla lukumääräsuhteet Kiinteä lukumääräsuhde kertoo vakiona pysyvästä suhteesta (esim. shakkilaudan ruudut, pelaajien määrä shakissa) Vaihtelevat lukumääräsuhteet, vaihteluväli esim. joukkueella pitää olla 11-20 pelaajaa. Pelaaja voi olla joko ilman joukkuetta tai kuulua yhteen joukkueeseen. Assosiaatioilla voi olla nimi Assosiaation päähän voi liittyä roolinimi
Mitä vikaa esimerkkikuvassa? TIE-20200 Samuel Lahtinen http://www.jot.fm/issues/issue_2004_11/column5/
tapahtumasekvenssikaaviot TIE-20200 Samuel Lahtinen
Esimerkki: Tehtävänänne on suunnitella alla kuvattu seikkailupeli käyttäen oliosuunnittelun jaloja periaatteita. Alla firmanne pomon yksityiskohtainen kuvaus pelin rakenteesta: Peli ois niinku seikkailupeli, jossa näkyis yläviistosta ku dynaaminen duo Batman ja Robin menee Kotham-sitissä. Ne niinku menis siellä kaupungissa taloihin joissa olisi sitten erilaisia huoneita ja käytäviä. Pelissä vois valita ohjaako Robinia vai Pätmäniä. Niillä sankareilla vois olla kaikkee siistiä lepakkokamaa: ajoneuvoja kuten lepakkoauto ja varusteita kuten lepakkokalsarit ja lepakkobumerangi. Sitten ois tietysti pahiksia kuten Jokeri, Hjallis ja niitten kätyrit. Pahiksillakin vois olla aseita. Aseilla voi joko kumauttaa tai tai sit tehdä pitkän matkan hyökkäyksiä. Otuksilla ja sankareilla olis näkökenttä, jonka sisällä ne reagois asioihin/jonka sisällä olevat jutut näkyis ruudulla. Batman ja Robin, Dynaaminen duo Pahiksia
Varsinainen tehtävä Kepap-keisari Pelin tavoitteena on rakentaa menestyvä pikaruokaimperiumi, joka nousee kaupungin kauneimmaksi ja komeimmaksi pitsa-kebab-ravintolaksi. Peliä voi pelata joko yksinpelinä, tekoälypelaajaa vastaan kisaten tai toista ihmispelaajaa vastaan. Pelimaailmana toimii kaupunkisimulaatio. Virtuaalisen kaupungin erilaisia rakennuksia ja paikkoja kansoittavat autenttisesti käyttäytyvät virtuaali-ihmiset. Kebab-ravintolat kisaavat hinnan ja tunnettavuuden avulla asiakkaista. Tunnettavuusarvo koskee koko ravintolaketjua, eli saman pelaajan kaikkia ravintoloita. Tätä voi kasvataa erilaisten markkinointitempausten avulla. Pelaaja voi ostaa uusia ravintoloita, hankkia raaka-aineita ravintolan tuottoksiin, palkata työntekijöitä, kiertää veroja, mainostaa eri tavoin yms. Erilaisia ruutuja: ravintolat, puistot, kaupat, asuinrakennukset jne. Niissä erilaista toiminnallisuutta sen mukaan onko asukas ruudussa, poistumassa siitä tai tulossa ruutuun. (Esimerkki: Asukkaat: erilaisia asukkaita, jotka tekevät pyrkivät tekemään eri asioita. (duunareita, bilettäjiä, verotarkastajia, terveystarkastajia, koodareita jne.) Esim. duunari, pyrkii tekemään käymään viikot töissä, lounaalla parhaassa työpaikan läheltä löytyvässä ruokapaikassa ja viikonloppuna anniskeluravintolassa ja sen jälkeen kebabilla. Suunnittele pelin korkean tason rakenne ja mieti, miten toteuttaisit erilaisten ruutujen, asukkaiden jne. toiminnan.
Ohjeistus Hae ensin järjestelmän oliot Mieti tämän jälkeen olioille vastuualueita Karsi pois olioista ne, joille ei tule varsinaista toiminnallisuutta, jätä ne abstraktioiksi (ovat myös hyödyllisiä) Tarviiko kyseinen oli jotain muita olioita toiminnoissan/vastuissaan? Jos tarvii, dokumentoi vaaditut yhteydet & miksi. Jos tarvittavaa palvelua ei ole, lisää sellainen tai luo tarvittaessa uusia olioitakin. Konkretisointi
Yhteenveto Opittiin keinoja suunnittelun alkuvaiheeseen TIE-20200 Samuel Lahtinen 19