Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen tilasta pitäisi pystyä antamaan erilaisia näkymiä Käyttöliittymän pitäisi välittömästi heijastaa sovelluksen tilan muutoksia Käyttöliittymää pitäisi olla helppo muuttaa Sovellus pitäisi voida kohtuullisella työllä siirtää toiselle graafiselle alustalle 1
Perusajatus komento vaste Ohjain Näkymä sovelluksen toiminto Malli sovelluksen tilan muutos 2
Esimerkiksi Näkymä TextField Sovelluslogiikka Button Malli Ohjain 3
Vastuut Malli Tarjoaa sovellukseen liittyvät loogiset toiminnot ja tiedot Rekisteröi sovelluksen tilasta kiinnostuneet näkymäkomponentit Ilmoittaa rekisteröityneille komponenteille tilan muutoksista Näkymä Huolehtii sovelluksen tilan näyttämisestä näytöllä Ohjain Ottaa vastaan käyttäjän komentoja Muuntaa komennot sovelluksen toiminnoiksi 4
MVC malli Observer Model update() * update() attach(observer) detach(observer) notify() getdata() service() attach() getdata() View initialize(model) makecontroller() activate() display() update() Controller initialize(model,view) handleevent() update() attach() service() 5
MVC vuorovaikutus Controller Model View handle- Event service suorita toiminto notify update getdata display 6
Kerroksittainen MVC (MVC++) (Esim. verkonhallintasovellukset) Näkymä Käyttäjän komennot Toiminto pyynnöt Ohjain Sovelluslogiikka Model Sovellusaluelogiikka Näytä tulokset Tuota tulokset 7
MVC:n edut ja ongelmat Etuja Helppo toteuttaa useita näkymiä samaan tietoon Kaikki näkymät ovat automaattisesti synkronoituja Uusia näkymiä voidaan ajoaikana liittää järjestelmään Käyttöliittymän ulkoasu suhteellisen helposti vaihdettavissa Ongelmia Mahdollisesti turhia näkymien päivityskutsuja Mallidatan kyselyt voivat lisätä suoritusaikaa 8
Tulkkiarkkitehtuurit tarve antaa toiminnallisia kuvauksia syötteenä järjestelmälle tarve yhdistellä primitiivisia toimintoja eri tavoin, jotka eivät ole tiedossa etukäteen tarve erottaa looginen, abstrakti suoritusalusta konkreettisesta (esim. jälkimmäisen vaihtamisen helpottamiseksi) 9
Tulkkiarkkitehtuurin perusidea toimintakuvauksen sisäinen esitys Tuloste Jokin toiminnallinen kuvaus (teksti, XML, ym.) Tulkki kutsuu Konkreettinen suoritusalusta noudattaa 1 toteutus 2 Syöte Kielen määritys 10
Esimerkki 1: Java käännös toimintakuvauksen sisäinen esitys Tavukoodi Ohjelman tulokset Java-ohjelma JVM (C-ohj) kutsuu Suoritusalusta (C ympäristö) noudattaa toteutus Ohjelman syöte Javan määritys 11
Esimerkki 2: SQL DBMS SQL-kysely SQLtulkki Tietokanta Kyselyn tulos Sovellus 12
Esimerkki 3: Taulukkolaskenta Laskettu taulukko Taulukkoskripti Skriptitulkki Taulukkolaskenta noudattaa toteutus Taulukon alkion arvo Skriptikielen määritys 13
Esimerkki 4: DSL + alusta toimintakuvauksen sisäinen esitys Tuloste Sovelluksen kuvaus DSL-kielellä Tulkki kutsuu API Alusta noudattaa toteutus Syöte DSL-kielen määritys DSL = Domain-Specific Language 14
Tulkin suunnittelu: Tulkki-suunnittelumalli Ongelma: miten esittää tulkittava ohjelma olioina? Ratkaisu: Tulkki-suunnittelumalli (Interpreter) Interpreter AbstractStruct interpret(rep) * TerminalStruct interpret(rep) CompositeStruct interpret(rep) 15
Tulkki-suunnittelumallin johtaminen: Kielen rakenteiden esitys luokkina Ongelma: Miten esittää kielen rakenteet luokkina? Esimerkiksi: Script ::= "SCRIPT" Action {";" Action} "END" Action ::= CondAction PrimAction CondAction ::= "IF" Expr "THEN" Action "END" PrimAction ::= identifier "(" Expr ")" (jonkin primitiivioperaation kutsu) Expr ::=... Luokkamalli? 16
Välisymbolit ja rakenteiset loppusymbolit esitetää ään n luokkina Esimerkiksi: Script, Action, PrimAction, CondAction, Expr, identifier => luokkia Ei-rakenteiset loppusymbolit (avainsanat, erikoismerkit ym.): SCRIPT END IF THEN ; ( ) Näitä tarvitaan vain jäsennyksen (ja lukemisen) tueksi, eivät olennaisia 17
Mitä tuotossää ääntö merkitsee luokkien kannalta? Ehdotus: Tuotossääntö merkitsee sitä, että oikean puolen luokat ovat osa-suhteessa vasemman puolen luokkiin. A ::= B C tarkoittaa: OK, mutta entä A ::= B C D E? A 1 1 B C 0..1 A 0..1 0..1 0..1 B C D E Ei hyvä... 18
Vaihtoehtoiset rakenteet aliluokiksi A ::= B C D E => A ::= A1 A2 A1 ::= B C A2 ::= D E A A1 A2 B C D E 19
Script interpret() Esimerkki Action * interpret() 1 MOT CondAction PrimAction Expr interpret() interpret() 1 1 val(): float 1 Identifier name(): String 20
Tulkkiarkkitehtuurin edut ja ongelmat Edut: Ajoaikainen suoritusympäristö omassa hallinnassa Tulkittavaa kieltä suhteellisen helppo muuttaa Kielen merkitystä suhteellisen helppo muuttaa Suoritusympäristö voidaan helposti vaihtaa Ongelmat: Suorituskyky (epäsuora, ei-natiivi suoritus; sisäisen esityksen muodostaminen) Tilankäyttö (ohjelman sisäinen esitys voi vaatia paljon tilaa) 21