2012-02-29 35 views
10

クラスにシングルトンクラスへのポインタが含まれている場合は、aggregationにすることはできますか?クラス図でシングルトン関係を表示する方法

クラスはシングルトンクラスのインスタンスを作成していないので、私の理解ではhas-aの関係にはなれません。それはassociationのような関係を使用しているからです。

答えて

9

タイトルは完全な意味で書かれているわけではありませんが、シングルトンのクラスはありますが、シングルトンの関係は実際にはありません。一人ひとりの関係では、両端で多重度1を割り当てるだけです。

クラスも多重度を持つことができます。 1つのケースを除いて、これを使用することはよくありません。シングルトン。

Bを持つ、またはBを含む、または参照する場合、UMLでは基本的に3つのレベルの緊張があります。

集約(非菱形矢頭)は、包含が排他的ではなく、含まれているオブジェクトがそのライフサイクルのどの側面も包含するオブジェクトと共有していないことを意味します。実装では、これは通常ポインターです。

コンポジション(黒塗りの菱形の矢印)は、含まれているオブジェクトが含まれていると、そのオブジェクトが破棄されることを意味します。これを通常動作させることは、包含が排他的であることを意味します。実装では、これは、しばしば、デストラクターが包含クラスのデストラクタで呼び出されるポインタです(ただし、それを含むクラスのコンストラクタでは作成できません)。

ディレクテッドアソシエーションまたはメンバーアトリビュート(UMLと同じこと)は、格納されているオブジェクトが状態の一部であること、または含まれるオブジェクトの構成要素であることを意味します。実装では、これは通常、参照がポインタでないこと、または含まれているオブジェクトが含まれているオブジェクトと一緒に作成され、破棄されることを意味します。

集約は定義上の排他的ではないため、シングルトンの集約は完全に許可されます(いくつかの異なるクラスからも)。

コンポジションは、含まれているクラスもシングルトンでない限り、iffyビットです。

属性/指定された関連付けが間違っている可能性があります。含まれているクラスがシングルトンである場合、それは含意されているので、包含されたクラスをシングルトンにすることは意味をなさない。含まれているクラスが2つの異なるクラスのメンバーとして使用されている場合、それはシングルトンになることはできません。

上記以外にも、必要な数の使用関係を追加できます。これはすべての設計で共通しており、関係のソース側のクラスがターゲット側のクラスのメソッドを呼び出すことを意味します。

enter image description here

1

また、塗りつぶしの代わりに白い四角形の集計もあります。 openは、最初のインスタンスがもう一方のインスタンスを作成しない(ただし、まだhas-a関係を持っている)ことを意味します。

1

集約のふりをすることができますが、それは真実です:シングルトンはオブジェクト指向のコードとは関係ありません。それらはグローバルな状態の形式です(グローバル変数と同様)。

問題に対する別のアプローチを検討してください。

PS助けることができるいくつかの材料:

4

私ははい、技術的に、と言うでしょう、あなたはシングルトンオブジェクトへのポインタであるメンバ変数を持つことができますそれを集約と呼ぶ。集約項を使うことは、一度コードを書いてしまえば、あまり意味がありません。すべての目的と目的のために、それは単なる連合です。

ただし、ダイアグラムでの集約関連の使用は、ダイアグラムの閲覧者がそれを理解するのに役立つ場合と役立たない場合があります。それはおそらく、それを誰に提示するのか、集約を意味するものが何を意味するのかによって異なります。

______________________   ______________________ 
|     |   |     1| 
| AggregatingClass |   | SingletonClass | 
|____________________|  0..1|____________________| 
|     |<>--------|     | 
|____________________|   |____________________| 
|     |   |     | 
|____________________|   |____________________| 

(カーディナリティを示すシングルトンクラスボックスの右上隅にある1注:

は、実際にはUMLユーザガイド(第2版)からの情報を使用して、タイトルに質問を(答えるために。 )

+0

私は誰も実際にタイトルの質問に答えなかったことを知った! –

+1

...そして私の最後のコメントの後、それはまだ答えられていなかった!私はダイアグラムを更新し、正しく答えました。私は「シングルトンの関係」を「シングルトンのパターン」として誤解しました。 @ahj –

関連する問題