1

Tietorakenteet
kevät 2002
Harjoitustyö
Tekninen määrittely
Jukka Salminen
i79947

Tekninen määrittely

1. Johdanto

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.

2. Sovelluksen yleiskuvaus

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.

3. Arkkitehtuuri

3.1 Käyttöliittymän toteutus

Kuvassa 4. on kuvattu käyttöliittymän toteuttavat luokat.

Presentation.gif (7121 bytes)

Kuva 4. Esitystason 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

3.2 Tiedonhaun toteutus

Kuva 5. Taulukon tiedontallennus

TableClasses.png (64229 bytes)

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:

Sukunimen ensimmäinen kirjain on länsimaisen aakkoston iso tai pieni kirjain.
Sukunimen toinen kirjain on aakkoston pieni kirjain tai erikoimerkki.

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.

indexing.png (51205 bytes)

Kuva 6. Tietokannan avainten muodostaminen

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

4. Toteutus