SysMLの言語要素や表記方法について、モデルの具体例を挙げながら解説。第1回はSysMLの構造図「ブロック定義図」について。
特集「モデリング言語 SysMLを概観する」では、SysMLの特徴やUMLとの関係などについて紹介した。
本連載では、SysML(バージョン 1.1)の構造図である、ブロック定義図や内部ブロック図で用いる言語要素やその表記方法について、モデルの具体例を挙げながら解説していく。読者の方々がSysMLを活用してモデリングができるよう理解の一助となれば幸いだ。
SysMLはUMLをベースとしているため、UMLを理解していればSysMLもより理解しやすいが、UMLをご存じない読者にもご理解いただけるよう、UMLと共通する部分についても、ある程度解説していくようにしたい。
今回は、SysMLの構造図の1つであるブロック定義図の基本的な部分について解説する。
<目次> 第1回:ブロック定義図の基礎 |
||||
「ブロック定義図(Block Definition Diagram)」と「内部ブロック図(Internal Block Diagram)」は構造図として位置付けられ、システムの構造を表現するために利用される。構造図を用いて、システムをその構成要素の木構造として表現したり、構成要素間の関係を表現したりできる。
本記事で解説するブロック定義図は、特にシステムを構成する要素の型(Type)を定義するために利用される。では、ここでいう「型」とはどのようなものだろうか。
例として、「田中さんのマイカー」「佐藤さんのマイカー」といった、いくつかの実在の自動車を考えてみよう。これらを分類してみてほしい。セダン、ハッチバックといった車体の形状に着目した分類や、FF、FRといった駆動方式に着目した分類など、いくつかの分類方法があることに気付くだろう。得られたこれらの分類に対して、おのおのどのような特性を持っているかを考えてみてほしい。それまで、漠然としていた「自動車」に対するとらえ方が、徐々に明確なものになってきたのではないだろうか。
この例では、「田中さんのマイカー」が実際の物理的な物であるのに対して、「セダン」「FF」などは物の特性を表す型と見なすことができる。型に着目して物事を掘り下げていくことは、すなわち物事を分析し、明確化することだといえるだろう。
このように、型に着目しながらシステムやその構成要素を表現するうえで、ブロック定義図を活用できる。ブロック定義図で利用可能な型にはいくつかの種類があり、後述のブロックや値型などが含まれる。
ブロック定義図は、言語仕様上UMLのクラス図をベースとしており、クラス図で使える言語要素の多くをブロック定義図でも使うことができる。
ブロック定義図について説明するための題材として、図2のようなロケットを考えてみよう。
このロケットは多段式になっている。上昇中に1段目の推進部の燃料を使い果たすと、1段目の推進部を切り離し、2段目の推進部を使ってさらに上昇する仕組みだ。
このロケットの構造の概略を、構成要素の木構造として表現するブロック定義図を図3に示す。
図4は、より多くの種類のモデル要素を用いて、ロケットの構造の概略を表現したブロック定義図である。
以降、図4のブロック定義図を基に各モデル要素について説明していく。
図4のブロック定義図では、ロケットのようなシステムやその構成要素であるロケットエンジンなどの特性を表す単位を図5のように表現している。このように、システムやその構成要素の特性を表現するための単位が「ブロック(Block)」である。
ブロックは、システムをその構成要素に分解したり、それら要素を分類することによって得ることができる。ブロックを使って、システムを構成要素の木構造として表現できる。また、ブロックをさまざまな形で組み合わせることによって、目的とするシステムを表現できる。ブロックは型の一種であり、プロパティや操作など、後述するようなさまざまな情報をブロックに付加することで、ブロックをより詳細に表現できる。
図6に示すように、ブロックの表記では<<block>>ステレオタイプを用いる。ただし、ブロック定義図の中でステレオタイプを省略してもデフォルトでブロックと見なされるため、<<block>>ステレオタイプは省略して構わない。
図4のブロック定義図では、推進部と被運搬部の間に「推進部が被運搬部に推力を加える」関係があることを図7のように表現している。このように、2つのブロックの間の意味的な関係を表現するためのモデル要素が、「関連(Association)」である。
関連でつながれた一方のブロックが関連名の主語に当たる場合には、黒い三角形で関連の作用する方向を表現できる。また、「〜を加速する」のように関連につながるブロックの一方が目的語に当たる場合には、より簡単に「加速する」と表記できる。
後述のパート関連や共有関連のように特別な意味を持つ関連とは異なり、図7のようにブロック間の単純な参照関係を表現するための関連を「参照関連(Reference Association)」と呼ぶ。
図4では、「〜に推力を加える」関係において、推進部は「推進元」として働き、被運搬部は「作用先」として働くことを図8のように表現している。このように、関連の表す文脈において、関連につながるブロックが果たす役割を表現するモデル要素が、「関連端(Association End)」である。
図4では、コア機体と固体燃料ブースターの間の関係について、コア機体から固体燃料ブースターを参照するが、逆に固体燃料ブースターからコア機体は参照しないことを図9のように表現している。このように、関連でつながれた一方のブロックから、もう一方のブロックを参照できるかどうかを表すモデル要素が、「誘導可能性(Navigability)」である。
図9では単方向のみ参照が可能なため、関連の一端に矢印を表記している。これに対して、双方向とも参照が可能な場合には、図7のように矢印を表記しない。
図4では、コア機体と固体燃料ブースターの間の関係について、1つのコア機体に対し、固体燃料ブースターを最大4基まで装備可能であることを図10のように表現している。装備可能な下限は0基であり、すなわちブースターを装備しない場合もあることを表している。このように、関連でつながれた一方のブロックのインスタンス1つに対して、もう一方のブロックのインスタンスがいくつ対応するかを表すモデル要素が、「多重度(Multiplicity)」である。
多重度の表記で、文字「*」は上限の指定のない複数を意味する。
図11では、荷載部に対するフェアリングの多重度は示されていない。このように誘導可能性が単方向のみの関連において、参照される側の多重度を省略すると、デフォルト多重度「1」が適用される。この場合、1つの荷載部に対してフェアリングは1つ対応することを意味する。後述のパート関連や共有関連では、菱形側のデフォルト多重度は「0..1」である。
図4では、ロケットと推進部の間の関係について、推進部がロケットの一部であることを図12のように表現している。このように、全体と部分との関係を表現する関連が「パート関連(Part Association)」である。パート関連は、通称「コンポジション」とも呼ばれる。
パート関連には以下のような制約がある。
図4では、推進部がコア機体、ロケットエンジン、固体燃料ブースターから構成されていることを図13のように表している。このように、ある1つのブロックをパート関連の一端(全体側)とする関係が複数ある場合に、パート関連の一端をまとめて表記できる場合がある。このように表記したパート関連を「多分岐パート関連(Multibranch Part Association)」と呼ぶ。
関連の一端をまとめて表記するには、まとめられる側の関連端の情報(関連端名、多重度、誘導可能性など)が一致している必要がある。
図4では、ロケットと被運搬部の間の関係について、被運搬部がロケットの一部であること、ロケットが破棄されても被運搬部は運用が継続されることを、「共有関連(Shared Association)」を用いて図14のように表現している。共有関連は、厳密な意味を定められているわけではなく、モデリングの状況に応じて意味を決めて利用するための関連である。共有関連は、通称「集約」とも呼ばれる。
前述のパート関連と同様、共有関連についても、関連の一端をまとめて表記することが可能である。これを「多分岐共有関連(Multibranch Shared Association)」と呼ぶ。
図4では、液体燃料タンクとロケットエンジンの関係について、液体燃料タンクからロケットエンジンに液体燃料が供給される関係があること、燃料供給量のような情報が伴うことを図15のように表現している。このように、関連だけでなくブロックの性質を併せ持つことで、単なる関連よりも多くの特性を表現できるモデル要素を「関連ブロック(Association Block)」と呼ぶ。
関連ブロックは、関連であると同時にブロックでもあるため、後述のようなプロパティや操作など、通常のブロックと同様の要素を保持できる。
Copyright © ITmedia, Inc. All Rights Reserved.