私は次の「ソフトウェアの現実のソフトウェア現実」を持っています(これにもアクセスできません)。
タイプClass1のいくつかのオブジェクトJohn ...が存在することが認識されているので、それらはすべてこれらの4つの属性を持っています。 GUIを介して設定できます。トリッキーな部分は次のとおりです。最初にEnumTypeを選択する必要があります。この選択に応じて、DataTypeの可能な選択肢が減る可能性があります。また、AttributeValueの「属性タイプ」は異なる場合があります。
[2019-02-14の更新]:
例:Dictionの場合、多くのエントリが存在する可能性があります。各エントリは、可能なデータ型の(それぞれ独立した)エントリを持つ2つのフィールドで構成されます。 int | char |ダブル|文字列| XML。最初のフィールドはXML、2番目のフィールドはdoubleにすることができます。
[2019年2月14日更新]
e.g. JohnA: None=>Field | => char ='a' | AttributeA
JohnB: None=>Field | => int = 23 | AttributeA
JohnC: List=>[]Array | => String =["hello","world","list"] | ...
JohnD: Diction=>DictCollection | => {XML, double} = {(<length>, 2.34); (<width>, 5.43)} | ...
[2019-14-02に更新された画像]そのように表示しようとしました:
私の質問:UMLでClass1をモデル化する方法
私の研究の読み:
私のケースにそれを採用しようとしました。記載されていないか、理解できません。 派生プロパティが私が探しているもののように聞こえます...それは単純な連結または計算ではありません。 まだ有効ですか?
追加情報:このClass1は、別のクラスでもその属性のデータ型として使用する必要があります-データ型として使用していることを確認する必要がある場合に備えてクラス構造と内部依存関係が影響を及ぼします。
私はこのアプローチを試しました:
このアプローチにはいくつかの問題があります:
【2019-02-14更新画像】
UMLは階層ベースで構築されており、 [〜#〜] mof [〜#〜] はUMLメタモデルの分類子を定義し、UMLモデルはUMLメタモデルの分類子のインスタンスであり、オブジェクトは、UMLモデルの分類子のインスタンスです。
あなたの 'EnumType'は、それが制御しているインスタンスと同じレイヤーの型として機能しています。このレイヤーの交差は、UMLでは直接サポートされていません。それを表現したい場合は、型とインスタンスが同じモデル内で共存できる別の形式で作業する必要があります。
これは、Isterが例を示しているように、集中的な分類器ではなく広範な分類器を使用するなどの非公式な回避策の作成を妨げるものではありません。
あなたは3つのサブクラスで正しい方向に進んでいます。それを派生属性と組み合わせ、メソッドを再定義して目的の効果を得ましょう。
プロパティがderivedの場合、その値は他の属性(特定のサブクラスが属している情報を含む)から計算できます。これは、 UML仕様ですが、当然の結果です)。
子のプロパティがredefinesproperty fromparentの場合、通常は詳細。考えられる明らかな再定義の1つは、属性のデータ型の変更です。この場合、変更はより広い(完全な)列挙型からより狭い列挙型になります。
すべてのサブクラスはすべての属性を持っている必要があるため、それらを親クラスClass1
に保持します(ちなみに、これは抽象である必要があります)
現在、属性EnumType
およびAttributeValue
の値は、選択したサブクラスに厳密に依存しているため、これらは派生属性です。また、サブクラス内では変更できないため、サブクラスでReadOnly
に設定して、この特定の値を効果的に適用するデフォルト値を提供できます。
DataTypeには、3つの列挙子があります。1つ(DataTypes
)は最も広いリストを持ち、2つはDataTypes
の特殊なバージョンで、それぞれがリストをさらに絞り込みます(それぞれDataTypesList
およびDataTypesNone
)。この特殊化を、それぞれの一般化関係とともに表示することができます。
DataType
の属性ClassDiction
のタイプは、最も広範なバージョンのままであるため、そこで何も変更する必要はありません。他の2つの子クラスでは、狭い列挙でDataType
を再定義します。
EnumTypeとAttributeValueの新しいバージョンも、制約とデフォルトを追加してParentクラスから元のバージョンを再定義しているため、適切なredefines
も必要です。
その結果、次の図が表示されます。
この図は説明した内容を正確に表していますが、もう少し高度なUMLを使用しています。誰が図を読むのかを常に考慮してください。すべての受信者がメッセージを確実に理解できるように正確に描写するのではなく、一部のテキスト説明(補足またはテキスト注釈/制約として)を追加する方が良い場合があります。