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.
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