Ohjelmistojen mallintaminen (Avoin yliopisto)

582104
5
Software Systems
Basic studies
Kurssilla käsitellään ohjelmistojen ja järjestelmien määrittelyä ja kuvaamista, kuvauksissa yleisesti käytettäviä tekniikoita ja tekniikoiden pohjalla olevia käsityksiä sekä erilaisten kuvausten asemaa ohjelmiston kehittämisessä. Tekniikoiden osalta pääpaino on UML-mallinnuskielessä. Esitiedot: ohjelmointitaito, oliokäsitteistön hallinta (Ohjelmoinnin perusteet).
Year Semester Date Period Language In charge
2011 summer 02.08-25.08. 6-6 Finnish Arto Hellas

Lectures

Time Room Lecturer Date
Tue 16-19 CK112 Arto Vihavainen 02.08.2011-25.08.2011
Thu 16-19 CK112 Arto Vihavainen 02.08.2011-25.08.2011

Exercise groups

Group: 1
Time Room Instructor Date Observe
Fri 14-16 B221 Matti Seise 05.08.2011—02.09.2011
Group: 2
Time Room Instructor Date Observe
Fri 16-18 B221 Matti Seise 05.08.2011—02.09.2011

General

Kurssi on tietojenkäsittelytieteen pääaineopiskelijoiden ja sivuaineopiskelijoiden perusopintoihin sisältyvä pakollinen 4 opintopisteen opintojakso. Kurssilla käsitellään ohjelmistoihin ja niiden kehittämiseen liittyvää käsitteistöä ja välineitä, erityisesti ohjelmiston rakenteen ja toiminnan määrittelyä ja kuvaamista. Keskeisenä asemassa on UML-mallinnuskieli ja sen soveltaminen.

Completing the course

Kurssiin liittyy yksi koe, joka järjestetään la 10.9.2011 9.00-12.  Katso tenttipaikka Avoimen yliopiston tenttipaikat-sivustolta.

Koko kurssin arvostelun maksimipistemäärä on 36. Kokeen maksimipistemäärä on 28 ja harjoitusten 8. Kurssin läpipääsy edellyttää vähintään puolta koepisteistä ja puolta kokonaispistemäärästä.

Kokeesta järjestetään uusintakuulustelut ke 19.10.2011 klo 17-20, ja ma 28.11.2011 klo 17-20.

Lauantaina 10.9.2011 järjestetyn kurssikokeen tulokset

Lauantaina 10.9. järjestetty kurssikoe on tarkistettu. Tuloksiin pääsee lähettämällä kyselylomakkeen, joka kyselee lunttilapun käytöstä tenttiin valmistautumisessa. Jos et käyttänyt lunttilappua, voit lähettää lomakkeen myös tyhjänä. Lomake jonka lähettämällä pääsee kurssikokeen tuloksiin löytyy osoitteesta: https://elomake.helsinki.fi/lomakkeet/29803/lomake.html

Listaa voi käyttää myös laskuharjoituspisteiden tarkastamiseen. Tuloslistan vasemmanpuoleisin sarake sisältää sukunimen kaksi ensimmäistä kirjainta ja etunimen ensimmäisen kirjaimen.

Palautetilaisuus

Ensimmäiseen kurssikokeeseen liittyvä palautetilaisuus järjestetään torstaina 29.9. Exactumissa kello 18, luokkana on C221. Palautetilaisuudessa käydään läpi kurssikoe, on mahdollista nähdä oma koe, ja tutustua arvosteluperusteisiin. Ilmoittaudu palautetilaisuuteen sähköpostitse.

Literature and material

Kurssin ensisijaisena materiaalina käytetään Matti Luukkaisen ja Harri Laineen Ohjelmistojen mallintaminen-luentomonistetta, sekä luentokalvoja joita lisätään tänne kurssin edetessä. Luentomoniste löytyy tämän linkin takaa.

Opiskelun tukena voi käyttää esim. seuraavia kirjoja (kurssilla pärjää hyvin myös ilman kirjaa):

  • Craig Larman: Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development. Kolmas painos.
  • Martin Fowler: UML Distilled: A Brief Guide to the Standard Object Modeling Language. Kolmas painos.

Verkosta löytyy paljon vaihtelevatasoista UML-materiaalia.

Luennoilla on puhuttu UML:n lisäksi hieman testaamisesta. Verkosta löytyy paljon materiaalia testaamiseen liittyen, alla muutamia linkkejä.

