合成関係

用語

合成関係

用語(英)

Composition

別名

-

識別情報

  • Term ID: src/main/doxsite/glossary/object-foundation/composition.dox

  • English label: Composition

  • Japanese label: 合成関係

  • Japanese short label: 合成

  • Scope qualifier: Object Foundation / whole-part relationship

  • Bare-label linking: explicit-only

  • Category: Object Foundation

  • Status: normative

  • Definition authority: SimpleModeling BoK, aligned with UML 2.5.1

定義

合成関係(Composition)とは、全体が部分に対する構造上の所有を担う強い全体部分関係です。部分は同時に高々一つの合成された全体に属し、その存在、ライフサイクル、および不変条件は全体の境界と整合して管理されます。

UML

UML 2.5.1では、合成関係はAssociation EndのAggregation Kindを composite とする二項の関連です。合成するオブジェクトは部分の存在と保管に責任を持ち、部分側の上限多重度は一です。SimpleModelingはこの意味を採用し、ドメイン上のライフサイクルと不変条件の境界を判断するために用います。

一般的な用法

一般語としての「合成」、関数合成、画像や音声の合成は、この用語が表す全体部分関係ではありません。また、共有され得る部分を表す集約関係(Aggregation)とも区別します。

オブジェクト関数パラダイム

合成関係は、Object側でライフサイクルと不変条件の境界を定めます。Functional側の関数合成とは別の概念であり、両者を短い表記「合成」だけで同一視しません。

CML

CML(Cozy Modeling Language)では、関連を合成関係として明示して記述できます。永続化時の同時保存、フィールドの包含、または画面上の親子表示だけから合成関係を推論しません。

Scala

Scalaには合成関係と一対一に対応する言語要素はありません。フィールド、case class、コレクション、ネストした型は実装候補ですが、それだけでは構造上の所有を表しません。

simplemodeling-lib

simplemodeling-libのCollection、Group、Schemaなどは合成された構造の実現に利用できますが、それらの型を使用したことだけでドメイン上の合成関係が成立するわけではありません。

公開成果物での用法

日本語の記事と動画では、初出を「合成関係(Composition)」とし、同じ全体部分関係を扱う文脈が続く場合だけ「合成」と短縮します。通常の日本語や関数型プログラミングにおける「合成」は、この用語へ自動リンクしません。

境界

  • 合成関係は関連(Association)一般と同義ではありません。

  • 同時保存、画面の親子関係、フィールド参照だけでは合成関係になりません。

  • 多重度(Multiplicity)は合成関係の個数制約を表せますが、それ自体は構造上の所有を意味しません。

  • 関数合成や集約関係(Aggregation)とは異なる概念です。

関連語

  • 構造上の所有

  • モデル上の関連

  • 集約関係

  • モデル関係

  • ライフサイクル

  • 不変条件

  • 多重度

参照