1
Tietorakenteet kevät 2002 |
Harjoitustyö Tekninen määrittely |
Jukka Salminen i79947 |
Tämä tekninen määrittely liittyy MDBase-ohjelman version 0.1 toteutukseen. Tässä teknisessä määrittelyssä laajennetaan MDBase-sovelluksen toiminnallisen määrittelyn ratkaisut teknisiksi ratkaisuiksi.
Toteutetaan sovellus toiminnallisen määrittelyn mukaisesti hyödyntäen Javan valmiita luokkia. Osittain hyödynnetään myös Internetistä löytyvää valmista koodia. Käyttöliittymän luokat toteutetaan perimällä Java Swing-pakkaukseen kuuluvista luokista. Tietokantaohjelma toteutetaan XXL-luokkakirjaston avulla ja tietokannan järjestämisessä käytetään ICU-luokkakirjastoa.
Kuvassa 4. on kuvattu käyttöliittymän toteuttavat luokat.
Omien luokkien kantaluokat ovat seuraavat:
ButtonAction => JSAction => AbstractAction | TextFieldAction => AbstractAction |
XXLTable => javax.swing.table.JTable | PagingTableModel => javax.swing.table.AbstractTableModel |
Kuvassa 3. oleva käyttöliittymän toiminnallisuus on toteutettu seuraavasti:
Napit Nästa sida ja Föregående sida ovat JButton-luokan olioita. Niissä on tapahtumakuuntelijana ButtonAction-luokan objekti. Kun nappia painetaan, siirtyy tapahtuma ButtonAction-oliolle. Tällä objektilla on viittaus XXLTable-luokan objektiin ja edelleen sen PagingTableModel-objektiin, jonka metodia next() kutsutaan.
2
Harjoitustyö Tekninen määrittely |
Tietorakenteet kevät 2002 |
Jukka Salminen i79947 |
---|
Sovelluksen kulloinkin näkyvä data on luokan PagingTableModelin kaksiulotteisessa datavektorissa. Kulloinkin näkyvää tietomäärää on rajoitettava jotta kerralla näkyvien rivien määrä ei olisi kohtuuttoman suuri. Tässä ohjelmassa käytetään hyväksi XXL-tietokantakirjaston indeksointia, joka tukee aluellisia hakuja. Haku perustuu aina sukunimeen ja siihen voidaan liittää lisäehtoja (predikaatteja), joilla näytettäviä tietoja voi edelleen rajata.
Koska sukunimet ovat tietystä merkistöstä (tässä ohjelmaversiossa länsimainen merkistö) muodostettuja merkkijonoja, voidaan ne aina asettaa aakkosjärjestykseen. Tähän aakkosjärjestykseen perustuen voidaan kaikkien sukunimien joukko partitioida niin, että tietty yksittäinen nimi kuuluu aina vain yhteen partitioon. Partitioinnissa käytetään apuna seuraavia seikkoja:
Alue muodostetaan siten, että käydään järjestyksessä läpi kahta listaa. Ensin valitaan etukirjain listalta A. Siihen lisätään seuraavana järjestyksessä oleva kirjain listalta B. Näiden kahden merkin muodostamaan merkkijonoon lisätään lopuksi merkistön ensimmäinen symboli (tässä tapauksessa välilyönti. Näin saadaan alueen alkua rajoittava merkkijono. Jos listalla B on merkkejä jäljellä, tehdään alueen loppupistettä rajaava merkkijono pitämällä etukirjain ennallaan ja lisäämällä siihen seuraava B-listalla vastaan tuleva merkki. Lopuksi lisätään vielä aakkoston viimeinen merkki (tässä tapauksessa kirjain ö). Näin saadaan esim. seuraavanlaisia alueita:
Alueen rajat tuotetaan luokassa BrowseIntervals. Luokassa on myös metodit, joilla aluetta siirretään eteen- tai taaksepäin ja alueen voi myös asettaa haluttuun kohtaan. Vasemmalla olevassa kuvassa 5. on luokkakaavio, josta käy ilmi taulukon datankäsittelystä vastaavat luokat.
3
Harjoitustyö Tekninen määrittely |
Tietorakenteet kevät 2002 |
Jukka Salminen i79947 |
---|
Kun alku- ja loppupiste on asetettu, tehdään niiden avulla luokan AbstractInterval1D olio. Ennenkuin AbstractInterval1D-olio voidaan muodostaa, täytyy luoda Key-olio, joka kuvaa yhden tietoalkion avaimen. Key-olio sisältää metodit avainten vertailua ja tallettamista varten. Kuvassa 6. on kuvattu Key-luokan ja AbstractInterval1D-luokan suhde.
Tietokannan indeksi on toteutettu B-puuna johon on tallennettu AbstractInterval1D-luokan olioita. Tässä luokassa on metodit, joilla voidaan muodostaa kahden alueen leikkaus- tai unioni tai testata onko alueilla yhteisiä alkioita. On myös mahdollista testata, sisältyykö yksi alue toiseen alueeseen. Halutut tietueet valitaan siten, että muodostetaan Cursor-luokan objekti jolle annetaan haluttua hakualuetta vastaava AbstractInterval1D-olio.
4