Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  

CATEGORII DOCUMENTE





BulgaraCeha slovacaCroataEnglezaEstonaFinlandezaFranceza
GermanaItalianaLetonaLituanianaMaghiaraOlandezaPoloneza
SarbaSlovenaSpaniolaSuedezaTurcaUcraineana

įstatymaiįvairiųApskaitosArchitektūraBiografijaBiologijaBotanikaChemija
EkologijaEkonomikaElektraFinansaiFizinisGeografijaIstorijaKarjeros
KompiuteriaiKultūraLiteratūraMatematikaMedicinaPolitikaPrekybaPsichologija
ReceptusSociologijaTechnikaTeisėTurizmasValdymasšvietimas

.NET komponentų metaduomenų panaudojimas jų automatizuotai paieškai vykdyti

kompiuteriai

+ Font mai mare | - Font mai mic







DOCUMENTE SIMILARE

Trimite pe Messenger




VILNIAUS GEDIMINO TECHNIKOS UNIVERSITETAS

FUNDAMENTINIŲ MOKSLŲ FAKULTETAS

INTINIERINĖS INFORMATIKOS KATEDRA

Linas Motiejūnas

.NET komponentų metaduomenų panaudojimas jų automatizuotai paieškai vykdyti

TURINYS

1.    ĮVADAS. 6

1.1      Tyrimo objektas. 6

1.2      Darbo tikslas ir utdaviniai. 6

1.3      Temos naujumas. 7

1.4      Temos aktualumas. 7

1.5      Mokslinio darbo vertė.. 7

1.6      Darbo aprobacija.. 8

2.    ANALITINĖ DALIS. 8

2.1      Komponento apibrėtimas. 8

2.2      Metaduomenų apibrėtimas. 10

2.3      Komponentiniai modeliai, komponentai, metaduomenys. 10

2.4      Metaduomenys .NET platformoje.. 12

2.4.1       Metaduomenys platformoje. 12

2.4.2       Tipų bibliotekos 12

2.4.3       Aplinka: Bendros Kalbos Mašina (CLR)  (Common Language Runtime (CLR)) 13

2.4.4       Klasės pakroviklis (Class Loader)  14

2.4.5       JIT kompiliatoriai ( Just – in – Time (JIT) compilers) 14

2.4.6       Įrankiai (Tools) 14

2.5      Komponentai ir rinkiniai. 15

2.6      .NET komponento metamodelio ypatumai. 15

2.5.1       Metaduomenų nauda. 17

2.5.2       Metaduomenys ir save – apibūdinantys komponentai 18

2.5.3        Metaduomenų struktūra ir panaudojimas. 18

2.5.4        Metaduomenų Lentelės ir Aibės. 18

2.5.5        Metaduomenų simboliai 18

2.5.6       Metaduomenys viduje PE failo. 19

2.7      .NET komponento, rinkinio manifestas. 19

2.7.1       IL kodas. 21

2.8      Bendroji Tipų Sistema (CTS) 21

2.8.2       Nuorodų tipai 22

2.9      Metaduomenys, paieškos vykdymo kriterijai. 22

2.9.1       Tipo nariai – metaduomenys. 23

2.10    Automatizuota .NET komponentų paieška.. 24

2.11    .NET Reflection pagrindinės idejos. 26

2.12    . Pasiūlymas, kai išplėsti .NET komponento metaduomenis. 27

2.12.1     Atributų panaudojimas .NET platformoje. 27

3.    IŠVADOS. 29

4.    EKSPERIMENTINĖ DALIS. 30

4.1      Naudota programinė įranga.. 31

4.1.1       C# programavimo kalba. 32

4.1.2       C# ir JAVA programavimo kalbų palyginimas. 32

4.1.2       C#  tipai 33

4.2      Programos kūrimas. 34

4.3      Metaduomenų tyrinėjimas programoje.. 37

4.4      Trumpas programinio kodo aiškinimas. 46

4.5      Programos naudojimo vadovas. 47

5.    IŠVADOS IR PASIŪLYMAI. 49

6.    LITERATŪRA.. 50

PAVEIKSLŲ SĄRAŠAS

Pav. 1:  Programavimo kalbų sąveika, kompiliatoriai, CLR aplinka.. 11

Pav. 2:  CLR aplinka.. 13

Pav. 3:  Programos kodo kompiliavimas. 16

Pav. 4:  .NET komponento struktūra.. 20

Pav. 5:  .NET komponento – rinkinio hierarchija, metaduomenų modeliavimas. 22

Pav. 6:  .NET komponento – rinkinio metaduomenų hierarchija.. 24

Pav. 7:  WinCV – Class Viewer pagrindinis langas. 25

Pav. 8:  WinCV – Class Viewer pagrindinis langas, paieška.. 26

Pav. 9:  Atributų reikšmė .NET komponente.. 28

Pav. 10:  .NET platforma ir Microsoft Visual Studio.NET. 31

Pav. 11:  С#  klasių elementai. 34

Pav. 12  C# kodo kompiliavimas su atributais. 37

Pav. 13 Programa išveda standartinius ir praplėstus metaduomenis. 38

Pav. 14  Reflection ir bendroji tipų sistema (CTS) 39

Pav. 15  MemberInfo detalizacija.. 39

Pav. 16:  Reflection objektų modelis. 44

Pav. 17:  .NET Rinkinio, jo modulio paieška.. 45

Pav. 18:  Modulio ir tipo paieška.. 45

Pav. 20  Komponentinė diagrama.. 47

Pav. 21 Programos darbo lango vaizdas. 48

SANTRUMPOS

COM (Component Object Model) – Komponentinis objektų modelis

EJB (Enterprise JavaBeans) – nuo platformos nepriklausoma komponentų architektūra, skirta objektiškai orientuotų taikomųjų utdavinių kūrimui

DCOM (Distributed Component Model) – Paskirstytas komponentinis objektų modelis

IL, MSIL (Intermediate Language, Microsoft Intermediate Language) – tarpinė kalba

CLR (Common Language Runtime) – Bendros kalbos mašina

CTS (Common Type System) – Bendroji dinaminė tipų sistema

1.     ĮVADAS

1.1       Tyrimo objektas

Tyrimo objektas - .NET komponentų, jų metaduomenų panaudojimo technologija. Komponentas – tai tiratuojamas, autonomiškai modernizuojamas, tiksliai nusakytą paskirtį ir griettai apibrėttą interfeisą turintis programinis modulis, padarytas taip, kad jį būtų nesunku įtraukti į veikiančią programų sistemą arba tokioje sistemoje pakeisti jį kitu analogiškus paskirtį bei interfeisą turinčiu komponentu [12]. Komponento kontekste metaduomenys yra struktūrizuotas  komponento, rinkinio, objekto potymių aprašymas.[10] Bendrąja prasme metaduomenys yra duomenys apie duomenis.   Darbe nagrinėjami komponentų metaduomenys ir pasiūlomas būdas kaip juos išplėsti.

1.2      Darbo tikslas ir utdaviniai

Darbo tikslas – išnagrinėti .NET komponentines technologijas, .NET komponentų metaduomenų panaudojimą programų sistemose. Keliami utdaviniai:

ü      apibrėtti, kas yra komponentas;

ü      apibrėtti, kas yra komponento metaduomenys;



ü      apibrėtti .NET komponentą, jo metaduomenis;

ü      išskirti .NET komponentų metaduomenų tipus;

ü      apibrėtti komponentų paieškos ypatumus;

ü      pasiūlyti, kaip išplėsti .NET komponento metaduomenis;

ü      eksperimentu patikrinti gautus rezultatus;

1.3      Temos naujumas

.NET komponentinė technologija pastaruoju metu yra daugelio rengiamų konferencijų programose, straipsniai komponentinio programavimo tema yra labiausiai cituojamųjų sąrašuose. Pastaruoju metu komponentinė programų intinerija [2] [3]  (o ypač atkartojimo (reuse) technologija) pritraukė didelį tyrinėtojų (Nierstrasz ir kt., 1992; Nierstrasz ir kt., 1995; Brown, 1997; Sametinger, 1997; Szyperski, 1997; Kozaczynski ir kt., 1998; Brown ir kt., 1998) susidomėjimą. Akcentuojamos sudėtinės dalys, tiūrime kaip į pakartotinai naudojamus komponentus. Komponentų metaduomenys yra labiausiai diskutuojama ir matiausiai suprantama koncepcija.

1.4      Temos aktualumas

Komponentai kuriami taip, kad būtų lengva juos integruoti. Tai yra patogu ir greita. Kiekvieno komponento nekuriame nuo pradtios.Yra įvairių nuomonių apie programinės įrangos atkartojimą (Bassett, 1997; Jacobson ir kt., 1997; Sametinger, 1997). Pagal Bassett’ą, atkartojimą yra “anksčiau sukurto komponento sugebėjimas būti panaudotu vėl, iš dalies arba visiškai, su modifikacijomis arba be jų” [4] (Bassett, 1997). Esminis elementas .NET technologijoje yra metaduomenys, suteikiantys programavimo kalbų jungumą, operavimąsi. Metaduomenys yra raktas į paprastesnį programinį modelį.

1.5      Mokslinio darbo vertė

Darbe pasiūlyta .NET komponento metaduomenis išplėsti atributais. Atributai – tai mechanizmas skirtas pridėti, išplėsti metaduomenis, kaip kompilatoriaus instrukcijos ir kiti duomenys apie duomenis, metodai, klasės. Atributai yra pridedami į metaduomenis. Pasiūlytas .NET komponentų metaduomenų išplėtimas gali būti panaudotas .NET komponentų automatizuotai paieškai vykdyti.

1.6      Darbo aprobacija

Darbe pasiūlyti sprendimai patikrinti eksperimentinėje dalyje.

2.     ANALITINĖ DALIS

2.1      Komponento apibrėtimas

Prieš pradedant nagrinėti komponentus, komponentines sistemas (an component-based system) jų metaduomenis (metadata) yra teisingai suprasti ir apibrėtti, kas tai yra. Todėl iš pradtių apibrėšiu pagrindines sąvokas. Komponentinė sistema – tai vienetas, kuriame todis komponentas yra pagrindinis, raktinis. Komponentinės sistemos gali būti sudarytos iš vieno komponento (kaip vartotojo sąsajos atveju), o gali būti daugia-komponentės sistemos. Komponentai yra abstraktesni negu objektų klasės ir gali būti laikomi savarankiškais servisų teikėjais [5].

