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).
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).
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

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
![]() |
|||
![]() |

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

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

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.
![]() |
![]() |
||||
![]() |
JavaPackage
+member
JavaMember
JavaApplication
+package
0.. n
Astatic : Boolean ^visibility : JavaVlsiblllty
+subpackage
+containingType types0..n

+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




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ą