MIW 2009 - MOF description

Zrealizował: Adrian Stanula (4RI)

related specifications, e.g. XMI

tool support

tutorials

case studies

success stories + criticism

future developments

Prezentacja

Prezentacja projektu.

Sprawozdanie

1. Meta Object Facilities - opis

1.1. Definicja MOF'a.

Meta Object Facility jest standardem Object Management Group (OMG) dla inżynierii opartej na modelowaniu. Orginalnym celem OMG było ustandaryzowanie systemów zorientowanych obiektowo, obecnie OMG skupia się na modelowaniu oraz standardach opartych o modele, zamierza ustanowić wspólny przenośny i interoperacyjny model obiektu z metodami oraz danymi wszystkich typów występujących w rozwijanych środowiskach i platformach. MOF został stworzony za pomocą UML'a ponieważ OMG było w potrzebie aby architektura oparta na metamodelach definiowała UML'a. Jest to zamknięta architektura oparta o metamodele która pozwala na zbudowanie zupełnej i ścisłej architektury opartej o metamodele. Jest to również specyficzny język służący do definiowania metamodelów, zapewnia również definiowanie struktur lub abstrakcyjnej składni danych językowych, każdego elementu modelu w każdej warstwie w sposób ściśle łączący się z elementem modelu warstwy wyższej. W skrócie MOF używa notacji MOF::Classes do definiowania pojęć na poziomie warstwy metamodelu. MOF może być używany do definiowania metamodeli zorientowanych obiektowo takich jak UML jak również niezorientowanych obiektowo jak sieci Petriego czy web serwisy.

OMG zdefiniowało 2 warianty MOF'a:

EMOF: podstawowy MOF,

CMOF: rozszerzenie uzupełniające dla języka MOF

MOF definiuje cele obu pakietów jako: „Podstawowym celem pakietu EMOF jest możliwość budowania prostych metamodeli przy użyciu prostych koncepcji oraz wspieranie rozszerzeń (poprzez mechanizm rozszerzenia klas) dla bardziej skomplikowanych metamodeli przy użyciu CMOF”.

1.2. Struktura czterowarstwowa MOF'a.

MOF składa się z architektury 4-warstowej, zapewnia warstwę metamodelu oraz górną warstwę zwaną warstwą M3 i poza tą warstwą opisuje zasady tworzenia i manipulowania modelami i metamodelami przez zdefiniowanie interfejsu COBRA (Common Object Requesting Broker Architecture) do opisu tych operacji.

COBRA jest również standardem zdefiniowanym przez Objec Management Group (OMG).

Definicja warst MOF'a:

warstwa M3: w tej warstwie istnieje model M3 który definiuje język używany przez MOF do budowania metamodeli zwanych modelami M2.

warstwa M2: tutaj występuje model M2 który opisuje elementy warstwy M1 i jej modeli M1, te modele mogą być opisane np. za pomocąUML'a.

warstwa M1: tutaj występują modele M1 którymi dla przykładu może być model UML'a.

warstwa M0: ta warstwa jest ostatnią warstwą zwaną warstwą danych i jest używana do opisu obiektów świata rzerzywistego.

Na rysunku została przedstawiona hierarchia opisanych warstw na przykładzie opisania klasy „Student” za pomocą języka UML oraz jej zdefiniowania:

1.3. Jak używać MOF'a.

Przede wszystkim powinniśmy opisać typ naszego systemu i jest to robione za pomocą języka MOF.

Powinniśmy zapewnić podstawowy zakres UML'a który zapewni bogaty „język” do opisu takich typów systemów jak:

referencje,

operacje,

wyjątki,

klasy i dziedziczenie,

klasy abstrakcyjne,

różnorodność,

agregację,

kompozycje.

Potem powinniśmy opisać klasy oraz asocjacje:

Klasy powinny opisywać koncepty dla danego typu systemu.

Asocjacje powinny opisywać relacje między pojęciami w systemie.

Na końcu wszystkie te akcje powinny zawierać się w jednym pakiecie.

2. Narzędzia

MOFLON jest darmowym narzędziem do modelowania przy użyciu języka jakim jest MOF. Jest to narzędzie w którym możemy modelować w łatwy sposób za pomocą edytora graficznego. Interfejs programu przedstawiony jest na rysunku poniżej.

Oficjalna strona projektu MOFLON

3. Tutoriale

3.1. Przykład wykorzystania MOFLON'a do definiowania diagramów XTT

