同じ 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 の専門家ではなく、役立つ情報を見つけることができなかったので、助けを求めています。
前もって感謝します、
バスティアン。