45pse([map(tricycle,t(1)),map(price,t(1,1)),map(weigth,t(1,2)),map(frame,t(1,3)),map(saddle,t(1,4)),map(steering,t(1,5)),map(rear,t(1,6)),map(frame_no,t(1,3,1)),map(material,t(1,3,2)),map(weigth,t(1,3,3)),map(pad,t(1,4,1)),map(weigth,t(1,4,2)),map(h,t(1,5,1)),map(weigth,t(1,5,2)),map(front_axle,t(1,5,3)),map(handlebars,t(1,5,4)),map(pedals,t(1,5,5)),map(wheel,t(1,5,6)),map(b,t(1,6,1)),map(weigth,t(1,6,2)),map(rear_axle,t(1,6,3)),map(wheel,t(1,6,4)),map(l,t(1,5,3,1)),map(weigth,t(1,5,3,2)),map(b,t(1,5,4,1)),map(weigth,t(1,5,4,2)),map(diam,t(1,5,5,1)),map(weigth,t(1,5,5,2)),map(diam,t(1,5,6,1)),map(r_type,t(1,5,6,2)),map(weigth,t(1,5,6,3)),map(b,t(1,6,1)),map(weigth,t(1,6,2)),map(diam,t(1,6,3,1)),map(l,t(1,6,3,2)),map(weigth,t(1,6,3,3)),map(wheel,t(1,6,4)),map(diam,t(1,6,4,1)),map(r_type,t(1,6,4,2)),map(weigth,t(1,6,4,3))]).Intensionaalista tasoa esittävän Prolog-termin funktorina on atomi pse. Intensionaalisentason binäärirelaation esitän kuvaustyyppisenä rakenteena. Siinämap-parin ensimmäisenä elementtinä on attribuutin tai olion tyypin nimi <strong>ja</strong> toisenasiihen liittyvä indeksi. Esitän indeksin tuple-konstruktorina. Esimerkkinäon vain tricycle:n intensionaalisen tason esitys. Jos intensionaalisella tasolla olisimallinnettava muitakin osa-kokonaisuussuhteita, niin ne olisivat omina listoinaanpse-termin elementteinä.Aikaisempi tricycle:ä kuvaava Prolog++:lla kuvattu luokka ei ole riittäväekstensionaalisen tason esittämiseen. Luokaa muodostettaessa täytyy kyetäluomaan PSE-formalismin ekstensionaalinen esitystapa. Toisin sanoen oliontäytyy pystyä muodostamaan itsestään PSE-esitystavan mukainen ekstensionaalinenesitys. Prolog-esityksen tulee olla lisäksi sellainen, että sitä voidaanhyödyntää Prolog++:n yhteydessä. Tämä tarkoittaa sitä, että ekstensionaalisentason termiesityksestä tulee pystyä siirtymään muistissa olevaan olioon.Jotta olio pystyy muodostamaan Prolog-esityksen itsestään, täytyy oliotavastaavassa luokassa määritellä metodi, joka koostaa olion osista oikeanlaisenesityksen. Määrittelen metodin siten, että kaikki oliot tulostavat itsestään tuplerakenteen.Termin nimenä on merkkijono, jonka alku muodostuu t-kir<strong>ja</strong>imesta.Tämä vain siksi, että t-kir<strong>ja</strong>in osoittaa kyseessä olevan tuple-konstruktorin. Välittömästit-kir<strong>ja</strong>imen jälkeen merkkijonossa on oliota vastaavan luokan nimi.Tämän jälkeen merkkijonossa on olioidentiteetti. Jos kyseessä on perusolio, oliomuodostaa itsestään tuple-rakenteen, jonka sisältönä ovat olioiden attribuuttienarvot. Jos sen si<strong>ja</strong>an on kyse kompositiosta, tuple-esityksen sisällä on attribuuttienjälkeen alkioina sen komponenttien esitys tuple-rakenteena. Kompositioidenkohdalla rakenne muodostetaan siis rekursiivisesti. Rakenteen rekursiivi-
46nen muodostaminen määritellään siten, että komposition muodostaessaitseänsä se ensin muodostaa komponenttinsa. Nämä puolestaan antavat tulostuskäskynomille komponenteilleen <strong>ja</strong> niin edelleen, ellei kyseessä ole perusolio.Perusolion kohdalla muodostaminen loppuu, sillä perusoliot koostuvatvain omien attribuuttiensa arvoista. Tällä tavalla ylimmän tason olio koostaatermin koko kokonaisuudesta. Alla esitän print-metodin tähän tarkoitukseen.Metodi pitää lisätä aikaisemmin Prolog++:n yhteydessä esittämääni tricycleluokanmääritykseen. Muuten ekstensionaalisen tason PSE-termin muodostaminenajon aikana ei ole mahdollista.print(X):-(Class|No) = self,name(Class,Casc), name(No,Noasc), append(Casc,Noasc,Result1),name(t,Te), append(Te,Result1,Result),name(Oid,Result), frame#1
- Page 1 and 2: Osa-kokonaisuussuhteen käsittelyyn
- Page 3 and 4: ii1. Johdanto .....................
- Page 5 and 6: ivTermitC++ Proseduraalinen ohjelmo
- Page 7 and 8: 2nen tapa poistaa kompleksisuutta o
- Page 9 and 10: 4abc d e f ghiKuva 1. Esimerkki osa
- Page 11 and 12: 6ovat osa autoa ja fonologia on osa
- Page 13 and 14: 8liittyy usein poissulkeutuvuusomin
- Page 15 and 16: 10voidaan jakaa kahteen periytymise
- Page 17 and 18: 12kahierarkian luokkiin. Oliolla on
- Page 19 and 20: 14nimistä. Lisäksi rakenteeseen e
- Page 21 and 22: 16(oid1, ).”Helkama”, ohjaus: o
- Page 23 and 24: 18class departmenttype [dept_name:s
- Page 25 and 26: 20kossa oleva joukko sisältää yh
- Page 27 and 28: 22kaksisuuntaisesti. Seuraavaksi ta
- Page 29: 24poa ja etenkin päivitykset ovat
- Page 32 and 33: 27minen tapahtuu intensionaalisella
- Page 34 and 35: 29siten, että eri hyttityypit on j
- Page 36 and 37: 314.7. Muita kielen vaatimuksia osa
- Page 38 and 39: 33Osa-kokonaisuussuhteita sisältä
- Page 40 and 41: 35oliotyyppejä on mahdollista esit
- Page 42 and 43: 37Yllä oleva ekstensionaalinen tas
- Page 44 and 45: 39Toteutuskielen tulee täyttää k
- Page 46 and 47: 41Sääntö tulkitaan luonnollisen
- Page 48 and 49: 43Luokan määrittäminen aloitetaa
- Page 52 and 53: 47ta tiettyä arvoa tai oliota vast
- Page 54 and 55: 49FRAMESADDLETRICYCLESTEERINGKun si
- Page 56 and 57: 516. Kielen primitiivit ja esimerkk
- Page 58 and 59: 53X = steering, X = tricycle, X = d
- Page 60 and 61: 551. arg1 is_instance_of arg22. arg
- Page 62 and 63: 57gointitiedotilmaistaan aggregoint
- Page 64 and 65: 59täsmälleen samat rivit poisteta
- Page 66 and 67: 61res(X) where diam is_property_of
- Page 68 and 69: 636.3.2. Ekstensionaaliset kyselytE
- Page 70 and 71: 65res(aluminium).Jos käyttäjä ei
- Page 72 and 73: 67res(C,Material,sum(Comp:weigth))
- Page 74 and 75: 697. YhteenvetoTutkielmassa tarkast
- Page 76 and 77: 718. Lähdeluettelo[Agrawal, 1987]
- Page 78 and 79: 73[Moss, 1994] Chris Moss, Prolog++