selykielen suunnittelu ja toteutus Samu Viita
selykielen suunnittelu ja toteutus Samu Viita
selykielen suunnittelu ja toteutus Samu Viita
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
19Luokan ollessa kyseessä val-funktio palauttaa attribuuttien nimet <strong>ja</strong> niidentyypit. Person-luokan yhteydessä ilmaisu person.val palauttaisi seuraavan rakenteen:[name:string,age:int,address:string,family:{person}]Ext-metodia käytetään sitomaan luokka olioihinsa. Esimerkkinä funktionkäytöstä on ilmaus ”person.ext”, joka palauttaa kaikki person-luokan oliot.OQL-ky<strong>selykielen</strong> [Cluet, 1998] yhteydessä ext-metodia vastasi ilmaus in (esimerkiksip in Polkupyörä).Deklaratiivisia operaatioita käytetään deklaratiivisten kyselyjen muodostamisessa.Jokainen deklaratiivinen operaatio on siis funktio, joka manipuloiargumentte<strong>ja</strong>an. Seuraavaksi esittelen muutaman deklaratiivisen operaation <strong>ja</strong>lopuksi esittelen muutaman QAL-kyselykieleen poh<strong>ja</strong>utuvan kyselyn.Select–operaatiota käytetään suodattamaan argumentistaan halututoliotyypit. Esimerkiksi ilmaisu s.select(p), jossa s on joko olio tai tyyppi <strong>ja</strong> p ontotuusarvotyyppinen predikaatti, palauttaa p-predikaatin toteuttavan s:ää vastaavienolioiden osajoukon. Predikaatti p voi muodostua myös sisäkkäisistäkyselyistä.Apply–operaatio evaluoi parametrina olevan funktioilmaisun argumenttijoukossa,johon operaatiota sovelletaan. Alla esittelen esimerkin, joka havainnollistaaoperaation käyttöä. Esiteltävä kysely kuvaa joukon student-luokan olioidentiteettejäkyseisissä olioissa esiintyviin nimiin. Identiteettifunktio id:täkäytetään kyselyssä tarkoittamaan yksittäistä oppilasta kaikkien oppilaidenjoukosta. Kyselyssä applyn argumenttina on siis yksittäinen oppilas. Apply käykaikki luokan ilmentymät läpi. Tämänkaltainen operaatio on iteraattori, silläoperaattori suorittaa niin monta iteraatiokierrosta, kuin joukosta löytyy käsittelemättömiästudent-luokan ilmentymiä. Ilmaisussastudent.apply(id->name)apply palauttaa kaikkien student-luokkaan kuuluvissa olioissa esiintyvät nimet.Parametrinä apply-operaatiossa voi olla mikä tahansa operaatioilmaus. Funktionaalistenkielten tapaan funktioiden palauttamaan arvoon voi edelleen soveltaafunktioita. On siis mahdollista, että apply-operaatioon sovelletaan uuttaapply-operaatiota, kuten Savnik kollegoineen [1999] seuraavassa esimerkissäänesittääkin. Siinä halutaan saada tulokseksi joukko joukko<strong>ja</strong>, joissa jokainen jou-