2

同じ UML クラス図について 2 つの質問があります。1 つ目は、UML ネイティブ型を使用してテンプレート クラスをモデル化する方法についてです。2 つ目は、OCL 制約でテンプレート クラスを処理する方法についてです。

質問 1: テンプレート クラス

インターバルにテンプレート クラスを使用し、UML 標準を使用して表現したいと考えています。間隔は、整数と浮動小数で使用できる必要があります。これまでに見つけた最良の方法は次のとおりです。

これまでに見つかった最適なソリューション

ここでのアイデアは、パラメーターTがどちらかのクラスのスーパークラスでIntegerあるテンプレート クラスを持つことFloatです。

問題は、UML の基本型をグループ化するために再定義する必要があることです。Tテンプレートクラスを定義する明確な方法があり、それがタイプintegerまたはfloat(ここではUMLのプリミティブです)のいずれかであると言うかどうかを知りたいです。

質問 2: テンプレート クラスの OCL 制約

私の問題の 2 番目の側面は、OCL 制約を追加して、間隔に少なくとも 2 つの要素が含まれている必要があることを示したいということです。T問題は、前のクラス図のバインディングに応じて、ルールが同じであってはならないことです。

フロートの場合:

context  Interval
inv :    self.supBound > self.infBound

整数の場合:

context Interval
inv :   (self.infBoundIncluded and self.supBoundIncluded) implies supBound - infBound >= 1

context Interval
inv :   (not(self.infBoundIncluded) and self.supBoundIncluded) implies supBound - infBound >= 2

context Interval
inv :   (self.infBoundIncluded and not(self.supBoundIncluded)) implies supBound - infBound >= 2

context Interval
inv :   (not(self.infBoundIncluded) and not(self.supBoundIncluded)) implies supBound - infBound >= 3

そのため、OCL で、 が にバインドされている場合にのみ適用されるルールと、TにバインドされてIntegerいる場合にのみ適用されるルールがあることを示す方法を見つける必要がありますFloat。私は OCL の専門家ではなく、役立つ情報を見つけることができなかったので、助けを求めています。

前もって感謝します、

バスティアン。

4

1 に答える 1

1

さらに調査した結果、次の解決策を見つけました。

質問1

解決策は、ジェネリック型のテンプレート クラスを使用し (このクラスは UML 標準に従ってインスタンス化できません)、それを実現クラスにバインドすることです。対応する UML クラス図は次のとおりです。

ここに画像の説明を入力

ここでは、2 つの使用可能なクラスがIntegerIntervalあり、UML 基本型とを使用することに加えて、物事をシンプルに保つRealInterval一般的なテンプレート クラス から派生しています。Intervalintegerreal

質問2

整数区間と実数区間の分離はクラス レベルで行われるため、OCL の区別は簡単です。したがって、制約は次のとおりです。

context IntegerInterval
inv:    ...

context RealInterval
inv:    ...

とにかく、私はまだ他の提案を受け入れています:)

于 2013-11-24T15:20:53.067 に答える