http://www.hut.fi/~kmkokko/oht/dokumentit/p1-vaihe4/tm.html
Tik-76.115
Software Project
S98-K99
TRAKLA-EDIT Rekno: TM003
Versio: 03
Päivitetty: 1.2.1999
TEKNINEN MÄÄRITELMÄ
Laatinut: KMK, JK, JO Tarkistanut: KMK, JK, JO Vastuussa: JO

Sisällysluettelo


1. Johdanto
1.1. Määritelmiä

2. Järjestelmän yleiskuvaus
2.1. Yleiskuvaus järjestelmän toiminnasta
2.2. Käyttäjät
2.3 Toteutusvälineistä
2.4 Liittyminen ympäristöön

3. Reunaehdot
3.1. Java Serializable-rajapinta
3.2. Java Cloneable-rajapinta
3.3. Java RMI-kutsu
3.4. Järjestelmän liittyminen ympäristöön
3.4.1 File_IO-rajapinta
3.4.2 Trakla-palvelimen hakemistohierarkia
3.5 DSDL-kieli

4. Arkkitehtuurin kuvaus
4.1 Modulaarisuus
4.2 Korkean tason luokkamalli
4.2.1 GUI-luokka
4.2.2 Representation-luokat
4.2.3 Tietorakenne-luokat
4.2.4 Animaattori-luokka
4.3 Tapahtumien käsittely
4.4 Nimeämiskäytäntö

5. Rajapintahierarkia
5.1 GUI
5.2 Representation - Esitysmuoto
5.2.1 Esitysmuotojen toteuttamat rajapinnat
5.2.2 Esitysmuotojen käyttämät rajapinnat
5.3 Data Structure - Tietorakenne
5.3.1 Tietorakenteiden toteuttamat rajapinnat
5.3.2 Tietorakenteiden käyttämät rajapinnat
5.4 Animator - Animaattori
5.4.1 Animaattorin toteuttamat rajapinnat
5.4.2 Animaattorin käyttämät rajapinnat

6. Moduulien toteutuksen kuvaus
6.1 GUI
6.2 Esitysmuodot
6.3 Tietorakenteet
6.4 Animaattori


1. Johdanto

TKK:n tietojenkäsittelyopin laboratoriossa on 90-luvulla kehitetty erilaisia sähköisen opetuksen tukijärjestelmiä, joista eräs on Tietorakenteet ja algoritmit -kurssilla käytössä oleva TRAKLA -järjestelmä. Järjestelmä on tarkoitettu sekä kurssin hallinnointiin että kurssilla käytössä olevien tehtävien automaattiseen jakeluun, vastaanottoon ja tarkastamiseen. Automaattisesti tarkastettavilla tehtävillä tarkoitetaan tässä yhteydessä ei-triviaaleja algoritmien simulointitehtäviä, jotka voidaan virittää sisällöltään jokaiselle opiskelijalle erilaiseksi. Kahden viimeisen vuoden aikana järjestelmästä on kehitetty WWW-pohjaista (WWW-TRAKLA), jolloin järjestelmän opiskelijalle näkyvä käyttöliittymä on WWW:ssä. Samalla opiskelijoille on tullut mahdolliseksi ratkoa tehtäviä graafisella käyttöliittymällä. Java-pohjainen käyttäliittymä toimii WWW-selaimessa ja esittää tehtävässä käytetyt tietorakenteet graafisesti. Käyttöliittymä kommunikoi TRAKLA -järjestelmän kanssa sähköpostin välityksellä. Vanhan järjestelmän reunaehdot kuitenkin rajoittavat tällä hetkellä järjestelmän edelleenkehitystyötä.

Ohjelmatyönä toteutettava järjestelmä tulee liittymään olennaisena osana TKO-laboratoriossa käynnissä olevaan LEAD-projektiin (Learning Environment for Algorithms and Data Structures), jossa tarkoituksena on rakentaa kohtuullisen kattava WWW-pohjainen tietorakenteiden ja algoritmien oppimisympäristö, johon kuuluu harjoitustehtävien lisäksi myös muuta opiskelumateriaalia. Järjestelmän on tarkoitus hyödyntää vahvasti hypermedian mahdollisuuksia ja ennenkaikkea etsiä hypermediasta uusia oppimista edesauttavia ominaisuuksia. Opiskelumateriaalin lisäksi järjestelmän on tarkoitus kattaa myös kurssin hallinnointiin liittyviä seikkoja aina ilmoittautumisesta palautteen keräämiseen saakka. Projektissa koko hanketta on lisäksi tarkoitus evaluoida pedagogisesta näkökulmasta ja pohtia millaista opetuksellista ja oppimisen kannalta keskeistä lisäarvoa se tuo mukanaan.

OLIO-TRAKLA on osa WWW-TRAKLA- konseptia; sitä tarkoitus käyttöä lähinnä kurssin Tik-76.122 Tietorakenteet ja algoritmit harjoitustehtävien automaattiseen jakeluun, vastaanottoon ja tarkastamiseen, sekä kurssin hallinnointiin. Siihen on tarkoitus liittää myös jossain määrin opintomateriaalia mm. linkkien ja viitteiden muodossa. Enin osa opintomateriaalin tarjonnassa rajautuu kuitenkin OLIO-TRAKLA:n ulkopuolelle.

