Translate

ラベル Import の投稿を表示しています。 すべての投稿を表示
ラベル Import の投稿を表示しています。 すべての投稿を表示

2020/07/14

Eclipse MDT/UML2モデルのPapyrusでの読み込み確認

このブログでも前から書いている内容ではありますが、Papyrus は Eclipse の EMF (Eclipse Modeling Framework)ベースの UML2 モジュールに基づいて構成されています。

この UML2 モジュールは Eclipse のプロジェクトカテゴリとしては「MDT」(Model Development Tools) に属しており、そのプロジェクトのURLは以下になっています:
MDT/UML2
https://wiki.eclipse.org/MDT/UML2
なおこのサイトに「List of UML2-compatible UML Tools」という情報が掲載されています。UMLツールとして良く聞く「Enterprise Architect」や「IBM RSM/RSA」、「MagicDraw」などの間でUML2モデルとしてのコンパチビリティがリスト化されています。
MDT-UML2-Tool-Compatibility
https://wiki.eclipse.org/MDT-UML2-Tool-Compatibility

さて、前々から
「Eclipse の UML2 モジュールで作成されたモデルは、どの程度、問題なく Papyrus に取り込み出来て、どの程度、問題なく図として再現できるのか」
が気になっており、今回、少し試してみました。

サンプルとしては、Papyrus の新規ファイル作成で「Examples」から生成可能な
「UML2 Example Projects」
→「Getting Started with UML2」
プロジェクト中にある「ExtendedPO2.uml」を用いました。

同プロジェクトは File→New→Other から以下で生成できます。


生成されたプロジェクトの名前は
org.eclipse.uml2.examples.gettingstarted
となっています。

同プロジェクトは、MDT/UML2のJavaクラスライブラリを用いてJavaコードから「UMLモデル」(XMI)を生成するためのサンプルコードプロジェクトで、そのコードを実行して出来たファイルが
ExtendedPO2.uml
となります。

またプロジェクトフォルダ内に同モデルのpngファイルが置かれています。どのツールにより図を生成したのかは分かりませんが、以下の図となっています。


この「ExtendedPO2.uml」を Papyrus のプロジェクトに Import し、Papyrus のクラス図で表示してみました。

その結果図が以下です。

Papyrusでモデルインポートする際にエラーも出ませんでしたし、図としても十分再現されています。

簡単な例ではありますが、MDT/UML2のモデルは Papyrus 上で問題なく扱えそうです。
ある部分、当たり前かもしれませんが、確認できました。

これにより、MDT/UML2のExampleプロジェクトのサンプルコードから見て取れる
JavaプログラムからUML2のPapyrusモデルの生成
までが繋げられそうです。

PapyrusやMDT/UML2の関連ツールで出来ることも多いですが、モデル生成の意味では、この MDT/UML2 モデルの直接生成も使えそうな手段に思えます。

2020/06/04

モデルファイルの分割作成と使用

UMLでモデル化を行う場合の最上位の要素は「Model」なのですが、どの粒度で1つのモデルパッケージとなる最上位モデルを規定するかの問題があります。

対象とする開発プロジェクト全体を扱うモデルを1ファイルで作成するか、より細かな粒度でモデルファイルを扱うかの話しとなります。

上記の「Model」のリンクから辿れる記事で説明した通り PapyrusでのModelのファイル構成は非常にシンプルでファイルの独立性が高いです。また作成しているUMLモデルから別ファイルのモデルのImportも簡単に行えます。

そのため自分としては「1つの関心事で1つのモデルファイルを作成する」というやり方を行っています。

実はそうしている理由がもう一つあって、昔、ツール上での自分の操作ミスとツール不具合により、作成中のモデルが完全に消えたことがあります。それなりにボリュームのあるモデルを作成していたため、かなりショックで、またそのリカバリ(といっても再度のモデル化ですが)に多くの時間を有しました。その時の経験も踏まえ、出来るだけファイル分割したモデルを作成しています。

またファイル分割したモデルとすることで、複数人での並列作業も可能となります。

そのような運用を行う場合のやり方について以下で紹介したいと思います。

プロジェクトの作成

