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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

20kossa oleva joukko sisältää yhden oppilaan kaikkien kurssien oh<strong>ja</strong>a<strong>ja</strong>t.Kysely voidaan ilmaista seuraavasti:insts_sets = student.ext.apply(id->courses).apply((id.apply(id->instructor));Insts_sets edustaa esimerkissä joukoista koostuvaa joukkoa, johon vastaus palautetaan.Kysely kuvaa ensin joukon student-luokan olioidentiteettejä joukoksijoukko<strong>ja</strong>. Nämä sisältävät olioidentiteetin, joka viittaa kursseihin, joita oppilaatovat opiskelleet. Seuraavassa askeleessa kysely korvaa jokaisen identiteetin sisäkkäisistäjoukoista olioidentiteetillä, joka viittaa tietyn kurssin oh<strong>ja</strong>a<strong>ja</strong>an. Tämänkaltainenkysely on niin mutkikas, että kyselyn suoritta<strong>ja</strong>lla täytyy ohjelmointitaidonlisäksi olla tarkempaa ymmärrystä sisäkkäisten funktioiden soveltamisesta.Apply_at -operaatio on apply:n laajennus. Apply-operaatiota on laajennettuuudella parametrilla, jonka tehtävänä on toimia komponentin valitsi<strong>ja</strong>na.Tätä operaatiota ehdotetaan ratkaisuksi sisäkkäisten rakenteiden, eli kompleksistenobjektien käsittelyongelmaan kyselykielissä. Operaatio on muotoa apply_at(p,f),jossa apply-operaatiota on laajennettu parametrillä p. Se osoittaa argumenttinaolevan kompleksisen rakenteen komponenttipolun, josta haluttukomponentti löydetään. Komponentille suoritetaan parametrin f määräämäoperaatio. Näin siis komposiittina olevasta objektista löydetään haluttu komponentti.Komponentti voi olla välillinen tai välitön komponentti operaationargumentille.Näiden QAL-ky<strong>selykielen</strong> perusprimitiivien avulla voidaan tarkastellamonipuolisempaa esimerkkikyselyä, jonka Savnik kollegoineen esittelevät. Kyselysuodattaa sisäkkäiset komponentit department-argumentista. Komponenttiidentifioidaan attribuutilla staff. Saatu joukko, jota Savnik kollegoineen kutsuusuodatetuksi joukoksi olioidentiteettejä, sisältää viittauksen työntekijöihin, jotkaovat vanhempia kuin 45 vuotta. Kyselyn tulokselle muodostetaan ensin rakenneseuraavasti:struct {[ department_name: string, head: employee, staff: {employee} ]}depts;Luotuun depts –nimiseen rakenteeseen sijoitetaan siis kyselyn tulos. On siishuomionarvoista, että käyttäjän tulee tietää kyselyn tuloksen rakenne QAL:ssä.Kysely itsessään ilmaistaan seuraavasti:

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

Saved successfully!

Ooh no, something went wrong!