W programi wybieramy File->New MOFLON Project. Po utworzeniu nowego projektu tworzymy w nim pakiet o nazwie XTT. W pakiecie XTT tworzymy kolejny pakiet o nazwie Diagrams. W nim stworzymy podstawowe klasy z które wchodzą w skład każdego diagramu. Są to klasy: Diagram, Node oraz Edge. Aby utworzyć nową klasę klikamy prawym na pakiecie Diagrams i z menu kontekstowego wybieramy opcję: „Create new MOF class” po czym w oknie dialogowym wybieramy nazwę dla klasy, jej widoczność, czyli czy jest to klasa public, private albo undefined. Jeśli klasa ma być klasą abstrakcyjną zaznaczamy odpowiedni checkbox. W ten sposób tworzymy powyższe 3 klasy. Kolejnym krokiem jest stworzenie podstawowych typów danych takich jak Number, String oraz Boolean. W pakiecie XTT tworzymy pakiet i nadajemy mu nazwę Primitives. Klikamy prawym klawiszem na pakiecie Primitives i wybieramy z menu kontekstowego „Create MOF primitive type”. W oknie dialogowym wpisujemy nazwę typu, wybieramy czy jest to typ prywatny czy publiczny oraz mapujemy na odpowiedni typ Javy wybierając go z listy rozwijanej na dole okna dialogowego. Tworzymy typ podstawowy o nazwie Number o widoczności publicznej (public) oraz mapujemy go na typ Integer z Javy (InfrastructureLibrary.Core.PrimitiveTypes.Integer). Analogicznie tworzymy 2 typy podane powyżej. Pakiet Primitives powinien wyglądać następująco.

Po stworzeniu pakietu Primitives należy go zaimportować do pakietu Diagrams. Wchodzimy do pakietu XTT, zaznaczamy pakiet Diagrams, po czym przy wciśniętym klawiszu [ctrl] zaznaczamy pakiet Primitives. Po zaznaczeniu pakietów wybieramy z menu przycisk „import” po czym pakiet zaznaczony jako drugi zostaje zaimportowany od pierwszego. Do klasy Node dodajemy atrybuty określające położenie węzła. Klikamy prawym na klasie Node i z menu kontekstowego wybieramy opcję: „Add MOF attribute”. Nadajemy mu nazwę „x” oraz widoczność public. Parametry Lower bound i Upper bound ustawiamy na 1 gdyż nie chcemy aby to był atrybut tablicowy. Typ tego elementu ustawiamy na Number. Analogicznie dodajemy atrybut „y”.

Wiemy że diagramy składają się z węzłów i z krawędzi. Musimy więc połączyć te klasy w ten sposób ze sobą. Musimy więc dodać pomiędzy nimi asocjacje. Wybieramy klasę Diagram a potem przy wciśniętym klawiszu [ctrl] wybieramy klasę Node, po czym z opcji programu wybieramy „Create MOF association”. Nadajemy nazwę asocjacji np. „DiagramContainsNodes” po czym przechodzimy dalej. Dla każdej strony asocjacji musimy wybrać nazwę oraz liczebność. Dla strony klasy Diagram wybieramy nazwę np. „containingDiagram” oraz liczebność 1 czyli oba parametry Upper i Lower bound ustawiamy na 1. Dla strony węzła wybieramy nazwę np. „containedNode” oraz ustawiamy liczebność na wartości od 0 do nieskończoności (ustawiamy parametr Lower bound na 0 oraz Upper bound na *). Zatwierdzamy kreator tworzenia asocjacji przyciskiem „Finish”. Analogicznie tworzymy asocjację pomiedzy klasą Diagram oraz Edge. Podobnie tworzymy asocjację miedzy klasami Node i Edge nadając im np. nazwy „NodeReferencesIncomingEdges” oraz „NodeReferencesOutgoingEdges” tak jak to jest pokazane na rysunku poniżej.

W pakiecie XTT tworzymy strukturę pakietów oraz importy w powyżej opisany sposób tak jak pokazano na rysunku poniżej.

W nowo stworzonym pakiecie Tables tworzymy klasy i połączenia tak jak pokazano na rysunku poniżej wzorując się na poleceniach wykorzystanych przy tworzeniu pakietu Diagrams.

Definiujemy pakiet „AbstractXTTDiagrams”. Najpierw otwieramy pakiet po czym z widoku po lewej stronie przeciągamy do niego 3 klasy: Diagram, Node oraz Edge. Tworzymy nową klasę abstrakcyjną „AbstractXTTDiagram” po czym zaznaczamy tą klasę oraz przy wciśniętym klawiszu [ctrl] zaznaczamy klasę Diagram. Przy zaznaczonych obu klasach wybieramy z menu opcję „Create MOF generalization” po czym utworzone zostaje połączenie pomiędzy dwoma wybranymi klasami oznaczające że klasa AbstractXTTDiagram dziedziczy po klasie Diagram. Analogicznie tworzymy inne klasy oraz wszystkie połączenia w sposób podany powyżej oraz tak jak w pakiecie Diagrams aby końcowy wynik wyglądał tak jak na rysunku poniżej. Do tabeli TableContainer tworzymy referencje wybierając z opcji „Create MOF reference”.

Na końcu tworzymy strukturę klas dla pakietu XTTDiagrams tak jak pokazano na rysunku poniżej.

Cały projekt w można pobrać tutaj: XTT Diagrams in MOFLON

3.2. Tutorial opisujący budowę metamodelu dla diagramów elektrycznych.

Meta Object Facility (MOF) Book: strona 53-62

Materiały

Materiały i pliki