2013 m. rugsėjo 18 d., trečiadienis

PIM „esybės - proceso" modeliavimo kalba



Norint realizuoti eksperimentinę transformaciją, kaip minėjau 2.1 skyriuje, reikia sukurti išeities ir tikslo modeliavimo kalbas. Pradinėje tyrimo stadijoje buvo sukurta PIM modeliavimo kalbą. Ši kalba buvo pavadinta „esybės - proceso" modeliavimo kalba. PIM kalbos sudarymui buvo nustatyti sekantys reikalavimai:
1.      Kalba turi būti paprasta, ir tūrėti mažai techninių detalių;
2.      Kalboje turi išsiskirti du pagrindiniai verslo probleminių sričių elementai - tai esybės ir procesai:
a.    Esybė - tai duomenų struktūravimo vienetas, kuris saugo informaciją apie
probleminės srities objektą ir jo būseną. Galima išskirti du esybių tipus: tai
išsaugančios savo būseną tik vykdymo metu
(runtime) ir nuolat išsaugančios savo
būseną
(persistent).
b.    Procesas - tai būsenos neturintis probleminės srities elementas, kuris savyje
paslepia
(encapsulates) vykdymo logiką. Elementarus proceso žingsnis - metodas,
kuriam galima apibrėžti parametrus ir gražinamą rezultatą. Procesai negali saugoti
savo būsenos
(stateless).
3.      Kalboje galima apsibrėžti duomenų tipus, kurie bus naudojami atominiam atributam sukurti;
4.      Tarp esybių galima nustatyti sąryšius, palaikomas ryšių kardinalumas 1:1, 1:N;
5.      Turi būti galimybė apibrėžti tipizuotus objektų sąrašus.
Sukurtos PIM modeliavimos kalbos metamodelių paveldėjimo hierarchija parodyta 7 pav..


NamedElement

Identifier
Ę>name : String













NamedElement
Abstraktus metamodelio elementas. Jo egzempliorius negali būti sukurtas, tačiau jis apibrėžia bendrą visiems metamodelio elementams (išskyrus identifikatorių) savybę - vardą.
Package
Modelio elementų grupavimo mechanizmas. Package elementas iš principo atitinka UML kalboje naudojama elementą su tuo pačiu pavadinimu.
Parameter
Tai metodo parametro metaklasė. Privalomas nurodyti parametro duomenų tipas (DataType).
PersistentEntity
Nuolat savo būsena išsauganti (persistent) esybė. Tokia esybė būtinai turi turėti identifikatorių, jeigu jo neturi tėvinė esybė. PersistentEntity metaklasės egzempliorius (klasė) gali būti susieta paveldėjimu tik su tokia klase, kurios metaklasė taip pat PersistentEntity.
PersistentProperty
Tai atributų nuolat išsaugančių savo būseną (persistent) metaklasė.
PrimitiveType
Taip primityviem tipam kurti skirta metaklasė.
Process
Verslo procesą modeliuojanti metaklasė. Verslo procesai negali tūrėti būsenos (stateless) ir nepalaiko paveldėjimo sąryšio.
Property
Abstrakti esybės atributo metaklasė. Negalima sukurti nė vieno jos egzemplioriaus.
SimpleEntity
Būseną tik vykdimo metu išlaikanti esybė (non-persistent).
SimpleProperty
Būseną tik vykdymo metu išlaikantis esybės atributas (non-persistent).

„Esybės - proceso" metamodelio elementų ryšiai pavaizduoti 8 pav.. Matome, kad kiekvieno modelio (metamodelio egzemplioriaus) klasių pagrindinis konteineris yra Domain metaklasės egzempliorius. Domain metaklasė kompozicijos ryšiais susieta su Package ir PrimitiveType metaklasėmis, o visi likę duomenų tipai ir Process egzemplioriai - gali būti talpinami tik į Package elementus. Paketų kompozicijos ryšys - rekurentinis, t.y. paketas gali turėti kitus paketus.

