410 likes | 814 Views
Ohjelmistotekniikka: Ohjelmiston mallintaminen, osa II. Kevät 2002 Päivi Ovaska LTKK/Tite. Ohjelmointi(ohjelmisto) paradigmoja. proseduraalinen (Pascal, C) ohjelmassa määritellään toiminta - mitä tapahtuu - suoritus etenee sen mukaan tiedot määritellään "erillään" toiminnasta
E N D
Ohjelmistotekniikka:Ohjelmiston mallintaminen, osa II . Kevät 2002 Päivi Ovaska LTKK/Tite
Ohjelmointi(ohjelmisto) paradigmoja • proseduraalinen (Pascal, C) • ohjelmassa määritellään toiminta - mitä tapahtuu - suoritus etenee sen mukaan • tiedot määritellään "erillään" toiminnasta • funktionaalinen (Lisp) • ohjelma koostuu kokoelmasta funktioita • Funktiot kutsuvat toisiaan (usein sisäkkäin) • logiikka (Prolog) • ohjelmassa määritellään loogisia relaatioita • jos eläimellä on evät, niin eläin on kala • jos eläin on hauki, niin eläimellä on evät • Onko hauki kala? -> Kyllä! • olioperustainen (Smalltalk, C++, Java) • tiedot ja toiminta liitetään yhteen luokaksi Kullekin paradigmalle parhaiten sopivat mallinnusmenetelmät
Kuinka hahmotamme maailmaa oliopohjaisesti? • haluan lähettää kukkia ystävälleni naapurikaupunkiin • menen kukkakauppaan • pyydän toimittamaan kukat -> • pyyntö välitetään naapurikaupungin kukkakauppaan • siellä lähetti toimittaa kukat • sama oliokäsitteillä: • lähetän viestin kukkakauppias oliolle • hän hyväksyy ja osaa käsitellä viestin • tehtävä jää hänen vastuulleen • kukkakauppias toteuttaa viestin toimenpiteen (metodin) avulla • toteutus piilotettu minulta • hän lähettää viestin toiselle kukkakauppiaalle jne.
Olio-pohjainen ajattelu • olio-pohjainen ohjelmisto muodostuu joukosta keskenään kommunikoivia olioita • toiminta syntyy toisille olioille lähetetyistä viesteistä • viestin vastaanottanut olio toteuttaa sitä vastaavan toimenpiteen - metodin • lähettäjä ei tunne viestin toteutusta (tiedon piilottaminen) • "ohjelmoijan ei tarvitse itse tehdä kaikkea - hän voi hyödyntää valmiita komponentteja" • vastaanotetun viestin tulkinta vaihtelee, se riippuu vastaanottajasta ja hänen tilastaan • toiminta kuvataan vastuina • "älä mieti mitä itse osaat tehdä, vaan mitä muut voivat tarjota sinulle" • jokainen olio kuuluu johonkin luokkaan • luokka määrittelee metodit eli viestin jotka olio osaa käsitellä • luokan kaikki oliot käyttävät samoja metodeja • luokka määrittelee olion ominaisuudet eli attribuutit - olion tiedot • luokat muodostavat luokkahierarkian • aliluokka perii yliluokan attribuutit ja metodit • aliluokka voi peittää perimiään attribuutteja ja metodeja • vaikka oliot vastaanottavat saman viestin ne voivat toimia eri tavoin - tätä kutsutaan monimuotoisuudeksi
SA -menetelmä • Structured Analysis • Menetelmästä useita eri versioita • Yleisin käytetty proseduraalinen menetelmä • SD (Structured Desing) suunnitteluun (erittäin vähän käytössä) • SA/RT reaaliaikajärjestelmien mallintamiseen
Mallinnusvuo SA/RT-mallinnus Ydinmalli - järjestelmän tavoitteet - liittymäkaavio - tapahtumalista Ympäristömalli - tietovuokaaviot, minispeksit - käsitekaaviot - tilakaaviot - tietohakemisto Käyttäytymismalli Toteutusmalli - toteutuksen rajaaminen - käyttöliittymä - kaavioiden muokkaaminen toteutuskelpoisiksi - ei-toiminnaliset ominaisuudet - toteutukseen liittyvät virhetilanteet
Tietovuokaavioiden hierarkia • Ylimmällä tasolla järjetelmän toiminta kuvataan ns. liittymäkaaviolla (context diagram, yhteyskaavio, ympäristökaavio) • terminaattorit ja koko järjestelmä yhtenä transformaationa • Järjestelmätransformaatio kuvataan tarkemmin tason 1 tietovuokaaviolla, sen transformaatiot edelleen tason 2 tietovuokaaviolla, jne. • Pilkkominen alkaavioihin lopetetaan, kun transformaation on niin yksinkertainen, että sen toiminta voidaan kuvata minispesifikaatiolla (pseudokoodi, strukturoitu kulkukaavio, työnkulkukaavio)
Hierarkian toinen taso Alimman tason transformaatiot merkitään tähdellä
Hierarkian alin taso kuvataan minispekseillä Minispeksi 1: Tilauksen vastaanotto - Tilauksen vastaanotto tapahtuu puhelimitse tai faksilla. - Asiakkaan tiedot tarkastetaan asiakastietokannasta, tarvittaessa asiakastiedot syötetään. - Samalla tarkastetaan asiakkaan laskutustilanne. Jos asiakkaalla on hoitamattomia karhuja, ei tilausta oteta vastaan.
Järjestelmän tavoitteet KURREK-järjestelmä sisältää kuvaukset opintojaksoista, opettajista ja opintosuorituksista. Järjestelmä tuottaa kurssien osallistujalistoja, tenttien tuloslistoja ja opintosuoritusrekisteriotteita. Opettajat kirjaavat järjestelmän avulla opintosuoritukset rekisteriin. Opiskelijat pystyvät ilmoittautumaan kursseille ja tutkimaan omia suoritustietojaan.
Tapahtumalista 1) Ylläpitäjä päivittää opiskelijan tietoja (lisäys, poisto muutos). 2) Ylläpitäjä päivittää opintojakson tietoja. 3) Ylläpitäjä päivittää opettajan tietoja. 4) Opiskelija ilmoittautuu kurssille. 5) Opiskelija ilmoittautuu tenttiin. 6) Opiskelija osallistuu tenttiin. 7) Opettaja pyytää kurssin osallistujalistan. 8) Opettaja pyytää tentin osallistujalistan. 9) Opettaja kirjaa opintosuorituksen. 10) Opiskelija pyytää opintorekisteriotteen. 11) Laitoksen johtaja saa opintoviikkoyhteenvedon.
Lämpötilahistoriaa keräävän reaaliaikajärjestelmän tietovuokaavio
Kahvinkeittiminen tapahtumalista • Start-nappulan painallus • vesi loppuu • kannu pois • kannu takaisin (tyhja kannu tai ei-tyhjä kannu)
Tilakoneiden käyttömahdollisuuksia • Toiminnon kuvaaminen esim. algoritmin määrittely • Laitteiden ja prosessien toimnnan kuvaus (digitaalikello, matkapuhelin, pankkiautomaatti) • Järjestelmän elinkaaren mallintamiseen • Käyttöliittymien specifioinnissa
Tietohakemisto esimerkkejä henkilötiedot = nimi + @henkilötunnus + aviosääty + lapset nimi = 1{etunimi}3 + sukunimi aviosääty = [naimaton | naimisissa | eronnut | leski] osoite = (toimitusosoite) + (laskutusosoite) osoite = [toimitusosoite | laskutusosoite | toimitusosoite + laskutusosoite] osoite = toimitusosoite + (laskutusosoite) luottoraja = *asiakkaalle myönnettävän luoton enimmäismäärä markkoina* luottoraja_ilmoitus = *vastaus luottorajan muutosyritykseen* ["Tuntematon asiakas" | "Virheellinen luottoraja" | "Uudeksi luottorajaksi on muutettu xxx markkaa"]
Tietohakemisto esimerkkejä suoritustietokanta= * Relaatiokanta, joka kuvaa opiskelijat, kurssit ja suoritukset. Se koostuu tauluista opiskelijat, suoritukset ja opintojaksot.* opiskelijat = {@op_nro + nimi + osoite + ...} suoritukset = {@suor_nro + op_nro + oj_nro+ pvm + ov_määrä + arvosana + opettaja} opintojaksot ={@oj_nro+oj_nimi+kuvaus}
Muita tiedon rakenteen ja esitystavan määrittelytapoja • Merkkauskielet • HTML • SGML • XML (ja siihen liittyvät standardit: DTD, XML Schema) • ASN.1: tietoliikenteen sanomarakenteet • …
XML:n dokumenttityypin rakenteen määrittely: DTD (Document Type Definition). • Tiedon rakenteen kuvaaminen. <!DOCTYPE postitilaus [ <!ELEMENT postitilaus (vastaanottaja, tavara*) <!ELEMENT vastaanottaja (nimi, osoite)> <!ELEMENT tavara (nimeke, määrä, hinta)> <!ELEMENT nimi (#PCDATA)> <!ELEMENT osoite (#PCDATA)> <!ELEMENT nimeke (#PCDATA)> <!ELEMENT määrä (#PCDATA)> <!ELEMENT hinta (#PCDATA)>]>
XML-dokumentti <?xml version="1.0"?> <postitilaus> <vastaanottaja> <nimi>Ahto Simakuutio</nimi> <osoite>Hermiankatu 99, 33720 Tampere</osoite> </vastaanottaja> <tavarat> <tavara> <nimeke>Muistipiiri 256MX</nimeke> <maara>2</maara> <hinta>100</hinta> </tavara> <tavara> <nimeke>Nokia 9210</nimeke> <maara>1</maara> <hinta>6250</hinta> </tavara> </tavarat> </postitilaus>
… ja vastaava XML Schema • <xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema"> • <xsd:element name="postitilaus" type="tilaus"/> • <xsd:complexType name="tilaus"> • <xsd:element name="vastaanottaja" type="osoitetiedot"/> • <xsd:element name="tavarat" type="tavaroidentiedot"/> • </xsd:complexType> • <xsd:complexType name="osoitetiedot"> • <xsd:element name="nimi" type="xsd:string"/> • <xsd:element name=“osoite" type="xsd:string"/> • </xsd:complexType> • <xsd:complexType name="tavaroidentiedot"> • <xsd:element name="tavara" type="tavaratiedot" maxOccurs=“*"/> • </xsd:complexType> • <xsd:complexType name="tavaratiedot"> • <xsd:element name=“nimeke" type="xsd:string"/> • <xsd:element name="maara" type="xsd:positiveInteger"/> • <xsd:element name="hinta" type="xsd:decimal"/> • </xsd:complexType> • </xsd:schema>
UML (OMT++) vs. SA • Liittymäkaavio vs. käyttötapauskaavio. • Tapahtumalista vs. käyttötapaus vs. operaatio. • Tietovuokaavio vs. tapahtumasekvenssikaavioiden ja luokkakaavioiden käyttö. • UML (OMT++) oliopohjaiseen mallintamiseen • SA proseduraaliseen mallintamiseen sekä reaaliaikajärjestelmien mallintamiseen
Millä piirrät? • Jos et osaa paperilla ja kynällä ei välineestä ole apua. • CASE-välineet (Rational Rose, Prosa, Rhapsody…) • Hinta verraten korkea (10-50kmk). • Perustuvat tietokantaan, johon talletetaan kaikki malliin liittyvät tiedot, kaaviot ovat vain “näkymiä” tietokantaan. • “Ymmärtävät” kaavioiden semantiikkaa ainakin jossain määrin. • Reverse Engineering+Forward Engineering = Round Trip Engineering. • Tukevat dokumentointia (esim. Soda+Rose). • Demot ja pienet ohjelmaesimerkit antavat usein liian ruusuisen kuvan. • Raskaan sarjan käyttökokemuksia ei ole julkaistu (?). • Oppimiskynnys korkeahko. • Piirto-ohjelmat (Visio, ABCFlowcharter) • Hinta muutama KMK. • Ainakin Visiossa melko hyvä UML-tuki, lähestyy CASE-välineen ominaisuuksia. • Hyvä valinta, jos ei tarvitse CASE-välineen tietokannan tuomia lisäetuja. • Julkisohjelmiakin löytyy verkosta.