Translate

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 なのでしょうかね??)