NamedElement
£>J^>name : String


+type



Text Box: +paren1 +owi


Process



+process


nPerPalckagpackage+oWnerPaCkage

Entity

A

Reference
+referer8^ggregation : Boolean = felse
_____ ^ c^>byValue : Boolean = false
0 -{^lowerBound : Integer = 0 flipperBound : Integer = -1



+ownerP roc^ss

SimpleEntity

+parent









Text Box: Property


Text Box: +domain


Text Box: +meth(R.n
Method

Domain

+dataType
0 n
DataType
+returnType
+properto..n
SimpleProperty


1
+owi

įerMethod

+domain

+type 1

PrimitiveType

+type
1

+type

+parameter
Parameter

List

0.. n

+dataType




8 pav. - „Esybė-procesas" PIM metamodelio elementų ryšiai (2 dalis)
Paketai - tai modelio elementų grupavimo mechanizmas. Paketo sudėtinės dalys gali būti esybės, ir duomenų tipai (esybės, paprasti duomenų tipai ir sąrašai).
Tarp nuorodų gali būti sukuriamos nuorodos (references). Nuorodom galima nurodyti jų tipą, pavadinimą, agregavimo būdą (kompozicija ar agregavimas) bei kardinalumą.
9 pav. vaizduoja būseną išsaugančių esybių ir jų atributų sąryšius. Matome, kad būseną išsauganti esybė, gali turėti ne tik būseną išsaugančius laukus, bet ir tik vykdymo metu saugomus laukus. Paminėsime, kad būseną nuolat išsaugančių ir būseną tik vykdymo metu išsaugančių objektų paveldėjimo medžiai yra atskirti.
„Esybė - procesas" metamodelio formali specifikacija XMI 2.0 formate pateikta priede
10.1.


Entity

ModelElement


A

+parent   PersistentEntity

^Identifier

Property

   

A A



+persistentPi

1 +member
'oPertyistentProperty



+simp|eProperty simpleProperty


9 pav. - „Esybė-procesas" PIM metamodelio būsenas išlaikančios esybės (3 dalis)
Sukurto PIM metamodelio pagrindu, naudojant EMF priemones, buvo sukurtas modelio redaktorius. Pavyzdinio metamodelio egzemplioriaus atvaizdavimas parodytas 10 pav.. Naudojant „Esybė - procesas" modelio redaktorių galima sukurti PIM modelio egzempliorių, kurį vėliau naudosime eksperimentinėms modelių transformacijoms.
ĘĮ-ĮŽĮ platformi/resource/pemodel/Banking.pemodel Ėl-(į) Domain Banking
Primitive Type Integer O Primitive Type String © Primitive Type Float Q Package com - Q Package banking Ėl-j Package crm
Process CustornerManager
Parameter name Ė-0 Simple Entity CustornerScreenData ■■■I  I Simple Property screenNo -I  I Simple Property custornerName i Persistent Entity Customer Reference account Reference address ■(B) List CustomerList Package common :-■ O Persistent Entity Person Identifier I  I Persistent Property personID
. b Persistent Property personName
Q Persistent Entity Address Package accounting


10 pav. -- Pavyzdinis „esybė-procesas" metamodelio egzempliorius
Redaktorius atvaizduoja visą XMI formate saugomą modelio egzempliorių kaip medžio struktūrą. Kiekviena medžio viršūnė atitinka tam tikros metamodelio klasės egzempliorių. Modelio redaktoriaus piktogramų aprašymai pateikiami 5 lent..




4  PSM METAMODELIŲ SUDARYMAS
Antroje tyrimo stadijoje buvo sukurtos dvi platformom specifinės modeliavimo kalbos.
Kadangi PIM modelis apibrėžia būsenas išsaugančias esybes tai buvo pasirinkta sukurti reliacinį PSM. Šio PSM modelis sąlyginai pavadintas SQL modeliu. Visos PIM išsaugančios būseną esybės ir jų sąryšiai transformuojami į reliacinį modelį. Taikomosiose realizacijose gautas reliacinis modelis būtų naudojamas DDL (Data Definition Language) resursam generuoti. Reliacinis metamodelis detalizuotas 4.1 skyriuje.
Kadangi transformacijų tikslas yra gauti detalizuotą PSM modelį iš kurio galima būtų vėliau gauti programinį kodą, tai kaip vykdymo platformą pasirinkta Java kalba. Java kalbai modeliuoti sukurtas Java PSM. Java metamodelio sandara detaliau aprašyta 4.2 skyriuje.

4.1 Reliacinis metamodelis
Kuriant reliacinio modeliavimo PSM kalbą, buvo sukurta reliacinio modeliavimo kalba, kuri suteikia galimybę modeliuoti duomenų bazių lenteles, duomenų tipus, lentelių stulpelius, išorinius ir pirminius raktus. Sukurtas reliacinis metamodelis modeliuoja esmines reliacinių duomenų bazių bruožus ir neskirtas jokiai konkrečiai DBVS. Kuriant reliacinį tikslo metamodelį buvo apsibrėžti tokie reikalavimai:
1.      Modeliavimo kalba turi suteikti galimybę apibrėžti esybes atitinkančias lenteles ir tų lentelių stulpelius;
2.      Stulpeliams galima nurodyti netik tipą, bet to tipo dydį (pvz. VARCHAR(32));
3.      Turi būti galimybė sukurti reikiamą duomenų tipą;
4.      Kalba turi leisti nurodyti kurie lentelės stulpeliai yra pirminiai raktai;
5.      Reliacinio modeliavimo kalba turi leisti nurodyti kurie lentelės stulpeliai yra išoriniai raktai ir kokius išorinės lentelės stulpelius jie atitinka;
6.      Turi būti galimybė nurodyti kokį išorinės lentelės unikalų raktą atitinka pasirinktos lentelės išorinis raktas.
Bazinė visų reliacinio metamodelio elementų klasė - SqlNamedElement. Šita klasė turi vienintelį atributą name. Database klasės egzempliorius yra išorinis viso modelio egzemplioriaus konteineris. Database klasės egzemplioriaus sudėtinės dalys - tai lentelės Table ir paprasto duomenų tipo SqlDataType egzempliorių rinkiniai. Table klasės egzemplioriai modeliuose gali turėti stulpelio (Column), rakto (Key) ir išorinio rakto
28

(Foreign) elementus. Išorinio rakto klasės egzempliorius privalo turėti nuorodą į išorinio rakto objektą, taip pat ForeignKey klases egzempliorių sąrašą, kur kiekvienas objektas nurodo koks vietinis stulpelis surištas su atitinkamu išoriniu stulpeliu.



SqlNamedElement
funame : String

DatabaseElement

lElements

Database

Text Box: 0..n
Column
TableElement

SqlDataType
+type
<---------------------------------

1
+column
1.. n

Table

^>allowNull : Boolean = true >size : Integer



+candidajeKe|y +primaryKey<ey

+coiumn..-+iocai ^foreigni

+referencedKey

+foreignKey
ForeignKey

+foreignReireignReference

0.. n

1.. n





ForeignReference
Metaklasė, kurios egzempliorius apibrėžia koks vienos lentelės išorinio rakto stulpelis susijęs su kitos lentelės stulpeliu.
Key
Metaklasė,   kurios   egzempliorius   nurodo,   kokie   lentelės stulpeliai yra tos lentelės raktai.
SqlDataType
Duomenų tipą modeliuojanti metaklasė.
S qlNamedElement
Abstrakti metaklasė - bazinė visų Reliacinio metamodelio elementų klasė.
Table
Lentelę modeliuojantis metamodelio elementas.
TableElement
Abstrakti lentelės sudedamąją dalį modeliuojanti metaklasė.

Aprašyto reliacinio metamodelio formali specifikacija XMI formate pateikta 10.2 priede. Metamodelio specifikacija buvo sukurta naudojant EMF aplinkos priemones.
Naudojant sudarytąjį metamodelį ir EMF aplinkos įrankius, buvo sukurtas reliacinio PSM modelio redaktorius. Redaktoriaus priemonėmis, galima sudaryti reliacinius modelius. Pavyzdinis reliacinio modelio egzempliorius redaktoriaus lange pavaizduotas 12 pav..
platform i/resource/test/Banking.sqlrnodel
B-Q Database BANKING_DB B-H Table CUSTOMER
■ED Column PER50N_FK_PK ■ED Column ADDRE55_REF_FK B-J£+ Foreign Key PER50N_FK_KEY
.... ^ ForeignReference
B-^ Foreign Key ADDRE55_REF_FK_KEY
1. ß Key PER50N_FK_PK_KEY
B-H Table PER50N
ED Column PER50NNAME ED Column PER50N5URNAME
!. ED Column PER50N55N
ED Column PER50NPER50NNO ED Column PER50NID
1. ß Key PER50N_ID_KEY
B-H Table ADDRE55 Ö-H Table ACCOUNT Ö-H Table PAYCARD ■H 5ql Data Type INTEGER
     5ql Data Type VARCHAR
     5ql Data Type FLOAT

12 pav. -- Pavyzdinis reliacinio metamodelio egzempliorius
Mūsų tyrime, reliacinio modelio redaktorius bus naudojamas tik vaizdiniam modelių demonstravimui, nes reliacinį modelį iš PIM modelio sukurs transformacijos realizacija. Reliacinio modelio redaktorius atvaizduoja reliacinį modelį saugomą XMI formato byloje.
Kiekvienas atvaizduojamo modelio elementas parodomas kaip medžio viršūnė su tam tikra piktograma. Piktogramų aprašymai pateikti 7 lent..
7 lent. -- Reliacinio PSM modelio piktogramos ir jų reikšmės

Piktograma
Paaiškinimas
j 1
Duomenų bazės modelio elementas. Atitinka Database klasės egzempliorių.
i
Primityvaus duomenų tipo elementas. Atitinka SqlDataType klasės egzempliorių.
H
Lentelės tipo elementas. Atitinka Table klasės egzempliorių.
ra
Stulpelio tipo elementas. Atitinka Column klasės egzempliorių.

Rakto tipo objektas. Atitinka Key klasės egzempliorių.

Išorinio rakto tipo objektas. Atitinka ForeignKey klasės egzempliorių.
w
Saito tarp lokalaus stulpelio ir išorinio rakto stulpelio egzempliorius. Atitinka
ForeignReference klasės egzempliorių.


4.2 Java kalbos metamodelis
Tyrimo metu sudarytas Java kalbos metamodelis. Sudarant metamodelį buvo remiamasi Java kalbos specifikacija [11]. Modeliui nustatyti tokie bendrieji reikalavimai:
1.      Java kalbos PSM turi modeliuoti Java kalbos struktūrą [11, 13p.];
2.      Turi būti galimybė modeliuoti Java kalbos duomenų tipus [11, 31p.];
3.      Galimybė modeliuoti Java klases ir sąsajas [11, 135p., 199p.];
4.      Turi būti galimybė modeliuoti klasių išplėtimo (extends) ir realizacijos (implements) sąryšius [11, 142-144p.];
5.      Java modelio klasės gali tūrėti sudėtinius elementus [11, 140p.]: atributus, metodus ir vidines klases;
6.      Turi būti galimybė modeliuoti klasių, laukų ir metodų modifikatorius (modifiers) ir jų pagrindines savybes.
Sudarytojo Java PSM metamodelio paveldėjimo hierarchija pateiktas diagramoje 13 pav., o metamodelio elementų sąryšiai atvaizduoti 14 pav..




JavaClass
^abstract : Boolean trinai : Boolean ^Interface : Boolean
JavaField
c^>flnal : Boolean ^transient : Boolean ^volatile: Boolean ^Initializer: String
JavaMethod
|abstract : Boolean (final : Boolean į>natlve : Boolean Asynchronized : Boolean ^constructor: Boolean |body : String












Javalnitializer Embody : String

Text Box: 13 pav. -- Java kalbos PSM metamodelio paveldėjimo hierarchija
Bazinis visų Java kalbos metamodelio elementas - t;


JavaModelElement klasė. Šita klasė turi vienintelį atributą name, kurį paveldi visi kiti metamodelio elementai. JavaApplication klasė - tai išorinis viso metamodelio egzemplioriaus konteineris, kurio sudėtinės dalys gali būti tik JavaPackage egzemplioriai. JavaPackage klasė atitinka Java programavimo kalbos paketą.
JavaMember klasės egzemplioriai modeliuoja sudėtinius Java kalbos klasės elementus: vidines klases, metodus ir laukus. Vidines ir paprastas Java kalbos klases atitinka JavaClass modelio elementas. Šitam modelio elementui apibrėžtos papildomos savybės: abstraktumas (laukas abstract), paveldėjimo draudimas (laukas final) ir laukas nusakantis ar klasė yra sąsaja.
Vienas iš galimų JavaClass elementų JavaField, turi papildomus, Java kalbos sintaksės elementus, atitinkančius laukus: final, transient, volatile ir inicializatoriaus išraišką.
Kitas galimas Java klasės elementas - metodas (JavaMethod) apibrėžia tokius papildomus atributus:
1.      final - šitas atributas nurodo ar metodas gali būti perrašytas paveldėjusioje klasėje;
2.      native - nurodo ar metodas nėra išorinio dinaminės bibliotekos iškvietimas pagal C konvenciją;





4.

synchronized - nurodo ar metodas gali būti vykdomas vienos ar kelių lygiagrečių vykdymo gijų;
constructor - laukas nurodo ar metodas yra klasės inicializatorius.











Text Box: 0..n


Text Box: +package




JavaPackage

+member

JavaMember

JavaApplication

+package

0.. n

Astatic : Boolean ^visibility : JavaVlsiblllty

+subpackage
+containingType types0..n

Text Box: fsuperïy.JavaClass
+type
^abstract : Boolean = false [ final : Boolean = false
___ [interface : Boolean = false]-      .
+type




1 ^generate : Boolean = truèY^P1101"1
JavaField
^flnal : Boolean = false +fieldtransient : Boolean = false ^■volatile : Boolean = false '^■Initializer: String = false

«enumeratlon» JavaVisibillty
^public ^protected Sįjprivate Sįjpackage

JavaMethod

Text Box: +methodText Box: 0.. nText Box: +methodText Box: parameter


JavaParameter
įfinal : Boolean

^abstract : Boolean %>flnal : Boolean %>natlve : Boolean Asynchronized: Boolean
[constructor: Boolean 'Sj>body : String

0.. n


14 pav. -- Java kalbos PSM metamodelio elementų sąryšiai
Java kalbos metamodelio klasių aprašymai pateikti 8 lent..

8 lent. -- Java PSM metamodelio klasės

Metamodelio klasė
Aprašymas
JavaApplication
Java kalba parašyto programos kodo visumą modeliuojanti metaklasė.
JavaClass
Java duomenų tipą modeliuojanti  klasė.  Gali  atitikti paprastąją ar abstrakčiąją klasę, sąsają arba duomenų tipą.
JavaField
Java klasės atributą modeliuojanti metaklasė.
Javalnitializer
Lauko inicializatorių modeliuojanti klasė.
JavaMember
Klasės   sudėtinį   komponentą   modeliuojanti   abstrakti metaklasė.
JavaMethod
Java funkciją modeliuojanti metaklasė.





Komentarų nėra:

Rašyti komentarą