21
Logiikkakielen upottaminen olio-ohjelmaan Pietu Pohjalainen

Logiikkakielen upottaminen olio-ohjelmaan

  • Upload
    liseli

  • View
    31

  • Download
    0

Embed Size (px)

DESCRIPTION

Logiikkakielen upottaminen olio-ohjelmaan. Pietu Pohjalainen. Kielten luokittelu paradigmoittain. Lähde: Appleby & VandeKopple, 1997. Paradigman tiukkuus. Ovatko tiukasti yhdessä paradigmassa pysyttelevät kielet käytännöllisiä ? - PowerPoint PPT Presentation

Citation preview

Page 1: Logiikkakielen upottaminen olio-ohjelmaan

Logiikkakielen upottaminen olio-ohjelmaan

Pietu Pohjalainen

Page 2: Logiikkakielen upottaminen olio-ohjelmaan

Kielten luokittelu paradigmoittain

ProgrammingLanguage Paradigms

Imperative Declarative

Procedural Object-based Parallel

Block-structured Object-oriented

Logic Functional Database

Lähde: Appleby & VandeKopple, 1997

Page 3: Logiikkakielen upottaminen olio-ohjelmaan

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

Page 4: Logiikkakielen upottaminen olio-ohjelmaan

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ä

Page 5: Logiikkakielen upottaminen olio-ohjelmaan

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]); }}

Page 6: Logiikkakielen upottaminen olio-ohjelmaan

Toteutus funktionaalisella kielellä

filter(c,

lambda(’i),

(#’<, i, (#’avg, c) ),

(#’print, i)

)

Page 7: Logiikkakielen upottaminen olio-ohjelmaan

Toteutus upotetulla logiikkakielellä

solve(”LESSER(x, ” + average(c) + ”)”)

while(i = nextResult()) {

print(i);

}

Page 8: Logiikkakielen upottaminen olio-ohjelmaan

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

Page 9: Logiikkakielen upottaminen olio-ohjelmaan

Yleinen kehitysprosessimalli moniparadigmaympäristöön

Page 10: Logiikkakielen upottaminen olio-ohjelmaan

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

Page 11: Logiikkakielen upottaminen olio-ohjelmaan

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ö

Page 12: Logiikkakielen upottaminen olio-ohjelmaan

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"); } } }

Page 13: Logiikkakielen upottaminen olio-ohjelmaan

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ä

Page 14: Logiikkakielen upottaminen olio-ohjelmaan

Järjestelmän rakennekaavio

Asiakasohjelma antaa koneistolle kyselyitä

Jäsentäminen JavaCC:llä

Päättelyprosessi käyttäen nykyistä sidontaa

Page 15: Logiikkakielen upottaminen olio-ohjelmaan

Kyselykieli

Yksinkertainen syntaksiCONSTRAINT ::=

{'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’) andclass(y) andextends(y, x) andnot interface(y)

Page 16: Logiikkakielen upottaminen olio-ohjelmaan

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

Page 17: Logiikkakielen upottaminen olio-ohjelmaan

Esimerkki

Jäsennetään Asetetaan kysely

pinon huipuille Päättelyprosessin

valmistuttua saadaan vastaukset avain-arvo -pareina

Page 18: Logiikkakielen upottaminen olio-ohjelmaan

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)

Page 19: Logiikkakielen upottaminen olio-ohjelmaan

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

Page 20: Logiikkakielen upottaminen olio-ohjelmaan

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

Page 21: Logiikkakielen upottaminen olio-ohjelmaan

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