Yra daug komponentų apibrėtimų. Štai keli iš jų:

 PhilippeKrutchen, RationalSoftware [6] apibrėtia komponentą , kaip –  reikšmingą, nepriklausomą ir keičiamą sistemos dalį, kuris atlieka tam tikrą funkciją apibrėttoje architektūroje. Komponentas prisitaiko ir numato interfeisų fizinę realizaciją.

Pagal GartnerGroup [6]: Programinis vykdymo komponentas yra dinamiškai surištas paketas iš vienos ar keleto programų kaip vienetas per dokumentuotų interfeisų gali būti atidengtas vykdymo metu.

Clemens Szyperski [2], [3] apibrėtia programinį  komponentą, kaip kompozicijos vienetą su specifikuotais interfeisais ir atviru konteksto priklausomumu”

GradyBooch, JimRumbaugh, IvarJacobson [7] apibrėtia Programinius  komponentus, kurie įgalina praktinį daugkartinį jų panaudojimą. Egzistuoja ir kiti daugkartinio panaudojimo vienetai: išeities kodo bibliotekos, architektūros. Specifiškai, programiniai komponentai yra nepriklausomos produkcijos, išmokimo, išdėstymo vienetai.

Pagal tiesioginį (on-line) kompiuterijos todyną :

Komponentas:

ü      Didesnės sistemos ar struktūros dalis;

ü      Atskirai sukompiluotas programos modulis, kuris dinamiškai (veikiant programai) siejamas su kitais programos komponentais ir gali būti panaudotas keliose programose. Yra susiformavusi atskira komponentų projektavimo kryptis, vadinama komponentiniu programavimu.

Nors yra daug komponento apibrėtimų, tačiau išnagrinėjus aukščiau pateiktus, matome, kad Komponentas - nepriklausomas ir pakartotinai panaudojamas vienetas, kuri turi tokias pagrindines savybės:

ü      sukurtas tam tikram tikslui;

ü      siulo paslaugas per išreikštinį standartizuotą interfeisą;

ü      gali turėti kelias realizacijas;

ü      gali būti vykdomas skirtingose aplinkose;

ü      turi turėti dokumentaciją, aprašą.

Objektas ir komponentas kartais vartojami kaip sinonimai, tačiau iš esmės tai yra skirtingos sąvokos. Komponentas yra išbaigta „detalė“, kuri gali būti įdėta į programą. Jis turi aiškiai apibrėttą sąsają su išore. Tuo komponentas iš išorės panašus į objektą. Tačiau jo vidinė struktūra gali būti įvairi. Komponentas datniausiai turi kelias klases ir objektus. Be to, komponente gali būti ne tik klasės. Jame net iš viso gali klasių nebūti. Komponentas gali būti sudarytas iš tradicinių procedūrų, gali turėti globaliųjų, statinių kintamųjų, net gali būti sukurtas naudojantis struktūrinio programavimo ar kitais principais. Panašiai kaip klasės gali būti susietos viena su kita paveldėjimo ryšiais, komponentai siejami importo ryšiais.

Informacinių sistemų komponentai nevisada tapatinami su objektais. Tai gali būti objektų sudėtingesnė struktūra.

            Būna:

ü      statinės kompozicijos – surenkame ir pradeda veikti;

ü      dinaminės kompozicijos – sistemos vykdymo metu galime įjungti į sistemą.

2.2      Metaduomenų apibrėtimas

Metaduomenys yra labiausiai diskutuojama ir matiausiai suprantama koncepcija.

Metaduomenys  pagal kompiuterinį terminų todynėlį yra duomenys apie duomenis. Komponento kontekste metaduomenys yra struktūrizuotas  komponento, rinkinio, objekto potymių aprašymas.[10] Bendrąja prasme metaduomenys yra duomenys apie duomenis. Paieškos metaduomenys: tai tokie metaduomenys, kurie reikalingi vartotojui, kad galėtų sutinoti, kas ir kokius duomenis turi, kur juos rasti, kaip įsigyti.

Metaduomenys [11] apibūdina statinius ir dinaminius komponento aspektus, yra vartotojui prieinami ir gali būti panaudojami skirtingoms utduotims kurti programų intinerijoje.

Programų kūrėjas, programuotojas rašydamas programinį kodą ir norėdamas panaudoti sukurtą komponentą savo programiniame kode turi tinoti kokias paslaugas atlieka sukurtas komponentas. Reikalinga papildoma informacija apie komponentą, utklausos ieškant specifinės informacijos susijusios su komponentu. Reikalinga įvairi informacija apie komponentą, kad tenkintų programuotoją. Programų kūrėjai norėtų sutinoti ar reikiamas komponentas atitinka saugumo reikalavimus programai, kaip yra išspręsta versijavimo problema, kokie yra naudojami metodai, laukai, operacijos ir kita detali informacija. Skirtinga informacija skirtinguose kontekstuose iškviečia bendrai tokią informaciją.

Kadangi metaduomenų informacija yra labai svarbi, daugelyje komponentinių modelių yra sudaryta galimybė teikti papildomą informaciją – metaduomenis arba metametodus, grątinančius metaduomenis.

2.3      Komponentiniai modeliai, komponentai, metaduomenys

Pangrinėsiu keletą komponentinių modelių [11].

Sun Microsystems pateikta metodika Enterprise JavaBeans (EJB) orientuota į paskirstytų taikomųjų utdavinių serviso dalies kūrimą. JavaBean komponentas yra suformuotas iš metaduomenų skirtas pritaikyti komponentą programai. BeanInfo objektas inkapsuliuoja papildomas rūšis metaduomenų apie komponentą: komponento pavadinimas, tekstinė informacija apie komponento funkcionalumą, jo savybes ir t.t.

Microsoft korporacijos siūlomame objekto – komponento modelyje (Component Object Model (COM)) reiškia komponentinis objektinis modelis, tai yra „sudėtinio objekto modelis“. COM klasės yra matiausiai vienos sąsajos realizacija, o klasių poaibiai įvardijami kaip COM objektai. Komponentas apima kelias klases taip sudarydamas vienetą, kurį galima pritaikyti sistemų kūrimo projektuose.

