Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_hekateatl [2008/09/30 17:16] miw |
pl:miw:miw08_hekateatl [2019/06/27 15:50] (aktualna) |
===== 080603 ===== | ===== 080603 ===== |
* trans? | * trans? |
| |
| |
| |
====== Projekt ====== | ====== Projekt ====== |
| |
* Metamodel ARD (w oparciu o [[https://ai.ia.agh.edu.pl/wiki/hekate:hekate_markup_language|HML]]) | |
| |
| |
| |
| ==== ATL ==== |
| ATL (ATLAS Transformation Language) to język transformacji modeli wraz zestawem narzędzi opracowanych przez ATLAS Group (INRIA & LINA). ATL pozwala wyprodukować z zestawu modeli źródłowych, zestaw modeli docelowych. |
| |
| ATL jest hybrydą programowania deklaratywnego i imperatywnego. Preferowany styl programowania to styl deklaratywny który pozwala w łatwy sposób opisać powiazania pomiędzy modelem źródłowym a docelowym. Jednkże ATL przewiduje również konstrukcje imperatywne w celu opisania wyrażeń trudnych do opracowania w sposób deklaratywny. Program ATL składa się z zestawu reguł które definiują dopasowanie elementów modelu źrodłowego do modelu docelowego |
| |
| Opracowane dla platformy Eclipse zintegorowane środowisko programistyczne (ATL IDE) oferuje szereg standardowych narzędzi programistycznych (podświetlanie składni, debuger itd.), które ułatwiają prace z ATL. Projkt ATL oferuje również bibliotege transformacji ATL gdzie można znaleźć ponad 100 opracowanych rozwiązań http://www.eclipse.org/m2m/atl/atlTransformations/ |
| |
| |
| |
| ==== The Model-Driven Architecture ==== |
| MDA to metoda projektowania systemów oprogramowania. Stanowi ona zbiór wytycznych dotyczących struktury specyfikacji, które są wyrażone jako modele. |
| Modele stanowią podstawowe elemetny MDA. W dziedzinie MDA model definiowany jest poprzez model modeli, tak zwany metamodel. Mówimy ze model zgodny z semantyka metamodelu odpowiada temu metamodelowi |
| |
| |
| {{:pl:miw:mda.jpg|:pl:miw:mda.jpg}} |
| |
| |
| ==== Trasformacja ATL ==== |
| |
| {{:pl:miw:atl.jpg|:pl:miw:atl.jpg}} |
| |
| |
| Powyższy rysunek opisuje schemat transformacji ATL. Model Ma (plik wejściowy Ecore czyli XMI) odpowiadający metamodelowi MMa (plik Ecore) jest transformowany do modelu Mb (plik wyjściowy Ecore), który odpowiada metamodelowi MMb (Ecore). Transformacja definiowana jest przez model Mt (plik ATL) który odpowiada metamodelowi MMt (metamodel ATL). Metamodele MMt, MMa oraz MMb muszą odpowiadać metamdelowi MMM (MOF albo Ecore) |
| |
| |
| |
| |
| |
| |
| ==== Przykłady użycia ==== |
| |
| **DSLs coordination for Telephony** - praca przedstawia studium impelmentacji dwóch języków związanych z dziedziną telefonii: SPL(Session Processing Language) i CPL (Call Processing Language). Częścoiowo opierają się ona na tych samych słownikach. Jednakże same języki są bardzo różne i zostały zaprojektowane, aby być wykorzystywane przez różnych ludzi. Praca pokazuje w jak wykorzystać ATL w celu transformacji programu z jednego języka do drugiego (http://www.eclipse.org/m2m/atl/usecases/DSLsTelephony/) |
| |
| ==== Transformacja ARD w ARD ==== |
| |
| Aby dokonać transformacji należy stworzyć metamodel ARD, odpowaidający mu model będący plikiem wejściowym do transformacji, oraz plik ATL opisujący transformację |
| |
| * Metamodel ARD (w oparciu o [[https://ai.ia.agh.edu.pl/wiki/hekate:hekate_markup_language|HML]]) - schemat |
{{:pl:miw:ard.png|:pl:miw:ard.png}} | {{:pl:miw:ard.png|:pl:miw:ard.png}} |
* Metamodel ARD KM3 | * Metamodel ARD KM3 zbudowany na podsawie schematu |
<code> | <code> |
package Hml { | package Hml { |
</code> | </code> |
| |
* Metamodel ARD XMI | * Metamodel ARD XMI - wygenerowany przez środowisko ATL |
<code> | <code> |
<?xml version="1.0" encoding="ISO-8859-1"?> | <?xml version="1.0" encoding="ISO-8859-1"?> |
</code> | </code> |
| |
* Plik XMI do transformacji (Termostat) | * Plik wejściowy XMI do transformacji (Termostat) odpowiadający metamodelowi ARD |
<code> | <code> |
<?xml version="1.0" encoding="ISO-8859-1"?> | <?xml version="1.0" encoding="ISO-8859-1"?> |
</code> | </code> |
| |
| * Model ATL - nie wprowadza żadnych zmian w pliku wyjściowym |
| <code> |
| module ARD2ARD; -- Module Template |
| create OUT : Hml from IN : Hml; |
| |
| rule Element2Element { |
| from |
| s : Hml!Element |
| to |
| t : Hml!Element ( |
| id <- s.id |
| ) |
| } |
| rule Dep2Dep { |
| from |
| s : Hml!Dep |
| to |
| t : Hml!Dep ( |
| independent <- s.independent, |
| dependent <- s.dependent |
| ) |
| } |
| rule Trans2Trans { |
| from |
| s : Hml!Trans |
| to |
| t : Hml!Trans ( |
| src <- s.src, |
| dst <- s.dst |
| ) |
| } |
| rule Att2Att { |
| from |
| s : Hml!Trans |
| to |
| t : Hml!Trans ( |
| name <- s.name |
| ) |
| } |
| rule Attref2Attref { |
| from |
| s : Hml!Trans |
| to |
| t : Hml!Trans ( |
| ref <- s.ref |
| ) |
| } |
| </code> |
| |
====== Sprawozdanie ====== | ====== Sprawozdanie ====== |