Objektien hierarkia

Timo Ahjos 23.5.1999 *** KESKENERÄINEN LUONNOS *** DRAFT ***

Sisältämisrelaatio (Containership)

TOIMINTAYMPÄRISTÖSTÄ JA TIETOKANTAYHTEYDESTÄ HUOLEHTIVAT OBJEKTIT:
- Objektiluokka "istunto" (Session)
- Objektiluokka "tietokanta" (Database)
- Objektiluokka "tallennettu proseduuri" (Stored Procedure)

DATAN TIETOSISÄLLÖN MUOKKAUS:
- Objektiluokka "datamoduli" (Datamodule)
- Objektiluokka "kysely" (Query)
- Objektiluokka "muistissa oleva taulu" (Rowset) (kirjoittamatta)
- Objekti "kenttävektori" (Fields Array) (kirjoittamatta)
- Objektiluokka "kenttä" (Field) (kirjoittamatta)

NÄYTÖN OBJEKTIT:
- tulee aikanaan (kirjoittamatta)

Sisältämisrelaatio (Containership)

Objekteja voi olla koneen muistissa niin paljon, kuin niitä sinne mahtuu, eivätkä ne periaatteessa ole missään erityisessä järjestyksessä. Kuitenkin sisältämisrelaatio (containership) luo eräiden objektien välille hierarkian. Tässä kirjoituksessa käytetään englanninkielistä termiä container sellaisesta objektista, joka sisältää muita objekteja.

Esim. jos tietty kenttä sisältyy tiettyyn lomakkeeseen, kenttä liikkuu lomakkeen mukana ja se avautuu ja sulkeutuu aina yhtäaikaa kuin sen sisältävä lomakekin. Kun kahdella eri lomakkeella voi kummallakin olla samanniminen kenttä, tietty kenttä yksilöidään ilmoittamalla ensin pisteellä erotettuina ne isommat objektit, joihin se sisältyy, esim.

lomakeA.kentta1
lomakeB.kentta1

dBASE:n Help-tiedoston hakemistosta löytyy yli 70 objektiluokkaa. Sen lisäksi OOP-ohjelmoija luo niitä itse lisää sovellusta tehdessään. OOP-ohjelmointi onkin keskeiseltä sisällöltään sovellusalueelle sopivien objektiluokkien määrittelyä.

Tällä sivulla ei kuvata eri objektiluokkia yksityiskohtaisesti, vaan pyritään selvittämään keskeiset toiminnalliset kerrokset eli hierarkiatasot dBASE:n toiminnan ymmärtämiseksi.

Sivun alkuun


Toimintaympäristöstä ja tietokantayhteydestä huolehtivat objektit:

Objektiluokka "istunto" (Session)

Ylimmän tason container on istunto-objekti (engl. session). Aina kun käyttäjä käynnistää dBASE:n tai dBASE-sovelluksen, hänelle avautuu istunto, jonka sisällä hän toimii. Yksinkertaisissa sovelluksissa istuntoon ei tarvitse kiinnittää mitään huomiota, sillä dBASE huolehtii siitä automaattisesti.

Istunto mahdollistaa sen, että eri käyttäjät voivat käyttää yhtäaikaa samaa sovellusta. Kunkin käyttäjän avaamat objektit sisältyvät häntä varten avattuun istuntoon eivätkä mene sekaisin muiden käyttäjien vastaavien objektien kanssa.

Silloin kun käytetään dBASE- tai Paradox-tyyppisiä tauluja ja ne on suojattu salasanoilla, käyttöoikeuksien kontrolli tapahtuu istuntotasolla. Kun käyttäjä on antanut tietyn käyttäjätunnuksen ja salasanan, hän on sisäänkirjaantuneena sillä tunnuksella siihen asti, kunnes istunto suljetaan tai noita istunnon ominaisuuksia ohjelmallisesti muutetaan.

Istunnon erikoisluonteen vuoksi sen nimeä ei yleensä tarvitse mainita viitattaessa muihin objekteihin. Esim. lomakkeen nimen alkuun ei kirjoiteta session nimeä. Normaalitilanteissa kaikki se, mihin käyttäjä pääsee käsiksi, on tietyn istunnon sisällä. Vaikka toinen käyttäjä tekisi samanaikaisesti aivan samat toimenpiteet, hän käsittelee kuitenkin samojen objektien eri ilmentymiä, jotka sisältyvät eri istuntoon.

Sivun alkuun

Objektiluokka "tietokanta" (Database)

Tässä vaiheessa on syytä palauttaa mieleen, että objektit elävät vain tietokoneen keskusmuistissa. Varsinainen tietokanta kaikkine datatauluineen on levyllä eikä se sellaisenaan ole OOP-mielessä objekti. Sensijaan se tieto, mitä keskusmuistissa on tietokannasta, koostuu objekteista. Niistä hierarkisesti ylimpänä on tietokanta-objekti (engl. database), joka sisältää tietoja tietokannan yleisistä ominaisuuksista, kuten sen sijainnista, mutta ei tietokantataulujen dataa.

