マージ

パッケージのマージ(merge)とは、あるパッケージが他のパッケージをマージする場合、同じ型と同じ名前をもつクラスは自動的に元のクラスを拡張する。
つまり、元のクラスに対する汎化関係を持つということである。

パッケージのマージを示すには、マージするほうのパッケージからマージされる方のパッケージに向かって破線の矢印を引き、<>キーワードを記述する。

マージに関するルールを次に示す。

  • パッケージのprivateメンバは、どのメンバともマージされない。
  • マージするパッケージに含まれるクラスのうち、マージされるパッケージに含まれるクラスと同じ名前および型を持つものは、マージされるクラスに対する汎化関係を持つ。この結果、多重継承が起こりうる。(UMLでは多重継承が認められている)
  • マージ後、元のパッケージの名前を使ってクラスのスコープを明示的に指定すると、元のクラスを参照することができる。
  • マージするパッケージまたはマージされるパッケージにのみ存在するクラスは、変更されることなく、マージするパッケージに追加される。
  • マージされるパッケージに含まれるサブパッケージは同名のものが既に存在していない限り、マージするパッケージに追加される。
  • マージするパッケージの中に、同名のサブパッケージが既に存在する場合は、その2つのサブパッケージの間で新たなマージが開始される。
  • マージされるパッケージからのパッケージインポートは、マージするパッケージからのパッケージインポートになる。インポートされる要素はマージされない(つまり、汎化関係が与えられることはない)インポートされる要素が、マージするパッケージの中の要素と競合する場合は、マージするパッケージ側の要素が優先される。インポートされる要素を参照する場合は、明示的に装飾する必要がある。