Interfeisai apibrėtiami tipų bibliotekose [13] – tai metaduomenų blokuose, kuriuose išvardinamos interfeiso savybės ir metodai, metodų parametrai, parametrų tipai ir gratinamos reikšmės.

            .NET platforma palaiko ne tik programavimo kalbų  nepriklausomumą, bet taip pat ir kalbų susiejimą, integravimą. Tai reiškia, kad galima paveldėti  klases, surasti klaidas,  pasinaudoti polimorfizmu tarp skirtingų programavimo kalbų galimybe (pav.1). .NET platforma leidtia tai atlikti, pasinaudojus tokia technine sąlyga kaip Bendrų Tipų Sistema (Common Type System (CTS), kurią turi palaikyti visi .NET komponentai. CTS palaiko  ir uttikrina pagrindinius klasių, sąsajų, nuorodų ir reikšmių tipus [1].

                 Pav. 1:  Programavimo kalbų sąveika, kompiliatoriai, CLR aplinka

Analogiškai ir Microsoft korporacijos siūlomame paskirstyto objekto – komponento modelyje (Distributed Component Object Model (DCOM)) Iunknown interfeisas DCOM  komponento sudaro galimybes įgyti informaciją, t.y. informaciją apie komponento interfeisus. Panašiai ir kituose komponentiniuose modeliuose.

Metaduomenys paprastai, komponentiniuose modeliuose, pateikia generatyvią, bendrą informaciją apie komponentą:  klasės pavadinimas, metodai, parametrai, jų reikšmės.

2.4      Metaduomenys .NET platformoje

            2.4.1    Metaduomenys platformoje

Metaduomenys yra mašininė – nuskaitoma informacija apie “duomenis apie duomenis”. Tokia informacija gali apimti detaliai: duomenų šaltinio turinys, dydis, formatas bei kitos charakteristikos. .NET aplinkoje, metaduomenys apima tipų apibrėttis, versijos informaciją, išorinio rinkinio (assembly) sujungimus bei kitą standartinę informaciją.[13]

Bet kokios dvi sistemos, komponentai ar objektai operuodami vienas su kitu turi tinoti katką vienas apie kitą. COM tai vadinama interfeiso specifikacija, kuris yra įgyvendinamas komponento tiekėju ir naudojamas vartotojų. Interfeiso specifikacija apima metodo prototipus su signatūromis, taipogi tipų apibrėttis visiems parametrams bei gratinamoms reikšmėms.

Tiktai C/C++ programuotojai turėjo galimybę lengvai modifikuoti arba naudoti tarpinę (Interface Definition Language (IDL)) tipų apibrėttis. Kitų kalbų programuotojai neturėjo tokios galimybės. Taigi, Microsoft korporacija išrado ir pasiūlė kitką nei IDL, kad kiekvienas galėtų naudotis, vadinamomis tipų bibliotekos (type library). COM, tipų bibliotekos suteikia galimybes aplinka arba įrankiais perskaityti, konstruoti, kurti klases (wrapper classes), kurios yra patogiausios (objektų) kūrėjui. Tipų bibliotekos taip pat leidtia vykdymo mašinoms tokioms kaip, COM, MTS, arba COM+ tikrinti, nagrinėti tipus vykdymo metu ir tiekti reikalingą sistemai arba  tarpinę paramą programoms naudojančioms jas. Kaip pavyzdtiui, tipų bibliotekos palaiko dinaminį kreipimąsi ir leidtia COM vykdymo mašinai tiekti universalų duomenų tipų rūšiavimą.

Tipų bibliotekos yra pakankamai turtingos COM, tačiau ribotas standartizavimas. .NET platformoje iškyla naujas mechanizmas tipų informacijai fiksuoti, pertiūrėti, paieškai. Vietoj naudojamo termino „tipų bibliotekos“, tokią tipų informaciją vadiname metaduomenimis .NET aplinkoje.

            

2.4.2    Tipų bibliotekos [13]

Kaip ir tipų bibliotekos, yra C++ antraštiniai failai (header files), metaduomenys yra tipų biblioteka. NET platformoje metaduomenys yra pagrindinis mechanizmas ar dialektas, jog .NET vykdymo mašina, kompiliatoriai, įrankiai gali jais naudotis. Microsoft .NET naudoja metaduomenis apibūdinant, charakterizuojant visus tipus, kurie yra naudojami konkretaus .NET rinkinio. Šiuo atveju, metaduomenys specifikuoja .NET rinkinį: charakteristikos apie rinkinio identiškumą (rinkinio pavadinimas, versija, kultūra ir viešasis raktas), nuorodos į tipus, tipai kurie yra eksportuojami, o tai pat ir apsaugos reikalavimai vykdymo mašinos metu. Metaduomenys pateikia daugiau informacijos nei tipų bibliotekos. Čia taip pat pateikiamos .NET rinkinio ir modulių, klasių, interfeisų, metodų, savybių, laukų, įvykių, globalinių metodų specifikacijos.

Metaduomenys pateikia pakankamai informacijos programai, įrankiui,  vykdymo mašinai surasti viską, kas yra reikalinga komponentų jungimui, integravimui. Dabar pertvelgsiu keletą įrankių, programų, kurios protingai naudoja metaduomenis .NET platformoje. Įrodysiu, jog metaduomenys yra iš tikrųjų kaip ir tipų bibliotekos.

2.4.3    Aplinka: Bendros Kalbos Mašina (CLR)  (Common Language Runtime (CLR))

Pav. 2:  CLR aplinka

Pateikiu (pav.2) CLR aplinkos schemą. CLR aplinka [1] naudoja metaduomenis verifikavimui, tikrinimui, saugumo vykdymui, rūšiavimui, atminties išdėstymui ir vykdymui. CLR aplinka yra priklausoma nuo metaduomenų teikti šiuos vykdymo mašinos ypatumus. CLR yra netymi .NET  infrastruktūra. Skirtingai negu programinės įrangos bibliotekos, CLR  yra sukurta ant tuščio pagrindo. CLR atlieka sukurtų .NET platformoje programų  kodų vykdymą. CLR yra vykdymo mašina, kuri utkrauna reikalingas klases, atlieka reikiamų metodų kompiliavimą, uttikrina saugumo patikrą ir atlieka kitus vykdymo mašinos  funkcionalumus. CLR vykdymas yra .dll arba .exe failai. Kurie susideda iš programinio kodo ir metaduomenų(duomenys apie duomenys).  .NET programos vykdymas yra visai kitoks negu įprastinis, kadangi mes šiuo atveju turime ne tik programinį kodą ir duomenis, bet dar ir metaduomenis.

2.4.4    Klasės pakroviklis (Class Loader)  [1],[13]

CLR aplinkos komponentas klasės pakroviklis naudoja metaduomenis surandant ir utkraunant .NET klases. Tai yra dėl to, jog metaduomenys įrašo detalią informaciją apie specifinę klasę kur ji yra saugoma: ar tame pačiame rinkinyje (assembly), viduje ar ut specifinės vardų, objektų erdvės (namespace), ar priklausomame rinkinyje eantį nutolusiame tinkle.

2.4.5    JIT kompiliatoriai ( Just – in – Time (JIT) compilers) [1],[13]

JIT kompiliatoriai naudoja metaduomenis kompiliuojant Microsoft Intermediate Language (IL) kodą. IL yra tarpinė reprezentacija, kalba kuri prasmingai bendrauja programavimo kalbų – integravimo palaikyme, bet tai nėra Visual Basic ar baitinis kodas, kuris privalo būti aiškus. .NET platformoje JIT  kompiliuoja  IL į mašininį kodą pirmiau nei programa pradedama vykdyti, ir visa šitai daro kartu su metaduomenimis.

2.4.6    Įrankiai (Tools) [1],[13]

Įrankiai naudoja metaduomenis integravimo, jungimo palaikymui. Kaip pavyzdtiui, programavimo įrankiai gali naudoti metaduomenis generuojant iškviečiamus aplankus, kurie leidtia .NET ir COM komponentamams susimaišyti. Tokie įrankiai,kaip Debuggers, Profilers ir Objektų ieškovas (browser) gali naudoti metaduomenis pateikiant turtingesnį programavimo palaikymą. Vienas iš pavyzdtių, IntelliSense ypatumai, kuriuos palaiko Microsoft Visual Studio.NET. Kai tik utrašome objekto operaciją ir padedame tašką, įrankis (tool) parodo sąrašą metodų ir savybių iš kurių galima pasirinkti. Tuo būdu, nereikia be reikalingai ieškoti antraštinių failų (header files) ar dokumentacijos aptinkant tikslų, reikalingą metodo ar savybės pavadinimus bei sintaksę.

Kaip ir CLR aplinka, bet kuri programa, įrankis, ar utilita turinti galimybę skaityti metaduomenis iš .NET rinkinio gali panaudoti jį. Mes turime galimybę pasinaudoti Reflection klasėmis .NET platformoje nagrinėjant, tikrinant .NET PE failą ir tinoti viską apie duomenų tipus, kuriuos naudoja .NET rinkinys. CLR aplinka naudoja tas pačias Reflection klases tikrinti ir pateikti vykdymo mašinos ypatumus: atminties išskyrimą, apsaugos informaciją, tipų patikrinimą, derinimą (debugging), distancinį valdymą (remoting) ir kitką.

Metaduomenys suteikia programavimo kalbų jungumą, operavimąsi, esminis elemntas .NET platformoje – visos programavimo kalbos privalo naudoti tuos pačius tipus, norint sugeneruoti teisingą, veikiantį .NET PE failą. .NET vykdymo mašina negali teikti tokių ypatumų kaip atminties išskyrimą, apsaugos informaciją, tipų patikrinimą, derinimą (debugging), distancinį valdymą (remoting) be metaduomenų turiningumo. Taigi, metaduomenys yra labai svarbi .NET dalis – tokia svarbi, jog galima sakyti, jog nebūtų .NET be metaduomenų.

2.5      Komponentai ir rinkiniai

Dar kai buvo COM era, Microsoft dokumentacija [1] naudojo terminą komponentas (component), kuris reiškė COM klasę ar COM modulį (.dll ar .exe). .NET platformoje, Microsoft adresavo šį sumaišymą pateikiant naują koncepciją, rinkinys (assembly), kuris yra programinis komponentas teikiantis „įjunk ir dirbk“ (plug – and – play), kaip ir techninės įrangos (hardware) komponentas. Teoriškai .NET rinkinys yra matdaug lygus COM moduliui. Praktiškai, rinkinys gali būti sudarytas iš tipų ir fizinių failų ( bitmap failai, .NET PE failai, ir t.t.) kurie yra reikalingi vykdymo mašinai, kad įvyktų sėkmingas programos paleidimas. Taigi, rinkinys yra versijavimo, išdėstymo, apsaugos informacijos, vykdymo (side – by – side execution), daugkartinio panaudojimo vienetas.

Rinkinys yra loginis .dll arba .exe, o jo manifestas yra rinkinio specifikacija (metaduomenys) : jo versija, kokie kiti rinkiniai naudoja jį ir t.t.

2.6      .NET komponento metamodelio ypatumai

Metaduomenys [13],[18] yra dvejetainė informacija apibūdinanti programą, kuri yra saugoma CLR aplinkos vykdomosios programos faile arba atmintyje. Kai programos kodas yra kompiliuojamas į vykdomąjį .EXE failą, metaduomenys yra įterpiami į vieną porcijos failą, programos kodas yra konvertuojamas į IL tarpinę kalbą ir IL kodas yra įterpiamas į kitą porciją failo (pav. 3). Kiekvienas tipas ir jo elementas apibūdinamas, apibretiamas ir nurodomas modulyje per metaduomenis.

Pav. 3:  Programos kodo kompiliavimas

Kai kodas yra paleidtiamas vykdymui, vykdymo mašina utkrauna metaduomenis į atmintį ir ir remiantis jais, randama informacija apie programos kodo klases, elementus, paveldėjimus, ir t.t.

Metaduomenys apibūdina kiekvieną tipą ir elementą apibrėttą programos kode neutralia kalba. Metaduomenys saugo informaciją apie:

.NET rinkinio specifikacija

ü      Unikalumas (pavadinimas, versija, kultūra, viešasis raktas.)

ü      Naudojami tipai

ü      Ryšiai su kitais rinkiniais

ü      Apsaugos leidimai paleidtiant programą

            Tipų aprašas

ü      Pavadinimas, matomumas, pagrindinė klasė, realizuoti interfeisai.

ü      Elementai (metodai, laukai, ypatybės, įvykiai, tarpiniai tipai).

            Atributų sąrašas

ü      Papildomas aprašas elementų, kurie modifikuoja tipus ir narius

2.5.1    Metaduomenų nauda

Metaduomenys yra raktas į paprastesnį programinį modelį [1]. Čia jau nebereikalingai header failai, Interfeiso kalba (IDL), išoriniai metodai – nuorodos į komponentą. Metaduomenys suteikia galimybę .NET programavimo kalboms aprašyti juos automatiškai neutralia kalba, to nemato nei vartotojas, nei programuotojas, projektuotojas. Be to, metaduomenys panaudojami ir per atributų panaudojimą. Metaduomenų pagrindiniai privalumai, nauda:

·         Save – apibudinantys failai

 CLR aplinkos moduliai ir rinkiniai yra save – apibūdinantys. Modulio metaduomenys talpina savyje viską kas yra reikalinga, kad modulis galėtų sąveikatuti su kitu moduliumi. Metaduomenys automatiškai aprūpina IDL funkcionavimą komponentiniame objektiniame modelyje, trumpiau (COM), leidtiant pasinaudoti vienu failu ir elementų apibrėtimui, realizavimui, vykdymui. Vykdymo metu moduliai ir rinkiniai nereikalauja utregistravimo su operacine sistema. Taigi, specifikacijos, naudojamos vykdymo mašinos, atspindi programos kodą sukompiliuotame faile, kuris padidina programos tvirtumą, patikimumą.

·         Programavimo kalbos operavimas ir lengvesnis komponentinis programavimas, projektavimas

Metaduomenys suteikia visą informaciją reikalingą, būtiną apie sukompiliuotą programos kodą, kad galėtum pasinaudoti būtent komponentą , t.y. .exe ar .dll failą parašytą skirtinga programavimo kalba. Yra galimybė kurti kaip atskirą atvejį bet kokios klasės bet kuria “valdoma programavimo kalba” (kalba kuri kreipiasi į CLR aplinką) net nesirūpinant apie tikslią ar aiškią išdėstymo tvarką ar naudotis įprastu programavimo kalbos operuojamu kodu.

·         Atributai

.NET platformoje yra galimybė išvardyti specialios rūšies metaduomenis, kurie vadinami atributais, sukompiliuotame faile. Atributus galima surasti per .NET platformą ir yra naudojami detaliai kontrolei kaip komponentinė programa veikia vykdymo metu. Taip pat, galima išskirti savo metaduomenis į .NET platformos failus per vartotojo apibrėttus atributus.

2.5.2    Metaduomenys ir save – apibūdinantys komponentai

Praeityje, programinis komponentas (.exe ar .dll) parašytas viena programavimo kalba negalėjo būti naudojamas kaip programiniu komponentu parašytu kita programavimo kalba. Komponentinis objektinis modelis (COM) išsprendė šią problemą. .NET platformos komponentai operuojami kompiliatoriais paprasčiau, atspindi papildomą informaciją į visus modulius ir rinkinius. Ši informacija, vadinama metaduomenimis, padeda komponentams vientisai sąveikauti vienas su kitu.

2.5.3 Metaduomenų struktūra ir panaudojimas

Pateiksiu aptvalgą pagal [1], kaip metaduomenys yra saugomi, laikomi .NET vykdomąjame (PE) faile, o taip pat pateiksiu kokia yra metaduomenų pagrindinė funkcija valdomame vykdyme.

Metaduomenys yra saugomi vienoje .NET vykdomojo failo porcijoje, o MSIL kalba yra saugoma kitoje failo porcijoje. Toje dalyje, kur yra metaduomenys, susideda iš lentelės ir aibės duomenų struktūrų. MSIL dalis susideda iš MSIL ir metaduomenų simbolių, kurie yra nuorodos į metaduomenų dalį vykdomojo failo.

Su metaduomenų simboliais susidurti galima, jei naudosimės tokiais įrankiais, kaip MSIL Disassembler (Ildasm.exe) kad galėtumėm pertiūrėti MSIL kodą arba vykdymo mašinos derinimo programa (Cordbg.exe) įvykdant atminties turinį.

2.5.4 Metaduomenų Lentelės ir Aibės

Kiekviena metaduomenų lentelė [1] saugo informaciją apie programos elementus. Kaip pavyzdtiui, viena metaduomenų lentelė aprašo klases, kita – laukus, ir t.t. Jei programos kode naudojame dešimt klasių, tuomet klasių lentelė turės dešimt eilučių, viena eilutė – vienai klasei. Metaduomenų lentelės susieja kitas lenteles ir aibes. Kaip pavyzdtiui, metaduomenų klasių lentelė susieja su lentele, kurioje saugomi metodai.

Metaduomenys taip pat saugi informaciją keturiose aibių struktūrose: seka (string), gabalas (blob), vartotojo seka (user string) ir GUID. Visos sekos naudojamos pavadinti tipams ir nariams,elementams yra saugomos sekų aibėje. Kaip pavyzdtiui, metodų lentelė nesaugo tiesiogiai konkretaus metodo pavadinimo, bet taškus į metodų pavadinimus, kurie yra saugomi sekų aibėje

2.5.5 Metaduomenų simboliai

Kiekviena metaduomenų lentelės eilutė unikaliai identifikuota MSIL dalyje vykdomojo failo pagal metaduomenų simbolį. Metaduomenų simboliai yra koncepciškai panašūs į rodykles (pointers), kurie susieja tam tikrą metaduomenų lentelę.

Metaduomenų simbolis  yra keturių – baitų skaičius. Pirmasis baitas nurodo metaduomenų lentelę į kurią tam tikras simbolis nurodo (metodą, tipą ir t.t.). Likusieji trys baitai tiksliai nusako eilutę metaduomenų lentelėje kuri atitinka programinis elementas [1].

2.5.6 Metaduomenys viduje PE failo [1]

Kai programa yra sukompiliuota CLR aplinkos, ji yra konvertuojama į PE failą kuris susideda iš trijų dalių pateikta (1 lentelėje).

PE dalis

Turinys

PE antraštė

Tai yra indeksas PE failo pagrindinių dalių ir įėjimo taško adresas.

Vykdymo metu yra naudojama ši informacija, kad nustatyti failą kaip PE failą ir nuspręsti kur vykdymas prasideda kai programa yra utkraunama į kompiuterio atmintį.

MSIL instrukcijos

Tarpinės kalbos (IL) instrukcijos, kurios doroja programos kodą. Daugybė IL instrukcijų yra palydimos metaduomenų simbolių.

Metaduomenys

Metaduomenų lentelės ir aibės. Vykdymo metu CLR aplinka naudoja tai, kad galėtų įrašyti informaciją apie kiekvieną tipą ir elementą programos kode. Į šią dalį įeina atributai ir apsaugos informacija.

                                               Lentelė 1: PE failo struktūra

2.7      .NET komponento, rinkinio manifestas

Pav. 4:  .NET komponento struktūra

Kaip aptvelgiau auksčiau, tipai privalo parodyti, atidengti savo metaduomenis leidtiant įrankiams (tools) ir programoms prieti prie jų ir patikėti metaduomenims savo paslaugas (services). Metaduomenys nėra tik tipams. Programinės įrangos, komponento instaliavimas, konfigūravimas neapsieina be metaduomenų apie komponentą, vadovaujantį tipams. Dabar pateiksiu medtiagos apie .NET rinkinius (išdėstymo vienetus) ir manifestus (metaduomenys charakterizuojančios rinkinius).

Rinkinio manifestas [13], [17] (pav. 4) yra metaduomenys kuris apibūdina, specifikuoja viską apie rinkinį: identiškumas, sąrašas failų priklausančių rinkiniui, nuorodos į išorinius rinkinius, eksportuojamus tipus, eksportuojamus resursus ir leidimus prieiti. Trumpiau, tai charakterizuoja visas detales reikalingas komponentų diegimui „plug – and – play“. Nebėra būtinybės saugoti tipų informaciją registruose kaip COM.

COM kai naudojame konkrečią COM klasę, duodame COM bibliotekai klasės identifikatorių. COM biblioteka ieško registre COM komponento, kuris turi ir tiekia tą klasę, utkrauna komponentą, pasako komponentui duoti jam atskirą jo klasę ir grątinti nuorodą į tą klasės atveją. .NET paltformoje, vietoj to kad ieškoti registre reikalingo komponento, CLR įdėmiai tiūri į rinkinio manifestą, nulemia, kuris išorinis rinkinys yra reikalingas, utkrauna reikalingą rinkinį kuris yra būtinas programai ir sukuria kaip atskirą objekto klasės atvejį.

            2.7.1    IL kodas

Rinkinys susideda iš IL kodo [13] (pav. 4), pagal kurį CLR aplinka paleidtia jį vykdymui. IL kodas paprastai naudoja ne tik tipus apibrėttus tame pačiame rinkinyje, bet gali ir naudoti ar kreiptis į tipus apibrėttus kituose rinkiniuose. Rinkinys turi būti apibrėttas su kitais rinkiniais, turi būti nuorodos į kitus rinkinius. Yra vienas įspėjimas: kiekvienas rinkinys gali turėti tik vieną įėjimo tašką, kaip DLLMain( ), WinMain( ), ar Main( ). Privaloma laikytis šios taisyklės, todėl kai CLR aplinka utkrauna rinkinį, ji ieško įėjimo taškų, kad galėtų pradėti rinkinio vykdymą.

2.8      Bendroji Tipų Sistema (CTS)

Kadangi .NET siekia, jog visos programavimo kalbos būtų lygios, klasė parašyta C# kalba – turi būti ekvivalenti klasei parašytai Visual basic kalba, taipogi interfeisas apibrėttas C++ kalba, turėtų būti taip pat specifikuotas COBOL programavimo kalba. Programavimo kalbos privalo sutikti su šiomis koncepcijomis, tai tada jie gali integruotis tarpusavyje. Kad programavimo kalbos galėtų integruotis, Microsoft korporacija apibrėtė bendrą tipų sistemą visoms .NET programavimo kalboms. Microsoft .NET palaiko gausų rinkinį tipų: reikšmių tipai, nuorodų tipai, klasės, interfeisai, delegatai.

CLR aplinka palaiko du skirtingus tipus: reikšmių tipai, nuorodų tipai.

2.8.1              Reikšmių tipai

Reikšmių tipai [13] (Value types) simbolizuoja reikšmes išskirtas steke. Reikšmės negali būti nulinės (null) ir visada turi turėti katkokių duomenų. Kai reikšmių tipai yra perduoti į funkciją, jie yra perduodami kopijos reikšme, kuri bus įvykdyta vykdymo mašinai metu. Tai reiškia, jog originali reikšmė nepasikeis, nepaisant jog katkas gali nutikti kopijai kviečiant funkciją. Būdingi tipai yra mati ir neutima daug atminties. Reikšmių tipai: primityvai, struktūros, sąrašai.

C# kalba

Int i;                               //bazinis elementas - primityvas

Struct Point   //struktūra

Enum State   //Sąrašas

Tai pat galima sukurti reikšmę išvestą iš klasės System.Value.Type.

            2.8.2    Nuorodų tipai

Jei tipas sunaudoja daugybę atminties resursų, tuomet nuorodų tipai teikia daugiau naudos ut reikšmių tipus. Nuorodų tipai [13] (objektai, interfeisai, rodiklėlės) yra taip vadinami, gali turėti reikšmę null. Šie tipai yra perduodami per nuorodas, reikštų tai, jog kai yra perduodamas objektas į funkciją, adresas ar rodiklytė į objektą yra perduodama – ne kopija objekto, kaip reikšmių tipuose. Nauda čia, jog nuorodų tipas gali būti naudojamas kaip išvedamos informacijos parametras, tai pat yra tai, jog nereikia eikvoti papildomų resursų, nes nera daromos kopijos. Jei objektas yra didelis ( reikalaujantis daug atminties), tuomet nuorodų tipai yra geresnis pasirinkimas. .NET platformoje yra nuorodų tipų trūkumas, tai ,jog nuorodų tipas turi būti išskirtas aibėje, t.y. tai reikalauja daugiau procesoriaus ciklų, nes tai turi būti valdoma ir šiukšlių surinkta CLR aplinkos.

.NET platformoje nuorodų tipai: klasės, interfeisai, masyvai ir delegatai.

Class Car    //klase

Interface Isteering   //interfeisas

Int[] a=new int[5];    //masyvas

Delegate void Process( );  //delegatas

2.9      Metaduomenys, paieškos vykdymo kriterijai




Pav. 5:  .NET komponento – rinkinio hierarchija, metaduomenų modeliavimas

2.9.1        Tipo nariai – metaduomenys

CLR vykdymo mašina suteikia galimybę apibrėtti tipo elementus [1], [14]: įvykius, laukus, metodus, savybes (pav. 5). Kiekvienas narys turi signatūrą. 2 lentelėje yra pateiktos elementų charakteristikos:

Elementas

Charakteristika

Įvykis

Apibrėtia įvykį, kuris gali atsiliepti ir apibrėtia metodus prisijungiant, atsijungiant ar iškviečiant, inicijuojant  įvykį. Įvykiai yra datnai naudojami informuoti tipu statusui keičiantis. Įvykiai .NET platformoje pagrindtia delegeto modelį

Laukas

Saugomos reikšmės ir specifikuojamos objekto tipo reikšmės. Charakterizuoja ir yra dalis tipo būsenos. Laukai gali būti bet kokio tipo.

Metodas

Charakterizuoja operacijas kurios yra tipe. Tai yra funkcija apibrėtta viduje klasės. Metodo signatūra specifikuoja leidtiamus tipus su visais argumentais ir gryttamosiomis reikšmėmis. Tai yra leistinos reikšmių operacijos. Metodai dar kitaip vadinami funkciniais elementais

Savybė

Įvardija tipo reikšmę ar būseną ir apibrėtia metodus įgyjant (getting) ir nustatant (setting) savybės reikšmę Savybės gali būti pirminiais tipais, pirminių tipų rinkiniais. Savybės yra datnai naudojamos išlaikyti viešąjį (public) interfeisą nepriklausomo tipo nuo tipo aktualios reprezentacijos. Kitaip sakant, - tai reikšmės kontraktas. Tai yra operacijos, kurios teikia priėjimą prie reikšmės.

                                          Lentelė 2: Elementų charakteristikos

Informacija metaduomenų išdėstoma šia hierarchija [14]

Pav. 6:  .NET komponento – rinkinio metaduomenų hierarchija

Pateikiu .NET komponento, rinkinio metaduomenų išdėstymą [14] (Pav. 6). Rinkinys yra sudarytas iš vieno arba daugiau modulių. Moduliai sudaryti iš tipų ir globalių metodų. Tipai gali būti: klasė, interfeisas arba struktūra. Bet kuris tipas turi arba gali turėti: metodus, jų parametrus, laukus, savybes ir įvykius.

2.10 Automatizuota .NET komponentų paieška

Pasinaudokime įrankiu, esančiu Microsoft Visual Studio.NET, WinCV –  klasių pertiūros, paieškos sistema [1]. Tai įrankis, kuris gali būti panaudojamas esamų klasių rinkiniuose, prieinamuose visiems vartotojams (shared assemblies), taip pat pagrindinių klasių nagrinėjimui, paieškai vykdyti. Surandama klasė, pateikiama tos klasės metodai, savybės, įvykiai, ir laukai naudojantis C# programavimo kalba.

WinForms Class Viewer pagrindinis langas

Paieškos lauke (pav. 7) įrašome ieškomos klasės pavadinimą, kad sutinotume kokiai vardų erdvei  (namespace) priklauso klasė,sutinoti  jos metodus, laukus, įvykius, konstruktorius bei kokiam .NET rinkiniui ji priklauso.

Pav. 7:  WinCV – Class Viewer pagrindinis langas

Pav. 8:  WinCV – Class Viewer pagrindinis langas, paieška

Jei paieškos lauke (pav. 8) surinksime klasės pavadinimą, pvz:. „date“, matysime paieškos rezultatus. Daugybę klasių, kurių pavadinimas susideda iš „date“. Iš paeiškos rezultatų matome, jog pasirinkt reikalingą klasę yra sudėtinga, nes reikia pertiūrėti kokia struktūra yra atskirų klasių. Pertiūrėjus visas klases galima nuspręsti: pasirinkti reikiamą, tinkamą. Class Viewer parodo informaciją atspindint (reflecting) tipą naudojantis CLR Reflection (dokumentacija). Tačiau tokia paieška nėra efektyvi, nes reikia tinoti tikslų klasės pavadinimą, klasė gali būti pavadinta skirtingais pavadinimais.

2.11  .NET Reflection pagrindinės idejos

.NET Reflection ir jos pagrindinės idėjos [1] susiformavo iš COM tipų bibliotekų modelio. Programos turi galimybę nustatyti, įvertinti tipų informaciją vykdymo mašinos metu ir iškviesti paslaugas, metodus. Pagrindiniai elementai, kurie įgalina tai –  metaduomenys ir .NET standartinė dinaminė tipų sistema (CTS)

Metaduomenys suteikia bendrą tipų informacijos ir kodo išdėstymą. .NET rinkiniai visą struktūrinę informaciją apie programą yra surinkta kartu su vykdymo mašinos aprašymu išreikštu MSIL, tarpine kalba. Struktūrinė informacija specifikuoja bendra forma rinkinius, jų modulius, detaliai kiekvieną duomenų tipą ir klasę. Klasių metodai ir visos kitos esybės yra saugomi su jų signatūromis ir grątinimo reikšmėmis ir jų MSIL kodu. MSIL yra dalis aprašymo bet kokio tai metodo, nes kodas yra vykdomas ir kompiliuojamas pavaizdavimui MSIL į mašininį kodą.

COM tipų bibliotekų informacija yra apribota tiems tipams kurie įtraukiami į biblioteką buvo aiškiai paklausi, metaduomenys yra prienamI kiekvienam tipui kuriuos naudoja .NET valdomas kodas. Kiekvienas .NET tipas, nuo paprasčiausių skaliarinių tipų kaip paprasčiausių integer iki kompleksinių klasių, gali būti panaudotas utklausoje ieškant reikiamo tipo. Vykdymo mašinos metu duomenų tipai atstovauja specialiai .NET vykdomai klasei System.Type. Ši klasė sudaro sąlygas detalų tyrinėjimą kiekvienu aspektu duomenų tipų. .NET platformos galimybė padaryti  tipų informaciją pasiekiamą vykdymo metu per šią klasę, vadinama „refleksija, atspindys“

2.12 . Pasiūlymas, kai išplėsti .NET komponento metaduomenis

2.12.1    Atributų panaudojimas .NET platformoje

.NET programa susideda iš kodo, duomenų ir metaduomenų [18]. Atributai – tai mechanizmas [17] skirtas pridėti, išplėsti metaduomenis, kaip kompilatoriaus instrukcijos ir kiti duomenys apie duomenis, metodai, klasės. Atributai yra pridedami į metaduomenis ir yra matomi per ILDasm.exe ar kitus metaduomenų – skaitymo įrankius.

Atributas – būtinas, pastovus priklausomumo tenklas.

Dauguma atributų aprašo tokius programavimo kalbos elementus, kaip klasės, metodai, laukai ir savybės. Tačiau kai kurie atributai tampa globaliais – jie aprašo visą rinkinį į modulį. Globalūs atributai programos tekste atsiranda po direktyvos using.

Atributai programiniame kode gali būti panaudojami taip [16]:

ü      Aprašomas naujas arba pasinaudojama jau egzistuojančiu atributu  .NET platformoje

ü      Inicializuojamas konkretus atributo egzempliorius pasitelkus iškvietimu konstruktoriaus atributo.

                         Pav. 9:  Atributų reikšmė .NET komponente

Atributai yra įrašomi i metaduomenis kompiliacijos metu ir tampa prienami tik CLR aplinkos ir bet kuriam įrankiui, naudojantį Reflection mechanizmą.

Yra keletas struktūrų kaip išspręsti  su navigavimu per tipų informaciją yra nei paprasta, nei lengva. Taigi net jei ir keli atributinio programavimo aspektai, kaip dabar .NET paltformoje, yra galimybė COM komponentiniame objektiniame modelyje su tipų bibliotekomis ir bendraisiais atributais, kurie gali būti papildyti į tas bibliotekas.  Įvertinant šio tipo informaciją yra sudėtinga programuotojams. Bendrieji tipo bibliotekos atributai yra prienami COM+, MTS, kurie sudaro sąlygas išdėstyti komponentus IDL faile ir importuoti į COM+ šie atributai yra perskaitomi ir komponentai sukonfiguruojami teisingai.

3.     IŠVADOS

Aukščiau aprašiau komponentinius modelius, .NET komponentą, jo savybes, jo metaduomenų ypatumus ir kaip galima pasinaudoti jais. Yra daug apibrėtimų, tačiau detaliau juos išnagrinėjus, matome, kad jų autoriai sako tą patį tik kitais todtiais. Svarbu yra komponentų metaduomenys. Duomenys apie duomenis.

Toliau savo darbe .NET komponentų metaduomenų išplėtimą automatizuotai paieškai kurti aš naudosiu C# programavimo kalbą. Paskutiniais metais ypač daug dėmesio skiriama komponentams parašytiems kokia nors objektine programavimo kalba, datniausiai C++, C# , Java.  Pasirinkau būtent C# programavimo kalbą, nes tai universali objektinio projektavimo kalba ir ją galima naudoti kaip bet kurios konkrečios objektinio projektavimo metodikos komponentą.

4.     EKSPERIMENTINĖ DALIS

Šio baigiamojo darbo utduotis reikalauja sukurti programų sistemą .NET komponentų paieškai vykdyti. Eksperimento esmė – patikrinti darbe pateiktas idėjas. Atsitvelgdamas į ankstesniame skyriuje išnagrinėtų komponentų metamodelio ypatumus, aš savo programai pasirinkau, jog automatizuotai paieškai vykdyti geriausiai būtų  metaduomenis išplėsti per atributus, aprašytą poskyryje 2.12. Tam yra kelios prietastys:

ü      automatizuota komponentų paieška nėra efektyvi pagal standartinius metaduomenis ;

ü      atributai išplečia standartinius metaduomenis;

ü      atributai pritaikomi .NET komponento moduliams, klasėms, klasių metodams, savybėms, įvykiams, laukams;

ü      CLR aplinka priklauso nuo atributų – papildoma informacija apie klases, metodus, laukus, savybes, parametrus;

ü      Atributai yra išsaugomi kartu su programos metaduomenimis ir gali būti tiriami per Reflection mechanizmą.

Mano sukurtos programos galimybės – praplėsti .NET komponento metaduomenis per atributus. Sukuriu .NET komponentą, jo karkasą, kuris išveda į ekraną metainformaciją: rinkinio manifestas, modulio informacija, klasės, jų metodai, laukai, įvykiai, savybės bei papildomą jų informaciją – atributus. Dabar automatizuota paieška gali būti vykdoma paprasčiau – ne tik per programos standartinius metaduomenis, bet ir per atributus.

4.1      Naudota programinė įranga

Kuriant šio baigiamojo darbo programų sistemą, buvo naudojama [12] programinė įranga. 'Microsoft Visual Studio .NET ' yra universalus daugiakalbio programavimo įrankis, skirtas greitai kurti ir diegti 'Microsoft Windows®', interneto ir mobiliųjų įrenginių programinę įrangą.

Utduočiai įvykdyti pasirinkau objektinio programavimo panaudojimo koncepciją . Programa parašyta C# programavimo kalba.

Microsoft C# [20] yra nauja programavimo kalba, kuri yra sukurta didelės apimties programoms kurti .NET aplinkoje. C# yra išsivysčiusi iš Microsoft C ir Microsoft C++ programavimo kalbų ir yra paprasta, moderni objektiškai orientuota programavimo kalba.  C# kodas yra kompiliuojamas kaip valdymo kodas, kuris naudojasi CLR teikiamomis paslaugomis.

C# yra pristatoma kaip Visual C# Visual Studio.NET sudėtyje. C# pasitymi projektų šablonais, objekto modeliu, savybių puslapiais ir kitomis kūrimo aplinkos savybėmis. Visual C# programavimo biblioteka yra .NET platforma.

       Pav. 10:  .NET platforma ir Microsoft Visual Studio.NET

.NET platforma (Pav. 10) yra viršuje operacinės sistemos, kuri gali būti kelių Windows tipų ir susidėti iš daug komponentų. .NET sukurtos programos iš esmės veikia Windows terpėje.

Pats svarbiausias šios platformos dalykas yra CLR aplinka. Jei lyginant su  programavimu Java kalboje, tai būtu lygiai tas pats kaip Java Virtuali Mašina (Java Virtual Mashcine). Jei tai nebūtų galima palyginti su Java Virtualia Mašina (JVM),  reikia suprasti, kad yra .NET platformos širdis ir siela. CLR aplinka aktyvuoja objektus, atlieka jų apsaugos tikrinimus, išdėlioja juos kompiuterio atmintyje, vykdo jų paleidimą ir juos pašalina iš atminties.

Pateiktoje schemoje CLR aplinka viename iš viršutinių sluoksnių yra aibė bazinių architektūros klasių.  Šios klasės palaiko elementarius įvedimo –  išvedimo funkcionalumus, apsaugos valdymą, tinklo susiekimą, ryšio valdymą ir kitas funkcijas.

Virš platformos bazinių klasių yra kita aibė klasių, kuri tęsia duomenų valdymą ir palaikymą bei XML veikimą. Duomenų klasės palaiko pastovų duomenų valdymą, t.y tų duomenų, kurie yra susijusiose duomenų bazėse. Šios klasės susideda iš Struktūrinės Utklausų Kalbos(Structured query Language(SQL)) klasių, kurios pastoviai leidtia valdyti duomenų atsargas per standartinę SQL sąsają.  Panašiai kaip ir SQL klasės, aibė klasių, kurios vadinasi ADO.NET leidtia manipuliuoti  pastoviais duomenimis. Šalia duomenų klasių, .NET architektūra palaiko nematai klasių, kurios leidtia manipuliuoti XML duomenimis, atlikti XML paiešką ir  XML transliacijas.  

  4.1.1  C# programavimo kalba

C# [15] yra paprasta, tačiau galinga programavimo kalba. Kadangi ji yra išsivysčiusi iš C ir C++ programavimo kalbų, todėl ji naudoja nematai C++ bruotų  išraiškoms ir operatoriams. Ji taip pat palaiko nesaugų  būdą, t.y atminties manipuliavimą pointerių pagalba, kurio nereguliuoja šiukšlių kolektorius

C#, kaip nauja programavimo kalba buvo kartu pristatyta su .NET platforma. C# buvo stengiamasi padaryti kuo paprastesnę ir gauti  paprastumo, išraiškingumo ir pakankamai produktyvaus vykdymo programavimo kalbą. .NET platforma yra CLR aplinkos centre ir aibės bibliotekų, kurie gali būti išnaudojami plataus naudojimo programavimo kalboms, kurios gali būti naudojamos kartu ir kompiliuojamos Tarpinės Kalbos (IL) pagalba. C# programavimo kalba buvo sukurta su daugeliu panašumų į C++ ir Java programavimo kalbą.

Palyginsiu C# su kitomis gerai tinomomis programavimo kalbomis, t.y C++ ir Java, kad geriau suprasti pagrindinius jos pranašumus ir trūkumus.

            4.1.2    C# ir JAVA programavimo kalbų palyginimas

C# ir Java [20] yra naujos kartos programavimo kalbos, kurios yra kilusios iš C ir C++. Abi iš jų  turi perkeltas savybes, tokias kaip nenaudojamos atminties atlaisvinimu (šiukšlių kolekcija), kuri pašalina temo lygio utduočių palaikymą nuo programuotojų atsakomybės. Daugelyje sričių, jos yra labai panašios. Abidvi tiek C #, tiek ir Java yra kompiliuojamos Tarpine Kalba (IL): C# kompiliuojama Microsoft Tarpine Kalba (IL), o Java – Java baitų kode. Abiem atvejais tarpinė kalba  gali būti vykdoma pagal interpretavimą, taip vadinamoje virtualioje mašinoje.

C# turi paprastą duomenų tipą ir turi daugiau išplėstus reikšmių tipus. Skirtingai nuo Java C# pasitymi tokiais bruotais, kuriuos galime naudoti daugelyje kompiliatorių. Tačiau panašiai kaip Java, C# pasitymi klasėmis, kurios gali būti paveldėtos iš vienintelio paveldėjimo modulio, kuris yra pateikiamas per daugelio paveldimumo sąsają. Aukščiausio lygio klasės metodai C# naudoja ‘delegetus’-tipų apsaugojimo metodo pointerius. Jie yra naudojami įvykių palaikyme.  Java didelės apimties masyvai yra sudaromi iš vieno masyvo, t.y didelės apimties masyvas  yra naudojamas kaip vienetinių masyvų aibė. C# didelės apimties masyvai yra sudaromi kaip keturkampiai masyvai.

            4.1.2    C#  tipai

C#  galima sukurti naujus nuorodų tipus, kad apibrėtti klases. Klasės aprūpina šablonais, kuriais šie tiesioginiai reikalavimai yra generuojami. Ryšys tarp klasės ir su ja susijusio nuorodos tipo yra suprantamas,  kad klasė apibrėtia  tipą, t.y klasė apibrėtia sudedamuosius tipo elementus.

Kiekvienas tipas susideda iš elementų, kurie yra vadinami tipų nariais. Yra du pagrindiniai narių tipai, kuriuos gali apibrėtti klasė. Pirmiausiai, klasė gali apibrėtti kitus tipus, t.y abu tiek reikšmes, tiek ir nuorodas. Ši idėja, kad tipai gali susidėti iš kitų tipų, yra tinoma iš objektinio programavimo teorijos. Kai tipai susideda iš kitų nuorodų tipų, tada tai vadiname sudedamaisiais tipais.

Sekantis svarbus dalykas, kalbant apie tipų narius yra, kad klasė gali aprašyti metodus, funkcijas taikomas reikšmių ir nuorodų tipų skaitymui ir manipuliavimui.

C#  suteikia galimybę kreiptis į metodą ne pagal vardą, o pagal aprašą (parametrus ir grątinamą tipą), sukaupti grupes metodų, ir iškviesti juos vienu metu, su vienodais parametrais.

Indeksatoriai (Pav. 11) dar kitaip yra vadinami masyvais. Savybės tai reikšmės kontraktas. Tai yra operacijos, kurios teikia priėjimą prie reikšmės.Metodai charakterizuoja operacijas kurios yra tipe.Laukai  – saugomos reikšmės ir specifikuojamos objekto tipo reikšmės.Įvykiai – apibrėtia įvykį, kuris gali atsiliepti ir apibrėtia metodus prisijungiant, atsijungiant ar iškviečiant, inicijuojant  įvykį. Konstruktoriai – konstruoja klases. O taip pat klasių elementai yra  operatoriai, konstantos.

                                                   Pav. 11:  С#  klasių elementai

4.2      Programos kūrimas

.NET Reflection ypatumai: ne tik detali pateikiama elementų informacija, bet ir atributai, kurie įgalino visiškai naują vystymosi paradigmą – atributinį programavimą.

Atributai yra specialūs .NET platformos klasių elementai, kurie suteikia galimybę padidinti bet kurio struktūrinio elemento .NET klasių ir struktūrų su pagalbine informacija, kuri yra  tiesioginė klasės dalis teikianti papildomą informaciją, kuri įvertinama vykdymo mechanizmo ir .NET platformos. Tai yra papildomi metaduomenys. Pavyzdtiui [serializable] atributas, kuris paliepia Serialization platformai, jog ji gali išdėstyti klasės būseną serijomis (serialize). Jei šis atributas nera utdėtas, klasės įgyvendintojas atmeta leidimą ir pateikia sąvajį realizavimą serijų išdėstymo per Iserialization interfeisą ir neleidtia serijinio išdėstymo ir nutolusio rūšiavimo.

.NET programa susideda iš kodo, duomenų ir metaduomenų.

Atributai – tai mechanizmas skirtas pridėti, išplėsti metaduomenis, kaip kompilatoriaus instrukcijos ir kiti duomenys apie duomenis, metodai, klasės. Atributai yra pridedami į metaduomenis ir yra matomi per ILDasm ar kitus metaduomenų – skaitymo įrankius.

Atributais praplečiame metaduomenis, kurie gali būti naudingi paieškos sistemoms ieškoti pagal raktinius todtius.

Kuriu programą, kurioje išplėsiu metaduomenis ir pademonstruosiu kaip metaduomenis, papildomą jų informaciją – atributus išsitraukti.

Pritaikome atributus .NET rinkiniui (Lentelė 3), pasinaudoję raktiniu todtiu assembly. Pateikiu detalią informaciją apie mano komponento teikiamas paslaugas, t.y. jo specifikaciją: rinkinio pavadinimas, aprasymas, konfiguracijos aprasas, kompanijos sukūrusios rinkinį pavadinimas, produkto pavadinimas, prekinis tenklas.

using System.Reflection; //

using System.Runtime.CompilerServices;//norodoma kompilatoriui, jog atributai bus  idedami kaip metaduomenys

// Informacija apie rinkini

//pavadinimas

[assembly: AssemblyTitle('Bakalaurinis darbas. Uzduotis: pasiulyti, kaip isplesti metaduomenis automatizuotai paieskai ju vykdyti')] 

//aprasas

[assembly: AssemblyDescription('Atributu panaudojimas .NET platformoje')]

//konfiguracija

[assembly: AssemblyConfiguration('Programa')]

//kompanijos pavadinimas

[assembly: AssemblyCompany('VGTU')]

//produkto pavadinimas

[assembly: AssemblyProduct('Paieskos metaduomenys')]

//teises, priklausancios

[assembly: AssemblyCopyright('Linas Motiejunas, IN-0 grupes studentas')]

//prekinis zenklas

[assembly: AssemblyTrademark('VGTU, Inzinerine Informatika')]

//kultura

[assembly: AssemblyCulture('')]                    

//versijos numeris

[assembly: AssemblyVersion('1.0.0.*')]

                                                         Lentelė 3:  Reflection objektų modelis

AttributeUsageAttribute

Pranešimas, kad naudosimės naudojamu atributu, AttributeUsageAttribute , kuris utduoda raktines naujos klasės charakteristikas, specifikaciją. Kaip pavyzdtiui, ar gali  ir kaip gali būti atributas panaudotas visoms klasėms, arba kokiam elementui jis taikomas.

Sekantis fragmentas kodo iliustruoja AttributeUsageAttribute panaudojimą:

[AttributeUsage(AttributeTargets.Module |      // aprašomas atributas moduliui

           AttributeTargets.Constructor|  // aprašomas atributas konstruktoriui 
           AttributeTargets.Class|        // aprašomas atributas klasei
           AttributeTargets.Methods|      // aprašomas atributas metodams
           AttributeTargets.Events|       // aprašomas atributas įvykiams
           AttributeTargets.Fields|       // aprašomas atributas laukams
           AttributeTargets.Properties,   // aprašomas atributas savybėms
Savybė AllowMultipe
Ši savybė nurodo, ar atributas nudojamas daug kartų vienam elementui. Pagal nutylėjimą yra false, tai reiškia – atributu galima pasinaudoti tik vieną kartą.
// Pagal nutylejima AllowMultiple = false.
public class MyAttribute : Attribute
[AttributeUsage(AllowMultiple = true)]
public class YourAttribute : Attribute

[Obsolete('Metaduomenu panaudojimas komponentu galimai paieskai vykdyti')]

Kompiliatorius, kompiliuodamas programą, panaudoja šį atributą ir pateikia kaip klaidą, išvesdamas į ekraną: 'Metaduomenu panaudojimas komponentu galimai paieskai vykdyti'

Obsolete yra iš System.ObsoleteAttribute

 

                                            Pav. 12  C# kodo kompiliavimas su atributais

C# programos kodas (Pav.12), kurį sudaro klasės, jų elementai bei atributai, kurie modifikuoja, prideda naujos informacijos prie elementų., vadinamos atributais,.Visa tai patalpinama į .NET PE failo metaduomenų bloką. Kompiliuojant programos kodą, yra iškviečiami, inicijuojami įvykiai, siunčiamos klaidos, įspėjimai.

4.3      Metaduomenų tyrinėjimas programoje

.NET Reflection yra viena iš fundamentaliausių technologijų .NET platformoje, taip pat yra nesunku ja naudotis. Reflection atidaro duris atributiniam programavimui ir tipų funkcionalumui. Mano sukurta programa išveda į ekraną ne tik standartinius, bet ir praplėstus metaduomenis – atributus (Pav.13).

                                Pav.  13 Programa išveda standartinius ir praplėstus metaduomenis

System.Attribute klasė turi metodus, per kuriuos galima prieiti ir testuoti bendruosius atributus. Kadangi bet kuris vartotojo apibrėttas tipas gali būti panaudotas kaip atributas, jis yra išvestas iš sisteminės klasės Attribute.  .NET platformos vardų erdvės pateiktos 1 priede.

Sukūriau 7 klases, kurios praplečia metaduomenis atributais iš sisteminės klasės System.Attribute

public class Modulio_atributai : System.Attribute

public class Klases_atributai : System.Attribute

public class Savybiu_atributai : System.Attribute

public class Metodu_atributai : System.Attribute

public class Modulio_atributai : System.Attribute

public class Ivykiu_atributai : System.Attribute

public class Lauku_atributai : System.Attribute

Kurdamas programą, naudojausi sisteminiais komponentais:

using System;                               //fundamentalios klases, pagrindines klases kurios apibrezia tipus, ivykius, atributus

using System.Drawing;                 //grafikos palaikomumas

using System.ComponentModel;  //klases komponentu kurimui

using System.Windows.Forms;     //klases, kurios kuria Windows formas

using System.Reflection;              //priėjimas prie metaduomenų

Elementų tyrinėjimas ir paieška



                                                Pav. 14  Reflection ir bendroji tipų sistema (CTS)

Bendram priėjimui prie elementų, nepriklausomai nuo jų tikro vaidmens. Pasinaudojame metodu GetMembers( ) ištraukiant visą masyvą MemberInfo struktūrų  (Pav. 15) arba pasinaudojant tam tikru elementu pagal jo pavadinimą FindMembers ( ).

                                                         Pav. 15  MemberInfo detalizacija

Laukų, Savybių, Konstruktorių, Metodų ir Įvykių tyrinėjimas

Kad gautumėm visą elementų masyvą sugrupuotą pagal tai, kaip ir ką atlieka klasės elementai. Galima iškviesti atitinkamą funkciją:

ü      laukus iškviesime metodu GetFields( )

FieldInfo[] fields = GetFields(BindingFlags.Public|BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.DeclaredOnly);

ü      savybes metodu GetProperties( )

PropertyInfo[] props = GetProperties(BindingFlags.Public|BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.DeclaredOnly);

ü      konstruktorius metodu GetConstructors( )

ConstructorInfo[] cons = GetConstructors(BindingFlags.Public|BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.DeclaredOnly);

ü       metodus metodu GetMethods( )

MethodInfo[] meth = GetMethods(BindingFlags.Public|BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.DeclaredOnly);

ü       įvykius metodu GetEvents( )

EventInfo[] eve = GetEvents(BindingFlags.Public|BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.DeclaredOnly);

Detalesnė informacija

System.Type klasė suteikia galimybes pertiūrėti daugiau informacijos naudojantis iš pagrindinės klasės, kitomis klasėmis kaip MemberInfo klasė.

MemberInfo

Pagrindinė klasė visų tipų elementų informacijai pateikti. MemberInfo klasė yra pagrindinė visų Reflection klasių. Jei išskaičiuotumėme visus tipo elementus pasinaudojė System.Type.GetMembers( ) metodu, MemberInfo objektų masyvas būtų sugrątinamas, kuris suteikia pagrindinę informaciją apie kiekvieną priklausantį elementą ir yra galimybė iš tikrųjų panaudoti Reflection pratestuotuojant ar tinomas MemberInfo yra MethodInfo tipas ir daryti patikimą tipo atvaizdavimą, nagrinėti specifinius sugebėjimus.

MemberInfo klasės: FieldInfo, EventInfo, ConstructorInfo, MethodInfo,PropertyInfo.

Šios klasės susideda iš elemento informacijos konkrečiam klasės arba struktūros laukui: pavadinimas, duomenų tipas ir atributai, kurie buvo deklaruoti klasės arba struktūros lauke.

Išplėsti metaduomenys:

ü      Metodai ir jų atributai

      MethodInfo mi = (MethodInfo)Metodu_sarasas.SelectedItem;

      Uzpildyti_atributais(Metodu_atributai, mi.GetCustomAttributes(false));

ü      Laukai ir jų atributai

      FieldInfo mi = (FieldInfo)Lauku_sarasas.SelectedItem;

      Uzpildyti_atributais(Lauku_atributai, mi.GetCustomAttributes(false));

ü      Įvykiai ir jų atributai

      EventInfo ei = (EventInfo)Ivykiu_sarasas.SelectedItem;

      Uzpildyti_atributais(Ivykiu_atributai, ei.GetCustomAttributes(false));

ü      Savybės ir jų atributai

      PropertyInfo pi = (PropertyInfo)Savybiu_sarasas.SelectedItem;

      Uzpildyti_atributais(Savybiu_atributai, pi.GetCustomAttributes(false));

ü      Konstruktoriai ir jų atributai

      ConstructorInfo mi = (ConstructorInfo)Konstruktoriu_sarasas.SelectedItem;

      Uzpildyti_atributais(Konstruktoriu_atributai, mi.GetCustomAttributes(false));

.NET Rinkinio manifestas.

Lenetelėje 4 pateikiu sukurto .NET komponento manifestą. Rinkinio manifestas [13], [17] yra metaduomenys kuris apibūdina, specifikuoja viską apie rinkinį: identiškumas, sąrašas failų priklausančių rinkiniui, nuorodos į išorinius rinkinius, eksportuojamus tipus, eksportuojamus resursus ir leidimus prieiti. Trumpiau, tai charakterizuoja visas detales reikalingas komponentų diegimui „plug – and – play“.

.NET paltformoje, vietoj to kad ieškoti registre reikalingo komponento, CLR įdėmiai tiūri į rinkinio manifestą, nulemia, kuris išorinis rinkinys yra reikalingas, utkrauna reikalingą rinkinį kuris yra būtinas programai ir sukuria kaip atskirą klasės objekto atvejį.

Name = diplominis

Culture =

Version = 1.0.0.25045

CodeBase = file:///C:/Documents and Settings/Linas/My Documents/Visual Studio Projects/diplominis/bin/Debug/diplominis.exe

Flags = PublicKey

FullName = diplominis, Version=1.0.0.25045, Culture=neutral, PublicKeyToken=null

GAC = no

Location = c:documents and settingslinasmy documentsvisual studio projectsdiplominisbindebugdiplominis.exe

// Modules (1)

  [

    diplominis.exe

    ScopeName = diplominis.exe

    FullyQualifiedName = c:documents and settingslinasmy documentsvisual studio projectsdiplominisbindebugdiplominis.exe

  ]

// Resources (1)

  Metaduomenys.Modulio_atributai.resources

// Referenced Assemblies (4)

  mscorlib, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

  System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

  System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

  System.Drawing, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

// Attributes (8)

  [

    AssemblyProductAttribute

    String Product = Paieskos metaduomenys

    Object TypeId = System.Reflection.AssemblyProductAttribute

  ]

  [

    AssemblyConfigurationAttribute

    String Configuration = Programa

    Object TypeId = System.Reflection.AssemblyConfigurationAttribute

  ]

  [

    AssemblyCopyrightAttribute

    String Copyright = Linas Motiejunas, IN-0 grupes studentas

    Object TypeId = System.Reflection.AssemblyCopyrightAttribute

  ]

  [

    AssemblyCompanyAttribute

    String Company = VGTU

    Object TypeId = System.Reflection.AssemblyCompanyAttribute

  ]

  [

    AssemblyDescriptionAttribute

    String Description = Atributu panaudojimas .NET platformoje

    Object TypeId = System.Reflection.AssemblyDescriptionAttribute

  ]

  [

    AssemblyTrademarkAttribute

    String Trademark = VGTU, Inzinerine Informatika

    Object TypeId = System.Reflection.AssemblyTrademarkAttribute

  ]

  [

    DebuggableAttribute

    Boolean IsJITTrackingEnabled = True

    Boolean IsJITOptimizerDisabled = True

    Object TypeId = System.Diagnostics.DebuggableAttribute

  ]

  [

    AssemblyTitleAttribute

    String Title = Bakalaurinis darbas. Uzduotis: pasiulyti, kaip isplesti metaduomenis automatizuotai paieskai ju vykdyti

    Object TypeId = System.Reflection.AssemblyTitleAttribute

 

                                                       Lentelė 4 .NET Rinkinio manifestas

                                                         Pav. 16:  Reflection objektų modelis

Komponento specifikacijoje, modulyje, tipe ir jo elementuose: konstruktoriuose, metoduose, įvykiuose, savybėse, ir laukuose yra formuojami  arba gali būti vartotojo apibrėtti atributai. Jie įeina į kiekvieną iš jų.

Dabar pagal atributus .NET komponentų paieška yra efektyvi. .NET komponento specifikacija gali būti sudaryta iš atributų. Tai yra informacija apie rinkinį: rinkinio pavadinimas, aprašymas, konfiguracijos apršsas, kompanijos sukurusios rinkinį pavadinimas, produkto pavadinimas, prekinis tenklas. Turėdami tokią informaciją galima ieškoti reikiamo .NET komponento, kuris siūlytų reikalingas paslaugas.(Pav.16) pavaizduotas .NET reflection objektų modelis.

                                                         Pav. 17:  .NET Rinkinio, jo modulio paieška

Paieška suranda .NET komponentą (Pav.17) arba  kitaip vadinamą .NET rinkinį, pateikia vartotojui kartu su atributais. Toliau ieškomas .NET komponento modulis bei jo atributai. Komponentą gali sudaryti keli .NET moduliai.

                                                         Pav. 18:  Modulio ir tipo paieška

Per .NET reflection mechanizmą surandamas yra .NET komponento modulis (Pav. 18), jam priklausantys atributai. Ieškomi moduliui priklausantys tipai: interfeisas, struktūra ir klasė bei jų atributai.

                                          Pav. 19  Reflection ir bendroji tipų sistema (CTS), elementų paieška

Per Reflection mechanizmą gaunama visa reikalinga metaduomenų informacija: metodai, įvykiai, savybės, laukai, konstruktoriai bei jų atributai (Pav. 19).

4.4      Trumpas programinio kodo aiškinimas

Programinis kodas yra dviejuose failuose. Trumpai aptarsime kiekvieną iš jų.

Aprašomasis failas:

AssemblyInfo.cs– šiame faile yra .NET komponento specifikacija, atributai.

Pagrindinis failas:

Paieskos_metaduomenys.cs– pagrindinis programinio kodo failas, kuriame kuriama Windows forma paviršius, inicializuojami kintamieji, Aprašomos funkcijos valdančios programos langą.

App.bmp– tekstūra.

                                                              Pav. 20  Komponentinė diagrama

Komponentinė diagrama identifikuoja diplominis.exe rinkinį kaip priklausomą nuo išeities kodų: Paieskos_metaduomenys.cs ir AssemblyInfo.cs (Pav. 20)

                              

4.5      Programos naudojimo vadovas

Programai vykdyti reikia, kad kompiuteryje būtų integruota CLR [12]. Programa vykdoma paleidtiant vykdomąjį failą diplominis.exe.

 Pav. 21 Programos darbo lango vaizdas

Programa valdoma naudojant kompiuterio pelę ir klaviatūros mygtukus. Pasirinkus meniu komandą „.NET Rinkinys”, pateikiamas .NET rinkinio pavadinimas, jo versija bei papildoma informacija apie patį rinkinį – atributai (Pav. 21).

Pasirinkus komandą “Modulis”  išvedama modulio informacija.

Komanda “Savybės” nustato kokios komponento savybės, bei jų atributai..

Komanda “Metodai“ nustato kokie komponento metodai, bei jų atributai.

Komanda “Klase“ nustato kokios komponento klasės, bei jų atributai.

Komanda “Įvykiai“ nustato kokios komponento įvykius, bei jų atributai.

Komanda “Laukai“ nustato kokie komponento laukai, bei jų atributai.

Komanda   “Išeiti iš programos” utbaigia programos darbą ir utdaro programos langą.

Utbaigti programos vykdymą taip pat galima paspaudus mygtuką Esc.

5.     IŠVADOS IR PASIŪLYMAI

Šiame bakalauro baigiamajame darbe buvo pateikta utduotis išnagrinėti .NET komponentų metamodelio ypatumus, komponentų automatizuotos paieškos ypatumus bei pabandyti išplėsti .NET komponento metaduomenis.

Pagal utduoties sąlygas buvo parinktas geriausiai tinkantis metodas, kaip išplėsti komponentų metaduomenis, t.y. per atributus. Išnagrinėjus programos veikimo principus, buvo padaryta išvada, kad teorijoje aprašomi metamodelio ypatumai, atitinka eksperimentiškai gautus rezultatus. Darbe pateiktas programos naudojimo vadovas ir jo programinis kodas.

Manau, kad tolimesni darbai ir tyrimai .NET technologijų srityje turėtų būti skirti tobulinti, kurti paieškos sistemą atsitvelgiant į metaduomenis, jų reikšmes bei atributus.

6.     LITERATŪRA

           [1]         .NET Framework Developer‘s Guide

     [2]         Sametinger, J. Software Engineering with Reusable Components. Springer-Verlag, Berlin/Heidelberg/New York, 1997

           [3]         Szyperski, C. Component Software: Beyond Object-Oriented Programming. Addison-Wesley, ACM Press, New York , 1998

      [4]       Bassett, P.G. ,Framing Software Reuse: Lessons from the Real World. Prentice Hall, Inc. , 1997

            [5]   R. Šeinauskas, Projektavimas su pakartotiniu programinės įrangos naudojimu ( Reuse) 

 http://www.elen.ktu.lt/~rsei/KTU/T14L.ppt

[6]        Component - Definition.htm. http://www.google.lt

[7]        Component Definition.htm. http://www.google.lt

[8]        Metadata Definition.htm. http://www.google.lt

            [9]        http://www.ktu.lt/lt/mokslas/konf03/konf_02/IT2002/VI_sekcija.pdf

            [10]       Terminų ir santrumpų todynėlis, http://mm.mch.mii.lt/zodynelis_m.htm 

            [11]      Alessandro Orso, Mary Jean Harrold, and David Rosenblum, College of Computing

  Georgia Institute of Technology, Component Metadata for Software Engineering Tasks,  www.cc.gatech.edu/aristotle/Publications/Papers/edo00.pdf   

[12]      Albertas Čaplinskas, (1998) Programų sistemų intinerijos pagrindai (2), Matematikos ir informatikos institutas, Vilnius.

[13]      T. L. Thai, H. Lam .(2002) .NET Framework Essentials, 2nd Edition. Oreilly_dotnet_framework.pdf. http://www.google.lt

 [14]     Reading Metadata Using Reflection,http://www.funducode.com/csharpart/ypk_articles_cs.htm

 [15]     A. Hejlsberg, S. Wiltamuh, (1999 -2000) C# LanguageReference, unpublished work, Microsoft Corporation, http://elearning4guruscom.ntitemp.com/only4gurus/techlib/miscellaneous/C-sharpLRef2000.pdf 

[16]      Jesse Liberty (2001) Programming C#,  sample chapter “ Attributes and Reflection” http://www.ondotnet.com/pub/a/dotnet/excerpt/prog_csharp_ch18/index.html , http://www.google.lt

                  

            [17]      Алифанов Андрей, The RSDN Group, (2001), Использование атрибутов в среде .NET,

  http://www.rsdn.ru/article/dotnet/attributes.xml

          [18]        Андрей Мартынов, The RSDNGroup, (2003), Метаданные в среде .NET, http://www.rsdn.ru/article/dotnet/refl.xml

 

           [19]       B. Harvey,  Sharpen Up on C# , M.S., MCSD http://www.only4gurus.com/techlib/miscellaneous/burt_csharp.pdf

           [20]       Oficialus Microsoft internetinis puslapis, Visual Studio .NET Support Center

http://support.microsoft.com/default.aspx?scid=fh;en-us;vsnet

1 PRIEDAS

2 PRIEDAS

Programos kodas








Politica de confidentialitate

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2127
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2019 . All rights reserved

Distribuie URL

Adauga cod HTML in site