Translate

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

2020/07/10

モデルの画像によるデコレーション

Tipsです。

Papyrus/UMLで特定ドメインのモデル化を行っている際に、そのモデル化対象を端的に示す「シンボルマーク」をUMLのモデル要素にデコレーションして、ダイアログ上で表示したい場合があります。

通常のPapyrus(実際にはEclipseのEMF/UML2だと思いますが)の「モデルアイコン」は表示/非表示の指定は可能ですが、そのような一般的なアイコンではなく、ユーザ独自のマークです。

例えば、このような表示です(クラス図上でのクラス表記)。

 

Papyrusでは、そのデコレーション手段がサポートされています。

まず最初に PapyrusInternal というプロファイルをモデルに適用します。通常のプロファイル適用操作(Apply registered profile)により表示されるダイアログ上で「Papyrus Internal」と表示されているプロファイルとなります。


このプロファイルですね。

説明にも
Profile that provides annotations for the tool itself (Decorations, etc.)
と記載されています。

このプロファイルを適用すると、例えばクラス図上で作成したクラスに対して、以下の様な
「TypeSymbolDefinition」
というステレオタイプが適用可能となります。


このステレオタイプを適用した直後は以下のような表示となります。


基本的には、この「symbolPath」にシンボルマークの画像ファイルを指定することで、デコレーション表示が可能となります。

どのようにファイルを指定するか、またどのようなパス名で指定するかですが、一番楽なのが、一旦同ダイアログを非表示として、再度表示すれば、プロパティの所に
Symbol
という選択肢が現れますので、そこから指定するのが楽です。
以下がダイアグラムの再表示を行った後のプロパティのメニューですが、左側の「Comments」と「Profile」の間に「Symbol」が現れてるのが分かります。


この「Symbol」を選択すると、
[Browse] または [Browse workspace]
としてファイルが選択可能であることが分かります。


前者がファイルシステムから、後者が Papyrus (Eclipse) で開いているワークスペースから、となります。

とりあえず同じプロジェクト下のフォルダに画像ファイルが置いてあるとして、それを指定してみます。



[Browse workspace] からワークスペース内のファイルを指定すると
platform:/resource/...
というファイル指定方法となります。

で、はい、これだけでは何も表示は変わりません笑。

その後、表示の細かな指定を行います。

「Properties」の「Appearance」を開き、「Shape Decoration」と書かれた所までスクロールします。


ここ(Shape Decoration)の

  • Visible を true に
  • Position で表示位置を選択

すると、モデル上の指定位置にアイコン表示がなされます。


このような感じになります。

 ≪TypeSymbolDefinition≫ というステレオタイプ名表示が重なって見づらい場合には、同じくAppearance の少し下にある「Stereotype display」の「 Visible 」のチェックをはずします。


これで見やすくなりました。

これが一つの例ですが、このような奥ゆかしい表示ではなく、例えばコンテキスト図を作成し、そこに大きくシンボルマークとして表示したいケースもあるかと思います。

その場合は「Appearance」ではなく、対象のモデルをマウスで選択しマウス右クリックで表示される
「Filters」メニュー
から操作する表示方法があります(以下の説明では一旦「Shape Decoration」の「Visible」を「false」に戻しています)。


「Show/Hide Compartments」で「Symbol」を選択します。


すると、以下の表示に変わります。


うまく使い分けると各ダイアグラムでより分かりやすいモデル図が作成できると思います。

なお画像のファイル形式として svg と png は表示できることを確認しています。他はまだ試していません。

2020/06/04

クラスのプロパティ表示から関連表示への変換

Tipsです。

クラスをモデル化する際、ユーザ定義クラスを型とするプロパティを属性区画に追加した後で、関連(Association)として表示したい事があります。

例えば
というクラスがあった場合に、この parts メンバ要素をXクラスとの関連として表示させたい場合です。クラス図上で、ClassXクラスの各種要素と共にXクラスの詳細も表示することで、両者が関係するある特徴を明示したクラス図として表記したい時などです。

この時のModel Explorerの表示は


となっています。
通常、各種関連も Model Explorer 上で表記されているのですが、ClassAクラスに直接 parts プロパティを追加したため、関連を示すモデルが存在しません。

では関連としてのモデル要素をEdgeパネルから作らないといけないかというと、そういう訳ではありません。その関連を自動生成するやり方があります。

まず、クラス図上で対象のプロパティ(parts)を選択し、マウス右クリックから

Utils > Create Association From Property

を選択します。