Ohjelmatyönä toteutettava järjestelmä TRAKLA-EDIT on osa OLIO-TRAKLA -järjestelmää (kuva 1). Kyseessä on sen WWW-pohjainen käyttöliittymä, eli asiakaspään sovellus joka kommunikoi TRAKLA-palvelimen kanssa.
 
 


Kuva 1 - OLIO-TRAKLA konsepti


 



1.1 Määritelmiä

LYHENNE, TERMI SELOSTUS
DSDL Data Structure Description Language eli kuvauskieli, jolla voidaan kuvata tietorakenteen tai animaattorin tila HTML-tyyppisilla tageilla ja määritteillä
Clonable Interface Luokan instanssien tulee tarjota close-metodi, jolla pystytään kopioimaan luokan kenttien arvot yksi yhteen.
Dynaaminen HTML HTML kielinen sivu, joka muodostetaan palvelimella annettujen parametrien perusteella.
Java Interface Rajapintamäärittely, joka määrittelee yksikäsitteisesti toteutettavilta luokilta vaaditut palvelut ja toiminnot.
LEAD Learning Environment for Algorithms and Data structures
RMI Remote Method Invocation. 
Serializable Interface Javan tarjoama sarjallistamisrajapinta, jonka avulla voidaan ohjata olion instanssin tila tietovuohon, josta se on myöhemmin palautettavissa.

2. Järjestelmän yleiskuvaus

2.1. Yleiskuvaus järjestelmän toiminnasta

TRAKLA-EDIT -järjestelmä on OLIO-TRAKLA -järjestelmän WWW-pohjainen käyttöliittymä. TRAKLA-EDIT:illä opettaja voi luoda graafisesti tietorakenteisiin ja algoritmeihin liittyviä tehtäviä ja esimerkkejä, joita puolestaan opiskelija voi graafisesti suorittaa ja tutkia. Opettajan laatimat tehtävät ja esimerkit tallennetaan TRAKLA-palvelimelle; oppilas voi siis tilata tehtäviä ja esimerkkejä tältä palvelimelta ja myös lähettää suorittamiaan tehtäviä sinne tarkistettavaksi. Esimerkkeihin oppilas voi tutustua kelaamalla opettajan esimerkkiin luomaa animaatiosekvenssiä edestakaisin.

2.2. Käyttäjät

Järjestelmän käyttäjäkunta muodostuu opiskelijoista, assistenteista sekä luennoitsijasta. Profiloiduilla käyttäliittymällä on tarkoitus mahdollistaa ohjelmiston toteutus siten, että sovelluksen käynnistyessä voidaan käyttäjäidentifikaation perusteella valita käytettävä profiili. Profiilit määrittelevät toiminnot, jotka ovat istunnon aikana suoritettavissa. Luennoitsijan profiilissa on mahdollista luoda uusia tehtäviä ja esimerkkejä, kun taas opiskelijan profiili rajoittuu tehtävien ratkaisemiseen ja palauttamiseen sekä valmiiden esimerkkien selaamiseen graafisen käyttälittymän kautta.

2.3 Toteutusvälineistä

Järjestelmän vaatimuksiin kuuluu toimia kaikissa yleisimmissä selaimissa (Explorer, Netscape) sekä käyttöjärjestelmissä (Windows, UNIX, Machintosh). Toteutuksessa käytetään Java Development Kit versiota 1.1.7A, jolloin rajoitteeksi jää selainten yhteensopivuus ja tuki Javalle. Toteutuksessa käytettävät Java-kääntäjä ja Java-tulkki ovat vapaasti haettavissa Sun Microsystem yhtiön kotisivuilta www.sun.com. Myös yleisimmät selaimet, Microsoftin Internet Explorerin uusin versio on osoitteessa www.microsoft.com sekä Netscapen uusin versio osoitteessa www.netscape.com, ovat vapaasti haettavissa ja käytettävissä.

2.4 Liittyminen ympäristöön

TRAKLA-EDIT toimii graafisena käyttöliittymänä, jolla voidaan laatia (opettaja) ja ratkaista(opiskelija) tehtäviä. Sillä voidaan myös tehdä valmiita animaatiosekvenssejä havainnollistamaan tietorakenteen toimintaa visuaalisessa muodossa (opettaja) sekä tutustua (opiskelija) näihin animaatiosekvensseihin. TRAKLA-EDIT kommunikoi OLIO-TRAKLA -järjestelmän TRAKLA-palvelimen kanssa. TRAKLA-Palvelin koostuu kahdesta eri kokonaisuudesta: ensimmäinen tarjoaa talletuskapasiteettia jonne voidaan tallentaa tehtäviä ja esimerkkejä; toinen palvelimen toiminnallisuus on tehtävien automaattinen tarkastus.

