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.

42logiksi. Se on eräs tapa toteuttaa logiikkaohjelmana<strong>ja</strong>minenperäkkäiskäsittelyyn orientoituneella tietokoneella. Prolog prosessoi kyselyjenratkaisemisen yhteydessä lauseita niiden esittämisjärjestyksessä <strong>ja</strong> rungon tavoitteitavasemmalta oikealle. Prologilla ohjelmoitaessa ei siis päästä tästä syystätäysin eroon proseduraalisesta a<strong>ja</strong>ttelutavasta, vaan ohjelmoi<strong>ja</strong>n on otettavatämä ominaisuus huomioon. Joskus lauseiden <strong>ja</strong> tavoitteiden järjestys voimuuttaa ohjelman merkitystä. Prolog simuloi epädeterminististä valintaa samaistamisalgoritmin<strong>ja</strong> peruutuksen avulla [Sterling and Shapiro, 1986]. Lisäksilauseiden suoritusjärjestykseen voi vaikuttaa leikkaukseksi kutsutun menetelmänavulla.5.3.3. Prolog++Prolog++ on kieli, joka on rakennettu normaalin Prologin päälle lisäämällä siihenolio-ohjelmoinnin piirteitä. Se tukee esimerkiksi luokan, olion, luokan metodin<strong>ja</strong> periytymisen käsitteitä. Myös olio-ohjelmoinnista tutut suo<strong>ja</strong>usmääreetprivate <strong>ja</strong> public, voidaan antaa metodeille <strong>ja</strong> attribuuteille. Kieli tukee myöspoikkeuksien käsittelyä [Moss, 1994]. Kieli yhdistää siis logiikkaohjelmoinnilletyypillisen deklaratiivisuuden <strong>ja</strong> olio-orientoituneisuudelle tyypillisen mallintamisvoiman.Siksi sen on valittu tutkielmassa kehitetyn ky<strong>selykielen</strong> <strong>toteutus</strong>kieleksi.Prolog++:ssa luokka määritellään esittelemällä luokan nimi <strong>ja</strong> siihen liittyvätattribuutit <strong>ja</strong> metodit. Attribuutit ovat loogisia muuttujia, kuten Prologissayleensä. Metodit ovat puolestaan normaale<strong>ja</strong> Prolog–predikaatte<strong>ja</strong>, eli ne voivatolla fakto<strong>ja</strong> <strong>ja</strong> sääntöjä. Jos luokan komponentteina on muita luokkia, ne määritelläänilmaisulla parts osa1, osa2,…,osaN, jossa osat 1-N ovat muualla ohjelmassamääriteltyjä luokkia. Kun osia sisältävä luokan ilmentymä luodaan,myös sen osat luodaan samalla kertaa. Tämän ominaisuuden johdosta kielellävoidaan tehdä luonteeltaan vain poissulkevia komponentte<strong>ja</strong>. Luokan määrittämisendemonstroimisessa käytän aiemmin esitettyä kolmipyöräesimerkkiä.Käytän sitä myös myöhemmin Prolog-perustaista PSE-esitystapaa esiteltäessä.Esimerkki poikkeaa PSE-esimerkistä vain siinä, että tässä esimerkissä mukanaon myös metodi weigth, joka palauttaa osiensa painon summan.class tricycle.public instance attribute price.parts frame,saddle,steering,rear.weigth(X) :- frame#1

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

Saved successfully!

Ooh no, something went wrong!