これを実行すると、何の変化も起こらない様に見えますが、Model Explorer を見ると、ClassAクラスとXクラスの間のpartsに関する関連が生成されています。


一番下の「A_parts_classA」です。

これをクラス図上で Drag&Drop することで、関連が表示されます。


後はXクラスの表示内容を変更したり、関連(A_parts_classA)の見せ方を変更することで、所望の意図を持つクラス図に修正することが可能です。

継承先クラスでの継承元クラス要素の表示

Tipsです。

「区間の名前表示と区間で表示するモデル要素」という記事で、クラス図において、クラスの区画上で表示する要素の選択や、表示する区画自体やそのタイトルの選択方法について説明しました。

関連して、「継承先クラスで継承元クラスの要素の選択表示は行えるか?」の話しです。

答えは「行えます」

上記の元記事にあるBaseクラスを継承してDerivedクラスを規定したとします。


DerivedクラスにBaseクラスの要素を表示するかどうかの操作は元記事と同様に Derived クラスをマウスで選択した後、

Filters → Show/Hide Contents

から行います。

上記操作により以下のダイアログが表示されます。


見ての通り、「(from <Class> Base)」として Base クラスの要素の表示が可能です。

全てをチェックしてOKとすると、クラス表記は、


となります。

なお「Show/Hide Contents」として表示されるダイアログ上で y や b が選択肢として出てきませんが、これはそれらが「private」として定義されているためであり、正しい動作となります。

区間の名前表示と区間で表示するモデル要素

Tipsです。

Model Explorer 上で以下の様に示されている 3つのProperty 「x, y, z」と 3つのOperation 「a, b, c」を持つクラス Base を考えます。


クラス図上で Base クラスは以下の様に表示されると思います。

クラス名「Base」の下にある attributes を表示する「区画」(Compartment)に「x, y, z」が表示され、operations を表示する区画に「a, b, c」が表示されています。

この表示に対し
  • 各区画が何を表示する所かを明示したい
  • 各区画で表示する内容を選択したい
という様な時のツール操作方法です。

まずクラス図上で対象のクラス(ここではBaseクラス)をマウス左クリックで選択し、その後、マウス右クリックで表示されるドロップダウンリスト上で「Filters」を選択します。


すると幾つかのメニューが表示されます。

ここで
  • Show/Hide Contents を選択すると表示する要素の選択
  • Show/Hide Compartments を選択すると表示する区画や区画の名前の選択

が行えます。

まず「Show/Hide Contents」ですが、以下のダイアログが表示されます。


このチェックボックスを選択もしくは選択解除することで表示する要素を選べます。

例えば、attributes としては「xのみ」、operations としては「a, bのみ」を表示したい場合は、そのようにチェックボックの選択を行い、

[OK]ボタンを押すとクラス図での表記が以下の様に変更されます。


また「Show/Hide Compartments」ですが、以下のダイアログが表示されます。


ここで
  • 左側の「Compartments To Display」が区画自体を表示するかどうか
  • 右側の「Display Compartment Title」が区画の名前を表示するかどうか

の選択となります。

まず右側の「Display Compartment Title」を試してみます。現在表示されている3つの区画全てにタイトル表示のチェックを行うと、


クラス表記は以下の様に変わります。
無事に区画のタイトルが表示されています。

次に「Compartments To Display」を試してみます。

まず attributes 区画だけの表示を試してみます。


この時、チェックを外した区画の「Display Compartment Title」のチェックはあってもなくても構いません。これでOKを押すと、

とBaseクラス上で attributes 区画のみが表示されます。

今度は operations 区画だけを表示させてみます。ダイアログ上の選択で、


としてみます。こうするとクラス表記は、
と変わります。

これらをうまく組み合わせて、同じクラスモデルでも表示する内容を選択して、各図で何を示そうとしているのかを明確にすることが可能です。

2020/06/03

モデル名の英語表示と日本語表示

Tipsです。

モデル化を行っている時に、モデル要素の Properties 表示で「Name」と「Label」があります。


普通にモデルの名前をつけた場合、この「Name」の所に名前がついていると思います。

それが正規の「モデル名」だとして、この「Label」は表示名を表します。

特に日本語圏でモデル化を行っている場合、

  • モデル化を検討している時や人に見せる時には「日本語」で表示したいけど、モデル作成後にコード生成を行う場合には「英字名」を使いたい

というケースもあるかと思います。

その場合、この「Label」が役に立ちます。