Sama sovellus voi olla yhtäaikaa yhteydessä useisiin tietokantoihin, joten muistissa voi olla samanaikaisesti useita tietokanta-objekteja.

Tietokanta-objektin tärkein ominaisuus on tietokannan alias-nimi, joka on välttämätön käytettäessä ulkoisia SQL-tietokantoja. Sensijaan käytettäesssä dBASE- tai Paradox-tyyppisiä tauluja alias-nimen käyttö on vapaaehtoista. Ellei alias-nimeä käytetä, tietokantaobjekti ei sisällä paljon muuta kuin tiedon siitä hakemistopolusta, minkä takaa tietokantataulut löytyvät.

Yksinkertaisissa sovelluksissa tietokantaobjekteihin ei tarvitse kiinnittää huomiota. Tietokannan tietosisältöä ei nimittäin käsitellä niillä, vaan jäljempänä kuvatuilla muilla objekteilla.

Yhteenveto tähänastisesta: Kun sovellus on käynnistymässä, aluksi on instantioitu istunto-objekti ja yksi tai useampia tietokanta-objekteja. Niiden avulla dBASE pitää käyttäjän toimenpiteet erillään muiden samanaikaisisten käyttäjien toimenpiteistä ja tietää, mitä tietokantaa tai tietokantoja istunnon aikana on tarkoitus käsitellä.

Sivun alkuun

Objektiluokka "tallennettu proseduuri" (Stored Procedure)

Tätä objektiluokkaa käytetään vain ulkoisten SQL-palvelinten yhteydessä. Sivuutamme sen tässä.

Sivun alkuun


Datan tietosisällön muokkaus:

Objektiluokka "datamoduli" (Datamodule)

Datamoduli on container-objekti, joka voi sisältää erilaisia data-objekteja. Datamodulien käyttö ei ole yksinkertaisissa sovelluksissa välttämätöntä, mutta niiden avulla saavutetaan seuraavia etuja:

Datamoduliin voidaan liittää "alidatamoduleja". Tällä tekniikalla päästään parhaimmillaan datan käsittelykoodin uudelleenkäytettävyyteen eli vältytään koodaamasta samoja tai samantapaisia datan käsittelytoimintoja moniin eri paikkoihin.

Datamodulien käytön vaihtoehtona on liittää käsittelykoodi suoraan lomakkeisiin. Se on järkevää vain hyvin suppeissa ja yksinkertaisissa sovelluksissa. Datamodulia käytettäessä datamodulin ja kunkin lomakkeen välissä on linkkinä "DatamodRef"-objekti. Se sisältää kuvauksen, miten tietty datamoduli ja tietty lomake liittyvät toisiinsa.

Sivun alkuun

Objektiluokka "kysely" (Query)

Kysely-objekti elää koneen keskusmuistissa, kuten muutkin objektit. Se osaa suorittaa haku- ja kirjoitusoperaatioita tietokantaan. Sillä on ominaisuus, jonka nimi on "sql" ja arvona on SQL-kielinen kysely (Structured Query Language). Objekti suorittaa tuon tietokantakyselyn silloin, kun sen ominaisuus "active=TRUE". SQL-kielinen lauseke voidaan kirjoittaa objektiluokan määritykseen, mutta se voidaan kirjoittaa ja tallentaa myös erilliseksi tiedostoksi, jolloin ominaisuuden "sql" arvona on vain viittaus tuon tiedoston nimeen.

dBASE:n tietokantaoperaatiot kirjoitetaan siis SQL-kielisinä, mutta SQL-lauseita ei lähetetä tietokantakoneistolle mistään komentojonosta vaan kysely-objekti suorittaa kyselyn lähettämisen ja vastaanottaa kyselyn tuloksen jäljempänä kuvattavaan rivijoukko-objektiin, joka sisältyy kysely-objektiin.

dBASE:en kuuluu visuaalinen muotoiluväline, jolla SQL-lause voidaan muodostaa SQL-kieltä opiskelematta.

Sivun alkuun

Objektiluokka "muistissa oleva taulu" (Rowset)

(kirjoittamatta)

Sivun alkuun

Objekti "kenttävektori" (Fields Array)

(kirjoittamatta)

Sivun alkuun

(kirjoittamatta)

Objektiluokka "kenttä" (Field)

(kirjoittamatta)

Sivun alkuun


Näytön objektit:

(kirjoittamatta)

Sivun alkuun


Seuraavalla sivulla, joka ei ole vielä valmiina, käsitellään ...