2016-03-22 7 views
1

私は、確率分布を扱うソフトウェアから始めます。確率のクラス図

私はクラスダイアグラムを使ってデザインしようとしていて、ここで抽出したデザインの問題に直面しています(まだコーディングしていません)。

Class diagram for probability

私は彼らが私は確率からP(X)とP(Y)として、サブクラス化しました確率を、持っているXとYの2つのランダム変数のインスタンスを、持っています。

変数インスタンスから確率値への関連付けを「確率」にする必要がありますか?それとも、これは私のデザインの冗長性ですか?

実際のコードで考えると、P(X)値とXインスタンスの間に関連性があると思います...これはスーパークラスの確率との関連性が重複していることを意味しますか?

もしそうなら、不特定多数のランダム変数インスタンスの関連付けが不特定数になるでしょうが、それは実際に私のコードがどのように見えるのかということです。ダイアグラムにこれらの関連付けを持たず、スーパークラス "確率"との関連性だけで私のシステムを説明するには十分でしょうか?

これをUMLで表現した私の理由(以下のコメントへの回答): 私は確率をいくつかのオブジェクトの単なる関数として表現し、これをある種のマップに格納できると思います。すべての確率の合計が1などとなる不変性...次に、データを追加して、私の全体の地図を再訪して再加工しなければならない。これは共同分布に影響を与える...など、複雑さとどんな手続き的なアプローチもかなり乱雑にしています。手続き的なアプローチではうまくいかないわけではありませんが、私が構築しようとしているソフトウェアのオブジェクト指向の明確な図が本当に必要です。クラス図はこれを行うのに非常に良いツールのようです。手続き的に生成されたものではなく、各分布をオブジェクトとして考える必要があります。

+0

UMLで他の数学的な問題を表現する理由を詳しく説明する必要があります。そのような確率はクラスではありません。これはオブジェクト上の関数です。 –

答えて

1

概要

あなたは "P(Y)" または "P(X)" を "X" と "Y" からのアソシエーション "の確率を" 必要はありません。彼らは冗長です。

"確率"クラスまたはオブジェクトは関連を表します。アソシエーションは、このクラスをオブジェクトにしたままにしておきます。

オペレーション、メソッドまたはアソシエーションは、クラスまたはクラスのインスタンス(a.k.a. "変数")として表現または概念化することもできます。

ロングボーリング拡張回答

モデルオブジェクト、クラス、および団体、多分少し面倒なこと。

あなたには、しばらくの間、値を持つ変数があります。

オブジェクト図1(不完全)

............... 
..+---------+.. 
..| 5 |.. 
..+---------+.. 
............... 

UMLは、プログラムをモデル化するために設計された、ので、あなたはそのタイプを指定する必要があり、この場合は 、あなたの値は、完全なオブジェクトではありません、ただ浮動小数点数。

オブジェクト図2(不完全)

............... 
..+---------+.. 
..| Float |.. 
..+---------+.. 
..| 5 |.. 
..+---------+.. 
............... 

それは、より複雑な値だった場合、あなたは、現時点で、これはそうではありません、プロパティ、メソッド、およびその他のUML機能を使用してもよいが。

同じ概念又は変数、例えば他の値が存在することができます値のそれぞれが表すいくつかの他の値を有していてもよい

............................ 
..+---------+..+---------+.. 
..| Float |..| Float |.. 
..+---------+..+---------+.. 
..| 5 |..| 3.1416 |.. 
..+---------+..+---------+.. 
............................ 
..+---------+..+---------+.. 
..| Float |..| Float |.. 
..+---------+..+---------+.. 
..| -55.12 |..| 0 |.. 
..+---------+..+---------+.. 
............................ 

オブジェクト図3(不完全)確率。

したがって、それぞれの元の値と確率値との間には関連性があります。

いくつかのオブジェクトの例をモデル化しましょう。 (不完全)

オブジェクト図4

