UML metamodelis

**UML [[metamodelis]]** – duomenų modelis, naudojamas aprašyti projektus išreikštus UML. UML yra nuosekli kalba skirta pažymėti sistemos artefaktus. Sistemos architektai gali naudoti ja apibrėžiant, vaizduojant, konstruojant ir dokumentuojant projektus. Paprastai kalba naudojama, kad pažemėti programinių sistemų artefaktus, kaip programinės įrangos kūrimo proceso dalį.

Unifikuota Modeliavimo kalba apima:
* Modelio elementai, kurie apima fundamentinio modeliavimo konceptus ir semantikas.
* Notacija, modelio elementų vizualiam vaizdavimui.
* Taisyklės, kurios aprašo naudojimo idiomas.

Ji taip pat suteikia plėtimasį ir specializacijos mechanizmus, kad praplėsti pagrindinius komponentus.

UML nesuteikia, apibrėžia ne diktuoja:
* Programavimo kalba. UML turi semantikos modelį, kuris gerai pažymi OO kalbų šeimą, bet pats nereikalauja specifinės kalbos naudojimą.
* Įrankiai. UML taip pat neapibrėžia CASE įrankių projektavimą, nei apibrėžia jų panaudojimą. Tačiau yra natūralu tikėtis, kad CASE įrankiai palaikantys UML laikosi UML semantikos.
* Kūrimo procesas. Standartinio proceso apibrėžimas nėra UML tikslas, UML buvo tyčia padarytas nepriklausomu procesu.

### UML elementai

Visi UML fundamentalūs modeliavimo konceptai yra apibrėžti kaip elementai UML specifikacijoje (Object Management Group (2003)). Viskas, nuo konkrečių kalbos konstrukcijų, tokių kaip klasė iki abstrakčių konceptų, tokių kaip panaudojimo atvejai, yra minima kaip elementai.
Tegu, mes norime aprašyti klasę *Car* (automobilis), kuris turi ryšius pavaizduotus 1 pav.. Klasė *Car* yra kaip specializacija klasės *Vehicle* ir yra susijusi su klase *Tire*. Kiekvienam klasės *Car* objektui ryšyje dalyvauja keturios *Tire*.

Kiekviena klase 1 pav. laikoma UML elementu. Specializacijos/generalizacijos sąryšys (*angl. Specialization/generalization*) tarp *Vehicle* ir *Car*, ir ryšys tarp *Car* ir *Tire* yra taip pat laikomi elementais. Netgi galai, kuriais ryšiai prijungiami prie klasių yra laikomi atskirais elementais.
Visi šie elementai yra dalis UML semantinio modelio. 2 pav. vaizduoja elementus iš UML semantinio modelio, kurie yra naudojami aprašyti pateiktą pavyzdinį projektą. UML semantinis modelis yra standartizacijos pastangų rezultatas, kad formaliai apibrėžti objektų analizės ir kūrimo (OA&D) modelių semantiką. UML semantinio modelio ribose konceptai tokie kaip objektai ir klasės turi tikslias reikšmes. Kiekvieno elemento tipo tiksli semantika yra apibrėžta UML specifikacija.

### UML elementai vaizduojami metamodelyje

Šio modelio sudedamosios yra UML elementai, kurie gali būti naudojami aprašyti projektus tokius kaip 1pav..

Kiekvienas UML elementas yra vaizduojamas 2 pav. kaip objektas. Yra keli elementų tipai; vienas elemento tipas kiekvienam atskiram modeliuojamam konceptui. Elementai aprašantys pavyzdinį projektą turi tipus, kad pavaizduoti klasę, apibendrinimus, ryšius ir ryšių galus.
Tik tam tikras elementų išdėstymas turi prasmę. Pavyzdžiui, ryšio () elementas, kuris turėtų susijungimą su apibendrinimo () elementu, būtų beprasmiškas. Tačiau, ryšio objektas 2 pav., kuris turi susijungimą su objektu ryšio galas (), sėkmingai vaizduoja sąryšio, tarp *cars* ir *tires*, semantiką pavyzdiniame projekte. Elemento objektai gali turėti skirtingus atributus priklausomai nuo jų tipų. Pavyzdžiui, ryšio galo elementai turi atributus, kurie vaizduoja daugybę ryšio klasifikatorių.

UML semantinis modelis leidžia mums vaizduoti kiekvieną UML elementą kaip objektą. Jis apibrėžia kokius atributus gali turėti elemento objektas ir kokie sąryšiai gali egzistuoti tarp elemento objektų. Programinės įrangos projektas pavaizduotas unifikuota modeliavimo kalba aprašo programinės sistemos modelį. UML semantinis modelis yra naudojamas vaizduoti programinės sistemos aprašymą. Todėl UML semantika yra modelis skirtas aprašyti modelius. Todėl UML semantinis modelis yra dažnai minimas kaip UML metamodelis. Metamodelis yra kalba skirta aprašyti modelius.
3 pav. vaizduoja dalį UML metamodelio naudojamo 2 pav., kad pavaizduoti projektą 1 pav.. Pilnas UML semantinis modelis yra aprašytas detaliai OMG Unified Modeling Language Specification specifikacijoje (Object Management Group (2003)), UML Semantika skyriuje. Čia aprašyta meta modelio semantika yra CASE įrankio lygio.
3 pav. *Element*, *ModelElement*, *Namespace*, *GeneralizableElement* ir t. t. yra visi UML metamodelio klasėmis. Tokios klasės yra dažnai minimos kaip meta klasės. Bet koks projektas išreikštas UML gali būti išreikštas šių klasių pavyzdžiais, jų savybėmis ir ryšiais tarp jų.

## Bibliografija
* Rolf W. Rasmussen. A framework for the UML meta model // http://www.ii.uib.no/~rolfwr/thesisdoc/main1.html
* Object Management Group (2003). OMG Unified Modeling Language Specification v. 1.5 // https://web.archive.org/web/20070711061257/http://cs.ulb.ac.be/cours/infoh302/03-03-01.pdf