Lataa esitys
Esittely latautuu. Ole hyvä ja odota
JulkaistuRisto Kyllönen Muutettu yli 9 vuotta sitten
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
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.