Tarkemmin aiheesta on kerrottu kohdassa 3.4.Järjestelmän liittyminen ympäristöön.

3. Reunaehdot

TRAKLA-EDIT:in reunaehdot määräytyvät OLIO-TRAKLA konseptin perusteella (kappale 1). TRAKLA-EDIT kommunikoi palvelimen kanssa, jossa on levykapasiteettia ja TRAKLA-palvelin. Levykapasiteettia voidaan käyttää tehtävien, esimerkkien ja vastausten tallentamiseen. Tietorakenteiden ja animaattorin  tila tallennetaan palvelimelle DSDL kuvauksena, jollei kyseessä ole tehtävän palautus. Tehtävän palautus suoritetaan sarjallistamalla animaattori ja tallentamalla näin saatu tavukoodi palvelimelle. DSDL kuvaus voidaan myös lukea TRAKLA-EDIT:llä, jolloin sovellus voidaan palauttaa tilaan, jossa se oli tallentamishetkellä. Tämä mahdollistaa esimerkkien ja malliratkaisuiden tuottamisen TRAKLA-EDIT:llä.

Opiskelijan tietorakenteelle suorittama ratkaisu tallennetaan animaattori-luokan Client-instanssiin, joka toteuttaa Java Serialization-rajapinnan. Tämä sarjallistettu instanssi tallennetaan palvelimelle, jonne indikoidaan Java RMI-kutsu. Kutsun saatuaan TRAKLA-palvelin ajaa malliratkaisun omaan animaattori-luokan Server-instanssiinsa ja suorittaa vertailun Client- ja Server-instanssien välillä. Animaattori -luokka toteutetaan TRAKLA-EDIT projektin yhteydessä, ja samaa animaattorin toteutusta (kappale 4.4.) käytetään myös TRAKLA-palvelimella.

3.1 Java Serializable-rajapinta

Java Serializable-rajapinnan toteutus mahdollistaa objektien tallennuksen ja palatuksen. Objektien tallennus ja palautus mahdollistetaan esittämällä niiden tila tavukoodina, jonka informaatio mahdollistaa objektin palauttamisen alkuperäiseen tilaan. Tallennettava objekti voi toteuttaa joko Serializable- tai Externalizable-rajapinnan. Tallennettavat objektit viittaavat usein muihin objekteihin. Nämä muut objektit on tallennettava samaan aikaan, kuin itse sarjallistuksen kohteena oleva objekti, jotta objektien väliset suhteet säilyisivät konsistentteina.

Animaattorin client-instanssin tallentaminen toteutetaan seuraavalla koodilohkolla [6]
:
/*
** serializa animator client instance
*/
FileOutputStream f = new FileOutputStream( "tmp" );
ObjectOutput s = new ObjectOutputStream( f );
s.writeObject( animator.getClientInstance() );
s.flush();

Animaattorin client-instanssin lukeminen toteutetaan seuraavalla koodilohkolla [6]:

/*
** deserialize a animator client instance from a file
*/
FileInputStream in = new FileInputStream( "tmp" );
ObjectInputStream s = new ObjectInputStream( in );
Animator animator = (Animator)s.readObject();
Keskeytykset, jotka sarjallistuva objekti voi aiheuttaa on listattu alla. Kaikki nämä otetaan vastaan ja käsitellään siten, että ohjelman suoritusta pystytään jatkamaan.

3.2. Java Cloneable-rajapinta

Java Cloneable-rajapinnan toteuttaminen vaatii clone-metodin toteuttamista tietorakenteissa, jotta animaattoriin voidaan tallentaa kopio tietorakenteen tilasta tietyllä ajan hetkellä. Clone-metodi kopioi kaikkien kenttien arvot luokassa.

Keskeytykset, jotka kloonatta objekti voi aiheuttaa on listattu alla. Kaikki nämä otetaan vastaan ja käsitellään siten, että ohjelman suoritusta pystytään jatkamaan.

3.3. Java RMI-kutsu

Socket -kommunikaation asiakkaan ja palvelimen välillä vaatisi sovellustason protokollaa, jonka toteuttamista on pyritty välttämään OLIO-TRAKLA konseptissa. Remote method invocation (RMI) tarjoaa vaihtoehdon puhtaaseen Java-ympäristöön. Common object request broker architecture (COBRA) on myös liian raskas OLIO-TRAKLA -ympäristöön, sillä tukea ei tarvita muille kielille kuin Javalle.

Seuraavassa on esimerkki [7], jolla TRAKLA-EDIT pystyy herättämään TRAKLA-palvelimen tarkastusmetodin yksinkertaisella RMI-kutsulla, kun opiskelija on tallentanut sarjallistetun animaattorin TRAKLA-palvelimen levylle omaan hakemistoonsa:
 

/**************************************************************
** interface definition for server startCheckProcedure() method
**************************************************************/
public interface TRAKLA_server_interface extends java.rmi.remote
{
int startCheckProcedure() throws java.rmi.RemoteException;
}

/************************
** code for TRAKLA_server
************************/
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;