Luentokalvot

  • Yleistä (2.8.): ODP PDF
  • Johdanto (2.8.): ODP PDF
  • Vaatimusmäärittely ja käyttötapaukset (2.8., 4.8.): ODP PDF
    • Luennolla mainittu Alistair Cockburnin käyttötapausmalli PDF
  • Luokka- ja oliokaaviot (4.8.): ODP PDF
  • Luokka- ja oliokaaviot jatkuu (4.8. ja 9.8.): ODP PDF
  • Yksikkötestaamisesta ja TDD:stä (9.8. ja 11.8.): ODP PDF
  • Torstain 11.8. luennolla pariohjelmointina luotu verkkokauppaesimerkki (NetBeans-projekti): ZIP
  • Luokka- ja oliokaaviot jatkuu (9.8.  ja 16.8.): ODP PDF
  • Olioiden yhteistyön mallintaminen: sekvenssikaavio ja kommunikaatiokaavio (9.8. ja 16.8.): ODP PDF
  • Takaisinmallinnus sekvenssikaavioiden avulla, yleistäminen ja erikoistaminen, rajapinnat ja oliosuunnittelun periaatteita (16.8. ja 18.8.): ODP PDF 
  • Lisää oliosuunnittelusta ja sananen oliomenetelmistä (18.8.): ODP PDF
  • Refaktoroinnista ja arkkitehtuurista (18.8., 23.8. ja 25.8.): ODP PDF
  • Ohjelmistojen mallintamisen ja tietokantojen perusteet (23.8.): PDF
  • Kertausta ja hieman muuta (25.8.): ODP PDF
     

Laskuharjoitustehtävät

Laskuharjoituksissa läpikäydyt kalvot

