11.07.2015 Views

selykielen suunnittelu ja toteutus Samu Viita

selykielen suunnittelu ja toteutus Samu Viita

selykielen suunnittelu ja toteutus Samu Viita

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!