Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Logiikkakielen upottaminen olio- ohjelmaan Pietu Pohjalainen.

Samankaltaiset esitykset


Esitys aiheesta: "Logiikkakielen upottaminen olio- ohjelmaan Pietu Pohjalainen."— Esityksen transkriptio:

1 Logiikkakielen upottaminen olio- ohjelmaan Pietu Pohjalainen

2 Kielten luokittelu paradigmoittain Programming Language Paradigms Imperative Procedural Block-structured Object-based Object-oriented Parallel Declarative LogicFunctionalDatabase Lähde: Appleby & VandeKopple, 1997

3 Paradigman tiukkuus Ovatko tiukasti yhdessä paradigmassa pysyttelevät kielet käytännöllisiä? Vai onko niin, että luonteeltaan erilaiset ajattelutavat soveltuvat erilaisten ongelmien ratkaisemiseen ? Esimerkiksi C++:an sanotaan olevan moniparadigmakieli

4 Esimerkki ajattelueroista Ongelma: tulosta kaikki joukossa olevat luvut, jotka ovat pienempiä kuin joukon keskiarvo Hahmotellaan toteutus imperatiivisella ja funktionaalisella kielellä, sekä Idean selventämiseksi Javaan upotetulla logiikkakielellä

5 Toteutus imperatiivisella kielellä Collection c = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int avg = average(c); for(int i=0; i<c.size(); i++) { if(c[i] < avg) { print(c[i]); }

6 Toteutus funktionaalisella kielellä filter(c, lambda(’i), (#’<, i, (#’avg, c) ), (#’print, i) )

7 Toteutus upotetulla logiikkakielellä solve(”LESSER(x, ” + average(c) + ”)”) while(i = nextResult()) { print(i); }

8 Logiikkakielen upottaminen oliokieleen – Miksi ja mitä ? Motivaatio: Ymmärtää miten logiikkakielet toimivat Motivaatio: Mahdollisuus hyödyntää logiikkakielelle ominaisia rakenteita ’oikeissa’ ohjelmistoissa Käytännössä: Konfiguroitavissa olevan propositiologiikkakoneen toteuttaminen Javalla

9 Yleinen kehitysprosessimalli moniparadigmaympäristöön

10 Ongelma-alueen mallinnus Vastaa kysymykseen: mitkä ovat ne asiat, joiden välisistä suhteista haluamme puhua.. ja joista puhumiseen käytetty koneisto on riittävä Vaiheen tuloksena sen, minkä voi sanoa, voi sanoa selvästi ja mistä ei voi puhua, joudutaan toteuttamaan perinteisin keinoin

11 Predikaattien toteuttaminen Edellisestä vaiheesta tulee predikaatteja CLASS(x), EXTENDS(x, y) jne. Kullekin näistä toteutetaan kaksi metodia: 1. totuussääntö, palauttaa TRUE tai FALSE 2. luettelointisääntö

12 Esimerkkipredikaatti STRING(x) public class StringProposition implements Proposition { public Object evaluate(VariableOrLiteral arg) { if(arg instanceof Literal) { if("A".equals(lit.value) || "B".equals(lit.value) || "C".equals(lit.value)) { return Boolean.TRUE; } else { return Boolean.FALSE; } else if(arg instanceof Variable) { return new String[]{"A", "B", "C"}; } else { System.out.println("arg: " + arg); throw new RuntimeException("LOGIC ERR in engine"); }

13 Sitominen päättelykoneistoon Tarkoittaa predikaattien määrittelyn ja toteutuksen välistä sidontaa Esim. ’predikaatin CLASS(x) toteutus löytyy luokasta fi.helsinki.cs.emoole.classhierarchy.Class’ Tärkeää, jotta yleistä koneistoa voidaan uudelleenkäyttää muissakin yhteyksissä

14 Järjestelmän rakennekaavio Asiakasohjelma antaa koneistolle kyselyitä Jäsentäminen JavaCC:llä Päättelyprosessi käyttäen nykyistä sidontaa

15 Kyselykieli Yksinkertainen syntaksi CONSTRAINT ::= {'NOT'? PREDICATE}* PREDICATE ::= IDENTIFIER (VAR_OR_LITERAL {, VAR_OR_LITERAL}?) VAR_OR_LITERAL ::= IDENTIFIER | '.*' IDENTIFIER ::= [A-Z][A- Z0-9]* Esimerkkikysely class(x) and equals(x, ’Object’) and class(y) and extends(y, x) and not interface(y)

16 Kyselyn ratkaiseminen Aloitetaan lukemalla pinon päältä kysely Korvataan ensimmäinen muuttuja luettelointisäännön mukaisilla arvoilla (unifikaatio)  Korvattu kysely voi siis tuottaa 0-n uutta kyselyä Jos kyselyssä ei ole muuttujia, ja kaikki predikaatit saavat arvon tosi, niin kyselyyn löydettiin ratkaisu

17 Esimerkki Jäsennetään Asetetaan kysely pinon huipuille Päättelyprosessin valmistuttua saadaan vastaukset avain- arvo -pareina

18 Hyötynäkökulmia Kuvattavissa olevat asiat määriteltävissä (mielestäni) helposti Toiminnan ymmärtäminen helppoa (toistaiseksi) Predikaattien toteutuksen vaihtamisen ansiosta eri toteutusten vertailtavuus helppoa Vähentynyt kirjoittamisen vaiva (esim. 4 riviä logiikkakieltä vrs. 100 riviä Javaa)

19 Haittoja / puutteita Eri konseptien sekoittaminen lisää kognitiivista kuormaa Ei vielä integroidu olio-ohjelmointiin tarpeeksi hyvin Varsin rajoittunut ilmaisun mahdollisuus Tehokkuudesta ei vielä havaintoja – todennäköisesti paljon parannettavaa

20 Jatkokehitys Kyselyiden kääntäminen Javan tavukoodiksi Oliomaisuuden kehittäminen (kyselyiden käsittely olioina, integroituminen tyyppijärjestelmään jne.) Soveltaminen laajemmassa kuin lelu- luokan ongelmissa

21 Yhteenveto ja kysymykset? Idea logiikkaohjelmoinnin ja olio- ohjelmoinnin yhteensovittamiseksi Tämä oli järjestelmän ensimmäinen julkinen esittely – kommentteja ? Parannusehdotuksia ja vaihtoehtoisia ratkaisutapoja otetaan mielihyvin vastaan


Lataa ppt "Logiikkakielen upottaminen olio- ohjelmaan Pietu Pohjalainen."

Samankaltaiset esitykset


Iklan oleh Google