.................................... 
..+---------+..........+---------+.. 
..| Float |..........| Float |.. 
..+---------+..........+---------+.. 
..| 5 +-------+--+ -444 |.. 
..+---------+.......|..+---------+.. 
....................|............... 
....................|..+---------+.. 
....................|..+ Float |.. 
....................|..+---------+.. 
....................+--+ 0 |.. 
....................|..+---------+.. 
....................|............... 
....................|..+---------+.. 
....................|..| Float |.. 
....................|..+---------+.. 
....................+--+ +1 |.. 
.......................+---------+.. 
.................................... 

あり、それぞれ元の値、およびその確率値のより多くの例かもしれない、しかし、非常にそれらを表現するために複雑にすることができます。

このオブジェクト図の例をより概念的なクラス図に変更しましょう。

変数を表すクラスダイアグラムがあります。変数によってインスタンス化することもできます。ある時点では、その変数の値を保存します。

そして、それを「X」としましょう。 (不完全)

クラス図5

.................. 
..+------------+.. 
..| X: Float |.. 
..+------------+.. 
.................. 

'X'を表すか、または一度に、単一の値を有するが、それは変更することができることに注意してください。

ここで、「X」にはいくつかの確率値があります。 多くのクラスではなく、1つのクラスボックスですべてを表現しよう。

そして、それらをUMLの変数またはクラス名として使用することはできないため、かっこなしで'PX 'と呼んでください。 、この値のペアが関連しているので

........................................ 
..+------------+........+------------+.. 
..| X: Float |........| PX: Float |.. 
..+------------+........+------------+.. 
........................................ 

(不完全)

クラス図5、の関連付けを表現する行を追加してみましょう。

クラス図5(不完全)

........................................ 
..+------------+........+------------+.. 
..| X: Float +--------+ PX: Float |.. 
..+------------+........+------------+.. 
........................................ 

しかし、'X'の各値については、のは、それを示すためにダイヤモンドを追加してみましょう、'PX'のいくつかの値とすることができます。

1対1の関連付けがある場合がありますが、この場合は1対多の関連付けです。

クラス図6

........................................ 
..+------------+...../\.+------------+.. 
..| X: Float +----< >+ PX: Float |.. 
..+------------+.....\/.+------------+.. 
........................................ 

ダイヤモンドは "多くの" 値を表すボックスの近くに描かれています。

アソシエーションの目的を説明するためにオプションのラベルを追加しましょう。

そして、この矢印の適用方法を示す矢印。

クラス図7

........................................ 
..........<<..Probability Of............ 
..+------------+...../\.+------------+.. 
..| X: Float +----< >+ PX: Float |.. 
..+------------+.....\/.+------------+.. 
........................................ 

概要

団体のいくつかの種類が存在することができ、あなたの場合には適用されない "相続" の関連付けを、使用しています。

オブジェクト図は具体例に適しており、値が であり、変数を自由に使用しません。

クラス図は概念化であり、通常は変数またはプロパティを持ち、初期値または定数にのみ値を使用します。

多くのUML開発者は、オブジェクト図をスキップし、クラス図を使用して直接的なシナリオを表現しています。 Altougth、Object Diagramsはまだ有用です。

「オブジェクト図」は丸いボックスで表し、クラス図では鋭い角を使用しています。私はASCIIの例でそれらをうまく表現できませんでした。

バックグラウンドドットは、UML図には表示されません。図を強調表示するために使用しています。

+0

オブジェクトダイアグラムは、クラスダイアグラムに移行する前に特定の例を表現するのに役立つと思います(例を一般化する)。これをやり直すつもりです。ありがとう。 –

1

から「私は2つの確率変数のインスタンスを持っている」私はXYはオブジェクトであり、random variablesがクラスであることを理解しています。

オブジェクトを表現する場合は、UML object diagramsを使用する必要があります。しかし、class diagramが必要な場合は、オブジェクトのインスタンス化を取り除き、そのクラス(すなわち、関数で表すことができるrandom variableprobability、およびprobability distribution of variable(別名P(x)、P(y))のみを考慮する必要があります。

probabilityは確率値または集合を意味するのか、何らかの基本確率法則を意味するのかどうかは明らかではありません。最初のケースでは、probability distribution of variableprobabilityの関連付けを使用します。次に、一般化関係を考えることができます。

+0

オブジェクト図については知りませんでした...ありがとうございます。 –