public class Trakla_server extends UnicastRemoteObject implements TRAKLA_server_interface
{
private String name;

public Trakla_server( String userId )
{
super();
}
public void startCheckProcedure()
{
/*
** check submitted exercise
*/
}
public static void main( String args[] )
{
/*
** create and install security manager
*/
}

/*************
** TRAKLA-EDIT
*************/
import java.awt-*;
import java.rmi.*;

public class TRAKLE_EDIT extends java.applet.Applet
{
public void init()
{
try {
TRAKLA_server_interface obj = (TRAKLA_server_interface)Naming.lookup("//" + getCodeBase().getHost()+"TRAKLA_server" );
int result = obj.startCheckProcedure();
} catch (Exception e) {
System.out.println( "TRAKLA_server exception: " + e.getMessage() );
e.printStackTrace();
}
}
}

3.4. Järjestelmän liittyminen ympäristöön

3.4.1. File_IO rajapinta

TRAKLA-EDIT pystyy kommunikoimaan TRAKLA-palvelimen (kuva 1) kanssa File_IO-olion kautta. Olion tarjoamat metodit (INTERFACE METHODS) mahdollistavat pyyntöjen esittämisen palvelimelle, joka vastaa pyyntöihin rajapinnassa määritellyssä ajassa (TIMEOUT LITERALS). Tämä rajapinta on määritelty TRAKLA-palvelin projektin puolesta ja sen tarjoamat palvelut ja literaalit ovat:
TIMEOUT LITERALS Kommunikaation alkaessa TRAKLA-palvelimelle käynnistetään oma säie, jonka tehtävänä on toimia yhteyden ajastimena. Säie herättää InterreptException-keskeytyksen jos yhteys TRAKLA-EDIT:in ja TRAKLA-palvelimen välillä ei pysty täyttämään edellä mainittujen TIMEOUT literaalien asettamia aikarajoja. Aikarajojen tarkoituksena on estää tilanteet, joissa TRAKLA-EDIT:in käyttäjä luulee suorittaneensa operaation, joka todellisuudessa on estynyt internet-verkossa esiintyneen ruuhkan takia.

INTERFACE METHODS

File_IO -olio herättää IOException-keskeytyksen jos yhteyden muodostuminen epäonnistuu (ennen TIMEOUT literaalien aiheuttamaa InterruptExceptionia). Tämän jälkeen voidaan kysyä File_IO-oliolta epäonnistumisen syytä, ja päätellä onko kyseessä väliaikainen vai pysyvä virhe.

3.4.2. TRAKLA-palvelimen hakemistohierarkia

TRAKLA-palvelin tarjoaa jokaiselle opiskelijalle henkilökohtaisen hakemiston (kuva 2, student_dir) johon tällä opiskelijalla on luku- ja kirjoitusoikeudet. Tämän hakemistopolku voidaan johtaa käyttäjätunnuksesta, ja siihen opiskelija voi tallentaa välisratkaisunsa ja palautettavat ratkaisut. Hakemistohierarkiassa on myös esimerkkihakemisto (kuva 2, example_dir) johon vain luennoitsijalla ja assistenteilla on kirjoitusoikeus. Esimerkkihakemistoon tallennetaan esimerkit ja niihin liittyvät mallivastaukset. Tästä hakemistosta kaikki opiskelijat pystyvät hakemaan esimerkkitehtäviä käydäkseen niitä läpi omalla TRAKLA-EDIT istunnollaan.
 
 


Kuva 2 - TRAKLA-palvelimen hakemistohierarkia


 



3.5. DSDL-kieli

Tehtävänantojen, esimerkkien ja väliratkaisujen talletusmuoto on valittava siten, että sovelluksen mahdolliset laajennukset ja toteutusympäristön päivitykset eivät aiheuta muutosta niiden konsistenssiin. Konsistenssilla käsitetään tässä tallennetun informaation tulkintaa sille asetetun määrittelyn mukaan siten, että mahdolliset uudet ominaisuudet eivät vaikuta vanhan informaation käsittelyyn. TRAKLA-EDIT käyttää tallentamiseen sille erikseen määriteltävää data structure description language (DSDL) syntaksia, jonka ulkoasu on johdettu HTML kielestä. Kielellä kuvataan oliokohtaista informaatiota, jolloin tagien rajoittamat osa-alueet voidaan käsittää yhden luokan instanssin kuvaukseksi. DSDL kielellä voidaan kuvata Formaali määritelmä DSDL:lle löytyy dokumentista: DSDL Specification.

4. Arkkitehtuurin kuvaus

4.1. Modulaarisuus

Modulaarisuudella eristetään toiminnalliset osakokonaisuudet toisistaan siten, että moduulien sisäinen toteutus on riippumaton toisistaan. Rajapintojen määritettely mahdollistaa yksittäisten moduulien ja luokkien implementoinnin uudelleen ilman, että sen vaikutukset ulottuvat muihin moduuleihin. Moduulimalli on esitetty kuvassa 3. Rajapintojen metodit on esitetty TRAKLA-EDIT:in toiminnallisuutta kuvaavilla SDL kuvilla liitteissä 1, 2, 3 ja 4. Moduulien toteutuksen kuvaus kappalessa 5 sisältää sanallisen määrittelyn rajapintojen ja luokkien literaaleille sekä metodeille. Rajapinnat on määritelty kappaleessa 4.
 
 


Kuva 3 - TRAKLA-EDIT moduulimalli

Kuva 4 - Tietorakenne operaatioiden semantiikat
 
 
 
 
 
 

Kuva 5 - Animaattorin Java Cloneable-rajapinnan toteutus


 



4.2. Korkean tason luokkamalli

Kappaleessa 4.1 esitetty modulaarisuus jakautuu luontevasti luokiksi, jotka on esitetty kuvassa 6. Luokat itsessään muodostuvat aliluokista, joiden toteutus on kuvattu kappalessa 5. Korkean tason luokkamallin tarkoituksena on määritellä toiminnalisten kokonaisuuksien toteutus ja omistussuhteet.
 
 


Kuva 6 - Korkean tason luokkamalli


 



4.2.1. GUI-luokka

GUI-luokka hallitsee graafista käyttöliittymää ja pystyy liittämään esitysmuotoja hallussaan olevaan Java-Containeriin. Esitysmuotoja säilytetään vektorissa, jonka alkiot ovat Representation-tyyppisiä. Containeriin voidaan liittää myös animaattori-luokan ohjauksen mahdollistava paneeli.

4.2.2. Representation-luokat

Esitysmuoto-luokka sisältää aina viittauksen yhteen tietorakenteeseen. Useampi esitysmuoto voi kuitenkin viitata samaan tietorakenteeseen, joka mahdollistaa tietorakenteelle useita eri näkymiä (kuva 7).
 
 


Kuva 7 - Esitysmuoto - tietorakenne; omistussuhteet


 






GUI-luokka käyttää näkee vain esitysmuodon, jonka se pystyy liittämään tai poistamaan näytöltä. Tietorakenteen lisäämisen yhteydessä FactoryForDS (kappale 5.1) palauttaa kyseiselle tietorakenteelle määritellyn oletusesitysmuodon. Viittaus tietorakenteeseen annetaan esitysmuodon muodostimessa, jolloin varmistetaan, ettei esitysmuoto yritä koskaan piirtää olematonta tietorakennetta.

Operaatiot, jotka kohdistuvat tietorakenteisiin, kuten uuden esitysmuodon liittäminen tietorakenteeseen, tapahtuu esitysmuodon kautta, jossa on viittaus tietorakenteeseen. Kappaleessa 3.1 esitetyn Java Serialization-rajapinna vuoksi on tarpeellista välttää viittauksia tietorakenteista esitysmuotoihin, koska silloin jouduttaisiin sarjallistamaan koko TRAKLA-EDIT.

Uusien tietorakenteiden ja esitymuotojen toteutuksesta TRAKLA-EDIT ympäristössä käsittelee erilleinen dokumentti Tietorakenteiden toteutus TRAKLA-EDIT ympäristössä.

4.2.3. Tietorakenne-luokat

Tietorakenne-luokat ovat fyysisiä toteutuksia tiedon tallentamiselle johonkin ennalta määriteltyyn tallennusrakenteeseen. TRAKLA-EDIT:in tehtävänä on havainnollistaa tietorakenteiden toimintaa visuaalisesti, joten tietorakenteiden toteutuksessa on huomioitava animaattorin ja esitysmuotojen tarvitsemat rajapinta-metodit. Uusien tietorakenteiden ja esitymuotojen lisäämisestä TRAKLA-EDIT ympäristöön on erillinen dokumentti osoitteessa Tietorakenteiden toteutus TRAKLA-EDIT ympäristössä.

4.2.4. Animaattori-luokka

TRAKLA-EDIT käyttää animaattorista Client-instanssia. Singleton [3] Desing Pattern mallintaa luokan toteutuksen, jossa varmistetaan, ettei luokasta voida käyttää kuin ennalta määriteltyjä instansseja; TRAKLA-EDIT:lle Client- ja TRAKLA-palvelimelle Server-instanssi. Animaattoriin tallentuvat tietorakenteen muutokset Javan Clonable-rajapinnan määrittelemällä clone-metodeilla. Javan Serializable-rajapinta puolestaan mahdollistaa animaatiosekvenssin siirtämisen TRAKLA-palvelimelle tarkastettavaksi tavukoodina. TRAKLA-EDIT:ssä animaattoria käyttää myös GUI-luokka, jonka avulla käyttäjä voi käydä läpi ja palata takaisin ennalta tallennettuja sekvenssejä animaattorin tarjoaman ohjauspaneelin tai "Animator"-valikon avulla (LIITE 1).

4.3. Tapahtumien käsittely

Tapahtumien käsittely, Java Events, on toteutettu TRAKLA-EDIT:ssä siten, että tapahtumat kuunnellaan sen luokan instanssissa, johon ne kohdistuvat:

4.4. Nimeämiskäytäntö

Kuva 8 - Esitysmuoto kompositio


 



5. Rajapintahierarkia

Järjestelmän eri moduulit näkevät toisensa rajapintojen läpi. Rajapinnoissa määritellään moduulien välisessä kommunikoinnissa tarvittavat metodit, jolloin moduulien sisäinen toteutus ei ole järjestelmän kannalta lukkoonlyöty. Tämä mahdollistaa tarvittaessa järjestelmän moduulien uudelleen kirjoittamisen tai lisäämisen (esitysmuotojen ja tietorakenteiden lisäämisen).

5.1 GUI

Käyttöliittymä ei näy järjestelmän muille moduuleille eikä näin myöskään tarjoa niille rajapintaa. Käyttöliittymä kommunikoi esitysmuotojen kanssa Representation-rajapinnan kautta (kuva 3). Tietorakenteisiin käyttöliittymällä ei ole suoraa rajapintaa vaan se kommunikoi niiden kanssa esitysmuotojen tai animaattorin välityksellä sekä luo tietorakenteita FactoryForDS-olion avulla. Animaattorille käyttöliittymä välittää pyyntöjä AnimatorControl-rajapinnan välityksellä. TRAKLA-palvelimen kanssa käyttöliittymä kommunikoi TRAKLA-palvelimen projektin tarjoaman File_io-luokan olion metodien kautta.

5.2 Representation - Esitysmuoto

5.2.1 Esitysmuotojen toteuttamat rajapinnat

Esitysmuodot periyttävät abstraktin Representation-luokan käyttöliittymän ja esitysmuotojen väliseen kommunikointiin. "Representation-rajapintaa" ei siis ole toteutettu rajapintana, vaan abstraktina luokkana. Tämä mahdollistaa kappaleessa 5 esitettyjen metodien oletustoteutuksen, jolloin niitä ei tarvitse implementoida jokaista uutta esitysmuotoa toteutettaessa.

Abstrakti Representation-luokka toteuttaa seuraavat metodit:

repr.gif (1924 bytes)
Kaikille yllä kuvatuille metodeille on oletustoteutus, joten niitä ei tarvitse implementoida uutta esitysmuotoa TRAKLA-EDIT ympäristöön liittettäessä. Metodien tarkempi kuvaus löytyy kappaleesta 6 ja SDL kuvat LIITTEESTÄ 2.

5.2.2 Esitysmuotojen käyttämät rajapinnat

Esitysmuodot kommunikoivat tietorakenteiden kanssa Operational- ja Layout-rajapintojen kautta.

5.3 Data Structure - Tietorakenne

5.3.1 Tietorakenteiden toteuttamat rajapinnat

Tietorakenteet toteuttavat Operational-rajapinnan tai siitä perityn rajapinnan, esitysmuotojen kautta suoritettaville tietorakenteiden muokkausoperaatioille (esim. insert, delete, jne..). Eri tietorakenteiden erityisoperaatioita toteutettaessa rajapinnat peritään joko Operational-rajapinnasta tai jostain muusta siitä periytyvästä rajapinnasta (kuva 9). Operational-rajapinnan metodit tarkentuvat tietorakenteiden operaatioiden määrittelyn yhteydessä (Tietorakenteiden toteutus TRAKLA-EDIT ympäristössä).

Esimerkki Operational-rajapinnan perinnästä:

operational.gif (3490 bytes)
Kuva 9 - Esimerkki Operational-rajapinnan perinnästä





Operational-rajapinta määrittää ainakin seuraavat metodit:

Tietorakenteet toteuttavat myös Layout-rajapinnan tai siitä perityn rajapinnan. Esitysmuodot käyttävät rajapintaa tietorakenteen graafisen esityksen muodostamisessa (rajapinnan metodeita esim. getHeight(), getWidth(), ...). Tietorakenteen esittämisessä tarvittavat metodit ovat useassa tapauksessa tietorakennekohtaisia, jolloin tietorakenteen toteuttama rajapinta peritään Layout-rajapinnasta tai siitä periytyvästä rajapinnasta (kuva 10). Rajapinnan metodit tarkennetaan tietorakenteiden ja esitysmuotojen määrittelyn yhteydessä.

Esimerkki Layout-rajapinnan perinnästä:

layout.gif (2840 bytes)
Kuva 10 - Layout-rajapinnat


5.3.2 Tietorakenteiden käyttämät rajapinnat

Tietorakenteet kommunikoivat animaattorin kanssa AnimatorSequence-rajapinnan kautta.

5.4 Animator - Animaattori

5.4.1 Animaattorin toteuttamat rajapinnat

Animaattori toteuttaa AnimatorControl-rajapinnan, jolla käyttöliittymästä voidaan kelata animaattoria eteen ja taakse.

AnimatorControl-rajapinta sisältää metodit:

animctrl.gif (2023 bytes)
Animaattori toteuttaa AnimatorSequence-rajanpinnan, jonka kautta tietorakenteet kertovat animaattorille tietorakenteisiin kohdistuneista operaatiosta. Animaattori tallentaa operaatiot animaatiosekvensseinä, jotka voivat koostua atomisista kokonaisuuksista (esimerkiksi rotaatio).
animseq.gif (1498 bytes)
Lisäksi animaattori toteuttaa Javan Serializable-rajapinnan, jota käytetään kappaleessa 3.1 esitetyllä tavalla tehtävien tarkastukseen.

5.4.2 Animaattorin käyttämät rajapinnat

Animaattori käyttää AnimatorSignal-rajapintaa (kuva 3) pyytäessään tietorakennetta siirtymään animaattorin haluamaan tilaan.

6. Moduulien toteutuksen kuvaus

Moduulien toteutuksessa käyttöliittymän toteutus on pyrittävä suorittamaan ensimmäiseksi. Sen sekä animaattorin totetutuksessa tulee pyrkiä siihen, että järjestelmään voidaan lisätä jälkikäteen mahdollisimman vaivattomasti uusia tietorakenteita ja niiden esitysmuotoja. Luokkien OMT-kaavioissa muiden kuin geneeristen metodien nimeäminen tietorakenne- ja esitysmuoto-luokille on mahdotonta, sillä tietorakenteilla käsitetään TRAKLA-EDIT konseptissa kaikki ruudulla esitettävä esitykset (esimerkiksi tehtävänanto teksti ja tehtävän palautuksena annettava binääripuu). TRAKLA-EDIT:ssä on käytössä rajapinta-hierarkia, joka tarkentuu alaspäin mentäessä tietorakennetyyppien mukaan kappaleessa 5 esitetyllä tavalla.

6.1. GUI

Graafinen käyttöliittymä periytyy Java Frame-luokasta (kuva 11), joka toteuttaa ikkunan esitykseen tarvittavat metodit. GUI luo toiminnallisia luokkia, joiden avulla hallitaan käyttöliittymän näkymä, käyttäjän tekemät toiminnot ja kommunikaatio TRAKLA-palvelimen kanssa. GUI-luokka itsessään toimii olioden aktivoijana ja säiliönä, johon voidaan tallentaa ja josta voidaan hakea eri olioiden instansseja. Luokille, joista voi olla vain yksi instanssi (LoginDialog, LayoutManager, TraklaMenuHandler ja FactoryForDS) se tallennetaan ennalta allokoituihin muuttujiin. Esitysmuotoja voi olla useita liitettynä ikkunaan, ja niitä säilytetään Representation-tyyppisessä vektorissa.
 
 


Kuva 11 - GUI OMT

6.2. Esitysmuodot

Esitysmuodot periytyvät abstraktista Reprepresentation-luokasta (kuva 12). Tämä luokka määrittelee kaikilta esitysmuodoilta vaadittavat metodit ja toteutuksen muodostimelle, joka alustaa esitysmuodon representationPanel -luokan. RepresentationPanel-luokan instanssi huolehtii hiiri- ja näppäimistötapahtumien vastaanottamisesta ja niiden delegoimisesta esitysmuodon action-metodille. Esitysmuoto on kompositio View- ja Logic-olioiden instansseista, jotka ovat vastuussa tietorakennekohtaisesta piirtämis- ja muokkaamistoiminnoista. Kompositio mahdollistaa näkymien (view) tai operaatioiden (logic) käyttämisen uudelleen, jos tietorakenteen layout-tai operational-rajapinta on vaadittavaa tyyppiä (esim. table_view-luokkaa käyttääkseen tietorakenteet on toteutettava table_layout-rajapinta). Valmiita esitysmuotoja, esimerkiksi Table_Representation voidaan käyttää jos halutaan jonkin uuden järjestelmään lisättävän tietorakenteen tukevan myös Table-näkymää. Tällöin tietorakenteen on toteutettava molemmat Table_Layout- ja Table_Operational-rajapinnat ja pystyttävä palauttamaan tukemiensa esitysmuotojen nimet alla olevan esimerkin mukaan.

Kaksoisbufferointi on paras tapa yhdessä update-funktion kanssa toteuttaa värinätön animaatio. Kaksoisbufferointi tarkoittaa, sitä että on olemassa kaksi erillistä piirtopintaaa, joihin vuorotellen piirretään (p1 ja p2). Kaksoisbufferoinnin toteutus vaatii seuraavat operaatiot [1]:

public class New_DS implements New_Layout, New_Operational, Table_Layoyut, Table_Operational
{
...
public Vector getSupportedRepresentationNames()
{
...
return( "NewDS", "Table" );
}
...
}
 
 


Kuva 12 - Esitysmuodot OMT

Esitysmuodot käyttävät RepresentationObject-rajapinta -tyyppisiä olioita esittämään tietorakenteita paneeleissaan. RepresentationObject-rajapinta jakautuu objekteihin, joilla on kaikilla yhtenäiset siirto- ja sijainti-metodit, mutta niiden piirtometodi voi kuvata ne määritellyllä tavalla (kuva 13). Uusia esitysmuotoja lisättäessä voidaan käyttää näitä valmiita objekteja tai lisätä järjestelmään uusi esitettävä luokka, joka toteuttaa RepresentationObject-rajapinnan.
 
 


Kuva 13 - Esitysmuodon piirto-objektit

6.3. Tietorakenteet

Tietorakenteet ovat kirjallisuudesta saatavia kokonaisuuksia, jotka pystyvät tallentaan objekteja niille ominaisten kutsujen avulla. Tietorakenteilla voi myös olla sisäistä toimintaa, jolla ne järjestävät alkioita esimerkiksi hakuajan minimoimiseksi. TRAKLA-EDIT:ssä kaikki tietorakenteet toteuttavat kaksi niille ominaista rajapintaa, Layout- ja Operation-rajapinnat. Näiden rajapintojen metodien avulla tietorakenne voidaan piirtää (View) ja käyttäjän tai TRAKLA-palvelimen tekemät operaatiot voidaan kuvata Operational-rajapinnan kutsuiksi. Tietorakenteet toteuttavat Java Cloneable-rajapinnan, jonka avulla ne tallennetaan animaattoriin sekvensseiksi. Sekvenssi sisältää kaiken tarvittavan tiedon, jonka avulla tietorakenne voidaan palauttaa edelliseen tilaan. Animaattori käyttää AnimatorSignal-rajapintaa ilmoittaakseen tietorakenteelle, että sen on päivitettävä itsensä. Tietorakenteiden algoritmit voivat olla toteutettuna erillisenä luokkana, jolloin niiden uudelleenkäyttettävyysaste nousee (kuva 14).

Tietorakenteilta vaaditaan 3 metodia, jotka liittyvät niiden hallintaan ja niiden esitysmuotojen näyttämiseen TRAKLA-EDIT ympäristössä:

Kuva 14 - Tietorakenteet OMT


 


LIITE 3 - SDL PICTURES FOR TABLE DATA STRUCTURE kuvaa tietorakenteen metodit SDL kuvauksina. Esimerkkinä on käytetty taulukko tietorakennetta.

6.4. Animaattori

Animaattori on Java Serializable-rajapinnan toteuttava luokka, jonka tehtävänä on tallentaa Cloneable-rajapinnan avulla kloonattuja tietorakenne-olioita sekvenssiksi. Sekvenssien tallentaminen tapahtuu tallentamalla ne vektoriin ja erottamalla tapahtumat erillisellä merkillä, jolloin yksi tapahtuma voi muodostua monesta atomisesta operaatiosta (esim. tietorakenteesta 1 - tietorakenteeseen 2 - tietorakenteessa 2 rotaatio ).

Animaattori on toteutettu Singleton Design Pattern [3] -muunnelmalla, jossa on mahdollista luoda kaksi, client- ja server-, instanssia. Client-instanssiin tallennetaan TRAKLA-EDIT:ssä tietorakenteille tehdyt operaatiot ja Server-instanssiin TRAKLA-palvelimella tehty "oikea" vastaus, jota verrataan palautettuun Client-instanssiin.

Animaattorilla on UserInformation-luokan instanssi, jota voidaan käyttää getUserInformation- ja putUserInformation-metodien avulla. Instanssi alustetaan, kun käyttäjä tunnistautuu järjestelmään GUI:n tarjoaman LoginDialog-luokan avulla. UserInformation-luokan informaatio tarvitaan myöhemmin File_IO-metodeissa. Koska UserInformation-instanssiin on viittaus animaattorista, on se myös sarjallistuva ja näin ollen käyttäjää koskeva informaatio siirtyy sarjallistetun animaattorin mukana palvelimelle (kuva 15).

Timer-luokka toteuttaa ajastimen, jota käytetään play-proseduurin yhteydessä. Timer-luokan toteutus saadaan kirjallisuudesta [8], ja se on toteutettu TimerCallback-rajapinta tyyppisenä. Tämä rajapinta määrittelee metodin, jota kutsutaan, joka kerran, kun ajastin laukeaa.

public interface TimerCallBack
{
public void tick();
}
 


Kuva 15 - Animaattori OMT

Kirjallisuus viitteet

[1] Opeta itsellesi Java ohjelmointi, Petri Kiuttu - Juha Niemi, Suomen ATK kustannus, 1996
[2] Data Structures and Algorithm Analysis in C, Mark Allen Weiss, 1992
[3] Design Patterns, Elements of Reusable Object-Oriented Software, Gamma - Helm - Johnson - Vlissides, Addison-Wesley, 1997
[4] Diplomityö, Puu-tietorakenteiden havainnollistaminen, Petteri Hämäläinen, TKK, 1998
[5] Core Java 1.1 Volume II - Advanced Features, Cay S. Horstmann - Gary Cornell, Sun Microsystems, 1998
[6] Java Object Serialization Specification, Revision 1.43, JDK 1.2, November 30, 1998
[7] Java Object Java RMI Tutorial, Revision 1.3, JDK 1.1 FCS, February 10, 1997
[8] Hacking Java - The Java Professional's Resource Kit, Mark Wutka, QUE, 1997