上記の例で「NameをCar」とし「Labelを自動車」として与えると、モデル表記(例えばクラス図)上では「自動車」と表示されます。内部的な正規の名前は「Car」のままです。



「別に Name の所に日本語名を入れれば良いのでは」と思われるかもしれませんし、たしかにそれで問題なく名付けも表示も行われますが、例えばJava/C++のコード生成などをした際に日本語名がトラブルになることがあります。

そのため、日本語を使用したい場合には、
  • 正規名(Name)は英字名で
  • 表示名(Label)は日本語で
として運用されることをおすすめします。

なお、幾つか「バグ?」と思われる挙動があり、最初に Name に日本語名を付けてモデル化作業を進め、その後、「NameからLabelに日本語名をコピペして、その後、Nameに英字名をつける」とした場合、正しく名前が表示されないとか、Labelにコピペした日本語名が消失するという問題に出会うことがあります。
最初に Name に日本語名をつけることは自分もすることが多いですが、そのような名前変更の作業を行う場合には、

  1. 最初に Name に書かれている名前を「切り取り(Cut)」
  2. その後、Nameに英字名を入力し Enter キーを押して確定
  3. その後、Label に切り取っておいた(日本語の)名前を「貼り付け(Paste)」
  4. その後、Labelの所で Enter キーを押して確定

という手順を取る方がトラブルに合わなくて済むかと思います。

なお手順2および手順4で Enter キーで確定した場合、セルの色とダイアグラム上のモデル名が変わるので、変更されたことの確認を明確に行うことが可能です。

関連における表示要素の選択

Tipsです。

2つのクラス間で関連 (Association。Composite や Shared など)をモデル化した後、関連端などの表示内容を表示する・しないを変更したい時があります。

例えば



というモデルにおいて、「A_engine_car」と名付けている関連が持つ関連端の多重度「1」や名前「car」や「engine」を非表示にしたい等です。

上記モデルでは

  • Carクラス側の「+car」を非表示にしたい
  • Carクラス側の「1」を非表示にしたい

というケースが多いのではないでしょうか。

また上の図の例では関連に陽に名前をつけて「A_engine_car」としてますが、作成したモデルにより、関連の名前を表示したり非表示にしたりを調整したい時です。

その場合は、関連のエッジをマウス左クリックで選択した後、マウス右クリックで表示されるドロップダウンリストから

Filters → Show/Hide Labels

を選択します。



すると、表示する内容を選択するダイアログが表示されます。



このチェックボックスのチェックを切り替えることで、表示内容を選択可能です。

例えば Engine クラス側の関連端内容の表示のみを行いたい場合には、



を選びます。

すると以下のように所望のモデル表示となります。


例えば関連の名前をモデルにはちゃんと規定したいが表示はさせたくないから付けないという人もおられるかもしれませんが、上記の設定を使用すると、モデル化とその表示とを分離して作業を進めることが出来ます。

なお上記の Filters からのドロップダウンリストに

  • Show All Labels
  • Hide All Labels

というメニューも見えますが、まさに名前の通りの挙動となります。

関連端の可視性の変更

Tipsです。

Papyrusのクラス図を用いたモデル化の際、Association(CompositeやShared)で2つのクラス間を関連付けた後に「可視性」(Visibility)を変更したい時に、どうすれば良いか悩む時があります。

例えば

とモデル化した後で、Engineクラス側の関連端「engine」の可視性を、今の + (+engine。ようは public)から ー (-engine。ようは private) に変更したい時などです。

Association のエッジを選択して Properties タブを見てみると、関連端に対する「名前」や「多重度」など幾つかの属性は変更出来ますが、可視性(Visibility)を変更できる所はメニューにはありません。

以下の図のような感じです。


このような時に可視性を変更するには、上記図のような Association に対する Properties タブから行うのではなく、Model Explorer 上に見える Car クラスのプロパティとしての「engine」を選択することで行います。

Model Explorer の Car クラスを見ると、


のように Carクラス に engine が見えると思います。

これをマウスで選択し、Properties タブを開くと、


のように Carクラスの Property としての engine の編集が行えるので、ここで「Visibility」を public から private に変更します。


これにより、クラス図上で 「- engine」と変更されます。


このような Tips が Papyrus には色々と存在しているので、また紹介してゆけたらと思います。

ちなみに上記の Propertiesタブ で、可視性を public から private に変更した際、図の左上にあるアイコンが変わっていることにも気づけるかと思います。Model Explorer 上でも



のように変動して private メンバを示すアイコンに変更されています。