47ta tiettyä arvoa tai oliota vastaava indeksi tai indeksit selville. Nämäkaksi Prolog-termiä mahdollistavat intensionaalisen <strong>ja</strong> ekstensionaalisen tasonkaksisuuntaisen vuorovaikutuksen.Oletetaan, että halutaan selvittää frame_no –attribuutin arvo. Tällöin selvitetäänensin intensionaalisen tason esityksestä se indeksi, johon frame_no liittyy.Vastaukseksi saadaan tässä tapauksessa indeksi t(1,3,1). Jos frame_no:oon olisiliittynyt useampia indeksejä, olisivat myös nämä indeksit tulleet vastaukseksi.Tämän jälkeen haetaan ekstensionaaliselta tasolta indeksiä t(1,3,1) vastaava arvo.Koska esimerkin yhteydessä on esiteltynä vain yksi ilmentymä, vastaukseksitulee 4566545, sillä se on rakenteessa indeksin osoittamassa paikassa.Jos oltaisiin haluttu saada oliotyyppiä frame vastaavat ekstensionaalisen tasonrakenteet, systeemi olisi etsinyt kaikki frame:en liittyvät indeksit intensionaalisentason esityksestä. Niitä olisi ollut tässäkin tapauksessa jälleen vain yksi(indeksi t(1,3)). Tämän jälkeen ekstensionaaliselta tasolta olisi löytynyt indeksiävastaava rakenne tframe53617(4566545,steel,4). Jos halutaan käsitellä terminmukaista oliota, tarvitaan siihen tarkoitukseen suunnittelemaani predikaattia,joka muuttaa esityksen Prolog++ -mukaiseksi olioesitykseksi. Predikaattimuuntaa tuplen nimeä esittävän merkkijonon siten, että se poistaa t-kir<strong>ja</strong>imennimestä <strong>ja</strong> irrottaa kir<strong>ja</strong>inosuuden numero-osuudesta. Lopuksi esitys viimeistelläänsuluilla <strong>ja</strong> | -merkillä. Lopputulokseksi yllä olevasta frame-rakenteestasaadaan oliotunnus (frame|53617), jota käytetään viitattaessa muistissa olevaanolioon. Oliotunnuksen selvittämisen jälkeen oliota käsitellään normaalisti, koskakaikki sen metodit <strong>ja</strong> attribuutit ovat käytettävissä.Siirryttäessä ekstensionaaliselta tasolta intensionaaliselle tasolle tarvitaanpredikaattia, joka kykenee antamaan ekstensionaaliselta tasolta indeksit, jotkaliittyvät tiettyihin arvoihin tai olioihin. Predikaatti tuottaa myös useammanindeksin tarvittaessa. Jos esimerkiksi halutaan saada arvoon 6 liittyvä intensionaalisentason vastinkäsiteet selville, kolmipyörän ekstensionaalisen tason esityksestä,saadaan vastaukseksi indeksi t(1,6,4,1). Tämän jälkeen Prolog-ohjelmaetsii indeksiä vastaavan nimen intensionaalista tasoa vastaavasta binäärirelaatioesityksestä.Vastaukseksi esimerkin yhteydessä saadaan attribuutti diam. Onhuomionarvoista, että arvo olisi voinut esiintyä useammassa kohtaa ekstensionaalisellatasolla, jolloin kaikkien kohtien indeksit olisivat tulleet vastaukseksi.Prolog++ esitystapa edellyttää seuraavia suoritusvaiheita osakokonaisuussuhteitasisältäviä rakenteita toteutettaessa: Ensin mallinnetaanluokka normaalin olio-orientoituneisuuden mukaisesti Prolog++:lla. Tällöinmallinta<strong>ja</strong> päättää, periytyykö luokka mahdollisesti jostain yläkäsitteestä, <strong>ja</strong>mitä attribuutte<strong>ja</strong> <strong>ja</strong> metode<strong>ja</strong> luokalle määritellään. Tämän lisäksi luokallemääritellään sen mahdolliset osat. Osien tulee olla luokkia, jotka on määritelty
48Prolog-ohjelmassa aikaisemmin kuin niiden kompositio. Tämän jälkeenjohdetut attribuutit muodostetaan metodien avulla. Johdettujen attribuuttienvaatimuksena on se, että ne ovat yksipaikkaisia metode<strong>ja</strong>. Metodin ollessa yksipaikkainensitä voidaan soveltaa Prolog++:ssa samalla tavalla kuin attribuutte<strong>ja</strong>kin.Tällöin käyttäjän ei tarvitse tietää, onko kyseessä johdettu- vai normaaliattribuutti. Edellä olleet tehtävät riippuvat kulloisestakin sovellutusalueesta,missä kyselykieltä tullaan käyttämään. Näiden vaiheiden lisäksi prototyyppitoteutuksessaon suoritettava manuaalisesti sekä tulostusmetodin määrittäminenluokkaan, että intensionaalisen esityksen laatiminen. Tulevaisuudessa tämä työon tarkoitus saada käyttäjälle automaattiseksi tai graafisella käyttöliittymälläsuoritettavaksi. Myös ensimmäisen pakollisen vaiheen tulostusmetodin saamistaautomaattiseksi tutkitaan <strong>ja</strong>tkossa.5.4.3. PSE-tietokannan kuvaus <strong>ja</strong> esimerkkitietokantaTietokannan tulee sisältää kaikkien ylimpien tasojen oliotyyppien (top-type)intensionaalinen kuvaus aiemmin esitetyllä tavalla. Oletetaan, että tietokantakoostuu kahdesta polkupyörätyypistä, aiemmin esitetystä tricycle:stä <strong>ja</strong> lisäksiJunkkarin [2001] työssä esitetystä bicycle:stä. Tällöin tietokantaan totetutetaanniihin liittyvät intensionaalisen tason esitykset. Intensionaalista tasoa ei siis oletarkoitus esittää kaikista tricycle:n <strong>ja</strong> bicycle:n alikokonaisuuksista itsenäisinäkuvauksina. Jos sen si<strong>ja</strong>an pyörien alikokonaisuuksia luodaan itsenäisinä osina,tulee myös alikokonaisuuksien intensionaalinen esitys toteuttaa erikseen.Seuraavaksi esittelen esimerkkitietokannan, joka koostuu kolmesta tricycleoliosta<strong>ja</strong> kolmesta bicycle-oliosta. Tricycle-luokan osa-kokonaisuusrakenne onsama, kuin aikaisemmissa esimerkeissä. Tällöin tricycle:llä oli ainoastaan yksiilmentymä. Tarkastelen myöhemmin esiteltäviä esimerkkikyselyjä tähän esimerkkitietokantaanperustuen. Esimerkkitietokannan <strong>toteutus</strong> muodostuu siiskahdesta intensionaalisen tason Prolog-esityksestä <strong>ja</strong> kuudesta ekstensionaalisentason Prolog-esityksestä. Prolog-termeinä tietokantaa ei tässä yhteydessäenää esitetä, koska termit ovat <strong>toteutus</strong>rakenteita, joista ky<strong>selykielen</strong> käyttäjänei tarvitse olle selvillä. Sen si<strong>ja</strong>an havainnollistan tietokantaa aikaisemmin käyttämällänisisäkkäisten taulukoiden mukaisella visualisointitavalla. Visualisoinnistaon jätetty tilankäytön vuoksi johdettu attribuutti weigth pois, vaikkase oletetaan esimerkkikyselyissä olevan mukana. Weigth on siis jokaisella PSEesityksenkompositiolla johdettuna attribuuttina <strong>ja</strong> se on toteutettu metodinavulla. Perusoliotyypeillä weigth on normaali attribuutti. Ennen bicycle-osakokonaisuussuhteentaulukkoesitystä havainnollistetaan bicyclen rakenne kuvassa5.
- Page 1 and 2: Osa-kokonaisuussuhteen käsittelyyn
- Page 3 and 4: ii1. Johdanto .....................
- Page 5 and 6: ivTermitC++ Proseduraalinen ohjelmo
- Page 7 and 8: 2nen tapa poistaa kompleksisuutta o
- Page 9 and 10: 4abc d e f ghiKuva 1. Esimerkki osa
- Page 11 and 12: 6ovat osa autoa ja fonologia on osa
- Page 13 and 14: 8liittyy usein poissulkeutuvuusomin
- Page 15 and 16: 10voidaan jakaa kahteen periytymise
- Page 17 and 18: 12kahierarkian luokkiin. Oliolla on
- Page 19 and 20: 14nimistä. Lisäksi rakenteeseen e
- Page 21 and 22: 16(oid1, ).”Helkama”, ohjaus: o
- Page 23 and 24: 18class departmenttype [dept_name:s
- Page 25 and 26: 20kossa oleva joukko sisältää yh
- Page 27 and 28: 22kaksisuuntaisesti. Seuraavaksi ta
- Page 29: 24poa ja etenkin päivitykset ovat
- Page 32 and 33: 27minen tapahtuu intensionaalisella
- Page 34 and 35: 29siten, että eri hyttityypit on j
- Page 36 and 37: 314.7. Muita kielen vaatimuksia osa
- Page 38 and 39: 33Osa-kokonaisuussuhteita sisältä
- Page 40 and 41: 35oliotyyppejä on mahdollista esit
- Page 42 and 43: 37Yllä oleva ekstensionaalinen tas
- Page 44 and 45: 39Toteutuskielen tulee täyttää k
- Page 46 and 47: 41Sääntö tulkitaan luonnollisen
- Page 48 and 49: 43Luokan määrittäminen aloitetaa
- Page 50 and 51: 45pse([map(tricycle,t(1)),map(price
- Page 54 and 55: 49FRAMESADDLETRICYCLESTEERINGKun si
- Page 56 and 57: 516. Kielen primitiivit ja esimerkk
- Page 58 and 59: 53X = steering, X = tricycle, X = d
- Page 60 and 61: 551. arg1 is_instance_of arg22. arg
- Page 62 and 63: 57gointitiedotilmaistaan aggregoint
- Page 64 and 65: 59täsmälleen samat rivit poisteta
- Page 66 and 67: 61res(X) where diam is_property_of
- Page 68 and 69: 636.3.2. Ekstensionaaliset kyselytE
- Page 70 and 71: 65res(aluminium).Jos käyttäjä ei
- Page 72 and 73: 67res(C,Material,sum(Comp:weigth))
- Page 74 and 75: 697. YhteenvetoTutkielmassa tarkast
- Page 76 and 77: 718. Lähdeluettelo[Agrawal, 1987]
- Page 78 and 79: 73[Moss, 1994] Chris Moss, Prolog++