上で説明した様な運用をする場合、分割する粒度を「プロジェクト」とするか「モデルファイル」とするかが、まずはの分岐点となります。
どちらでも大きな問題は発生しませんが、それよりも自身がPapyrus/Eclipseの「プロジェクト」という単位で何を扱っているかに大きく依存しそうな気がします。
自分は RCP版の Papyrus でも通常の Eclipse と同様に扱っており、より大きな括りで扱っている「Workspace」下に関係する C/C++ プロジェクトや Java プロジェクト、XMLプロジェクトやLaTeXプロジェクト等が混在しています。その一つとして「(ある特定の対象向けの)モデルプロジェクト」として「プロジェクト」を位置づけています。
そのため、作成するモデルが最初から小さいことが明確になっている場合を除き、

「Papyrus プロジェクトではなく 素のプロジェクトを作成し、その下に複数のモデルファイルを作成する」

というやり方をとっています。

素のプロジェクトの作り方ですが、Papyrusのメニュー上の File > New から、「Papyrus Project ではなく」、「Other」を選択します。


これにより使用中の Papyrus (Eclipse) で作成可能なプロジェクトやファイルの一覧が表示されるので、その中の

General > Project

を選択します。


これにより素のプロジェクトファイルが作成可能です。

モデルファイルの作成

その後は、作成したプロジェクトを Project Explorer 上で選択して、同じく File > New から、「Papyrus Project ではなく、Papyrus Modelを選択」します。


その先は通常の Papyrus Project での作成作業と同じダイアグラムが表示されます。


これを繰り返すことにより、一つのプロジェクト下に複数の Papyrus Model (ファイル)を作成することが可能です。

以下は SimpleProject という素のプロジェクト下に Papyrus Model として A、B、C という3つのモデルファイルを作成したプロジェクトの例です(Project Explorer 表示)。


各々のモデルファイルをダブルクリックすると、そのモデルが Papyrus 上で開かれます。

モデルパッケージのImport

今、Papyrus Model の A には ClassA クラスが、Papyrus Model の B には ClassB クラスが定義されているとします。

そしてPapyrus Model の C において、A の ClassA クラス、および B の ClassB を用いて新たなClassC を定義したいとします。

そのためには Model C において Model A パッケージと Model B パッケージを Import するとが必要となります。

まずは  C を開いて、その Model Explorer 上でトップの Model (ここでは C )を選択します。


その後、マウス右クリックで

Import > Import Package from User Model

を選択します。



するとワークスペース内のプロジェクトからUMLモデルとしてImport可能なモデルファイルが選択可能となります。


ここで、「A.uml」および「B.uml」をマウスで選択し、ダイアログ中央にある [⇒] ボタンで、右側に表示させ [OK] ボタンを押します。


その後、どのパッケージ要素を Import するかの選択用ダイアログが表示されます。


ここで A と B を選択することになるのですが、注意点が「Action」です。
ダイアログ中央ぐらいにある 4 つのボタンのうちの3つが対応しているのですが、Actionとしては昔の記事「Papyrus における登録済パッケージのインポート」に示した通り、以下の3種類:

  • Load
  • Import
  • Copy

があり、どれを選択するかで対応する [Load All] [Import All] [Copy All] ボタンをクリックします。

今回は Import で進めるとして、[Import All] ボタンをクリックするとダイアログの表示が以下となります。


これで [OK] を押すと、Model Explorer 上で Model A と Model B が現れます。


あとは Model C 上で ClassA や ClassB をダイアグラム上に Drag & Drop しながら、モデル作成を進めていけます。

モデル作成

試しに Model C 上でClassAとClassBをCompositeする「Cクラス」を定義してみると、このようになります。ClassA と ClassB は Model Explorer 上から Drag & Drop しました。


なお、ClassA や ClassB が別パッケージ由来というのが少し分かりにくいので、明示したい場合には、ClassA (やClassB)をダイアグラム上で選択し、Properties の Appearance の一番下にある

「Qualified name de」

を適切に切り替えることで表示が変更されます (de って何でしょうかね? なにかしら単語が途中で切れているのでしょうか? それともフランス語の前置詞 de なのでしょうかね??)