Usein kysyttyjä kysymyksiä, kurssilta kuultua palautetta sekä vastapalautetta

  • Olisi mukavaa jos palaute (ja vastapalaute) olisi julkista!
    • Arto: Olisi pitänyt ajatella aiemmin, mainio ajatus!
  • "Huh, onpas tässä paljon tekemistä"
    • Arto: Normaalilla kuusi (tai seitsemän) viikkoa kestävällä ohjelmistojen mallintaminen-kurssilla valitellaan samaa :). Nyt kurssi on tarkoitus suorittaa noin neljässä viikossa, luonnollisesti siten että kurssilta ei jätetä sisältöä pois -- avoimessa yliopistossa suoritetut opinnothan hyväksytään normaaleina tietojenkäsittelytieteen opintoina.
      Uskon itse että ainakin käsiteanalyysitehtävät tuntuvat työläiltä, jo pelkästään luettavan tekstin määrän takia -- on aina paljon mukavampaa laittaa sormet heti saveen ja alkaa tekemään. Lisää haastetta kurssille tuo myös se, että kesällä ohjelmointikursseille osallistumisesta (tai ohjelmoinnista yleensäottaen) saattaa olla helposti muutama kuukausi, vaikka käytännössä kurssilla pohditaan ohjelmien rakentumista ja niiden suorituksen kuvaamista. Kuulen mielelläni lisää asioista jotka tuntuvat työläiltä.
      Jos jotkut tehtävät ovat liian vaikean tuntuisia (ei siis työläitä, vaan vaikeita), kuulen siitä myös hyvin mielelläni.
  • Seise: Huh, onpas paljon tekemistä laskareissa, kiirettä pitää eikä oikein ehdi käydä kaikkea läpi!
    • Arto: Sori! Koitan saada ensi kurssille 3 tuntia kestävät laskariryhmät -- en juurikaan pystynyt vaikuttamaan tämän kurssin järjestelyihin. Kolmen tunnin laskariryhmissä ehtii treenaamaan mallinnusta myös ryhmässä, joka itsessään on mainio harjoite.
  • Testaustehtävät on mukavia!
    • Arto: Kiitti! Testien kirjoittaminen ennen koodin kirjoittamista on myös mainio tapa treenata ohjelman pilkkomista pieniin osiin. Hajoita ja hallitse!
      • ...mutta ohjelmointitaitoni taitavat olla liian huteralla pohjalla -- en siis viitsi lähteä tekemään niitä.
        • Arto: Höh :(. Pyrin löytämään sopivan tasapainon kurssille. Käy vastaamassa kysymykseen "Olisiko kurssin alussa pitänyt olla enemmän ohjelmointitehtäviä?"  tämän linkin takana.
  • Seise: Eräs opiskelijoista näytti laskareissa tällaisen työkalun sekvenssikaavioiden piirtämiseen: http://www.websequencediagrams.com/
  • Tehtävänannot olivat hieman epäselviä kolmoslaskareissa, kurssimateriaalia ei löytynyt kurssin web-sivuilta kunnolla.
    • Arto: Pahoittelut! Lisäsin "Luentomoniste löytyy tämän linkin takaa."-tekstin luentomateriaalin mainitsevaan kappaleeseen.
  • Kolmoslaskarien tehtävässä kaksi sanamuoto oli hieman epäselvä: "Kuvaa" ja "Kuvaile" ovat eri asioita.
    • Arto: Epäilen että tämä liittyi ainakin osittain tuohon edelliseen kohtaan, eli kurssimateriaalia ei ollut löytynyt. Hain termit wiktionarystä: Kuvaa ja Kuvailla (termiä "Kuvaile" ei löytynyt suoraan), enkä ole ihan varma vieläkään että "Kuvaile" olisi parempi. Tehtävien teko ei ole aina helppoa, tsemppaan! :).
  • Testauksesta pitäisi puhua muillakin kursseilla, erityisesti ohjelmointikurssilla. Tuntuu oudolta että ensimmäiset askeleet testaukseen käydään ohjelmistojen mallintaminen-nimisellä kurssilla.
    • Arto: Olen ehdottomasti samaa mieltä, haasteena tässä lienee se, että kukin luennoitsija ja kurssin vastuuhenkilö tekee ohjelmointikurssista hieman omannäköisensä. Tietojenkäsittelytieteen laitoksen henkilökunnan voi hieman kärjistäen jakaa kahteen ryhmään: Algoritmeja ja pieniä ohjelmia painottaviin, ja ohjelmistojen rakenteen ja olioiden yhteistyön ymmärtämistä painottaviin. Algoritmikot yleensä todistavat ohjelmansa aiemmin jo matemaattisesti, eivätkä pidä testausta niin oleellisena.  Heille on myös hyvin yleistä se, että toteutetaan vain joku yksi erillinen asia -- algoritmi, jolloin ns. ison järjestelmän yhtenäinen toiminta ei ole oleellisessa roolissa.  Ohjelmistoja ja järjestelmän rakennetta painottavat taas taitavat ajatella ohjelmiston elinkaarta pidempänä jatkumona, jolloin ylläpidettävyys ja testattavuus on isommassa roolissa. Tällä kurssillakin tutuksi tulleet oliosuunnittelun periaatteet, sekä tietenkin abstraktiot ja testaaminen, ovat hyvin oleellisia.  Luennollakin on nähty että jos yhtä järjestelmän komponenttia muuttaa, voi joku erillinen -- komponenttia välillisesti käyttävä osa -- hajota samalla.  Automaattiset testit (ja järkevä ohjelmiston rakenne ;)) auttavat huomattavasti näiden virheiden huomaamisessa.
  • Jos huomattava osa tietojenkäsittelijöistä päätyy jossain vaiheessa elämäänsä toteuttamaan isompia ohjelmistoja, miksi emme tutustuneet näihin asioihin perusohjelmointikursseilla?
    • Arto: kts. yllä.
  • Aina puhutaan siitä että tieto ja toiminnallisuus pitäisi erottaa toisistaan, mitä tämä oikeastaan tarkoittaa?
    • Arto: Tiistaina 23.8. tulee aiheesta esimerkki :) -- Edit: Esimerkki ei mennyt ihan putkeen "pienen" demoefektin takia. Tarkoitus oli luoda sovellus, jossa käsitenalyysin tuotoksena saadut tallennettavat oliot kytketään tietokantaan ORM-rajapintaa käyttäen. Luennolla keskusteltiin mm. kerrostetusta arkkitehtuurista, esimerkiksi web-sovellukset rakennetaan usein siten, että käyttöliittymässä tehdyt pyynnöt menevät kontrollikerrokselle, kontrollikerros päättää mille palvelulle pyyntö kuuluu -- ja ohjaa pyynnön oikeaan suuntaan. Palvelut taas tietävät muunmuassa tallennuspalveluista (tietokantarajapinnoista) ja mahdollisista muista palveluista (esimerkiksi kolmannen osapuolen tarjoamat palvelut). Kukin kerros abstrahoi alla olevaa toimintaa, eikä käyttöliittymän tarvitse tietää muuta kuin osoitteet joihin pyynnöt lähetetään. Kontrollikerros taas tietää vain palveluiden rajapinnat -- ja palvelut taas tietävät niiden alla toimivat rajapinnat. Tieto kulkee tallennettavina olioina, ja toiminnallisuus on muunmuassa viestien välitystä ja erilaisia algoritmisia toimintoja. Pienimuotoinen -- ehkä jo hieman vanhentunut -- opas tietokantasovellusten tekemisen aloittamiseen JPA-tallennusrajapinnan avulla avulla löytyy tätä linkkiä klikkaamalla.
  • Seise: Voiko rajapintaan liittyä toisia rajapintoja?
    • Arto: Rajapinta voi periä toisen rajapinnan (tai useamman rajapinnan), mutta rajapinnat itsessään eivät sisällä mitään muuta kuin metodimäärittelyt -- eli toiminnallisuuden hyvin abstraktin kuvauksen. Toisaalta, normaaleihin ja abstrakteihin luokkiin voi liittyä joukko rajapintoja, sillä normaalit ja abstraktit luokat voivat sisältää myös rakennemäärittelyjä.
  • Seise: Jos rajapinta perii rajapinnan, ei kai siihen tule merkitä osallistumisrajoitteita?
    • Arto: Oikeassa olet, kun luokka (rajapintakin on luokka!) perii toisen luokan, ei osallistumisrajoitteita merkitä. Tämä johtuu siitä että perintään liittyvät rajoitteet ovat aina tiedossa. Lukijalle kysymys: Miksi näin on?