こんにちは皆さん、私はUMLを理解しようとしていますが、それについていくつか質問があります
UML では、クラスにステレオタイプのタグを付けることの意味は何<<abstract>>
ですか?
この制約を不変式として表現する方法、
こんにちは皆さん、私はUMLを理解しようとしていますが、それについていくつか質問があります
UML では、クラスにステレオタイプのタグを付けることの意味は何<<abstract>>
ですか?
この制約を不変式として表現する方法、
ステレオタイプの「抽象」は存在しません。抽象クラスはイタリック体で表す必要があります。抽象とは、クラスをインスタンス化できないことを意味します。そのためにはサブクラスが必要です。したがって、疑似コードの制約として、これは次のことを意味します
for all instances i of MyAbstractClass holds: i.actualClass != MyAbstractClass
またはMyAbstractClassホールドのocl
self.allInstances()->forAll(i: MyAbstractClass | i.classifier <> self)
最初の質問バージョンでは「抽象的」という言葉が表示されなかったので、一般的なステレオタイプを拡張しました。
まず第一に、UML を学ぶとき、ステレオタイプを最初に調べるべきではありません。それらはかなり複雑です。
ステレオタイプまたはキーワード (どちらも で示される<<MyStereotype>>
) には、一般的な意味はありません。それは特定のステレオタイプによって定義されます。通常、代わりにステレオタイプを不変式として表現することはできません。
しかし、UML の他の側面も同じように示すことができます。UML メタレベルのクラスは<<metaclass>>
、ステレオタイプを持たないか、実際の型が異なる場合でも、 でマークされます。ステレオタイプ自体は<<stereotype>>
マーカーで表示されます (特殊なクラスのインスタンスであっても)。
カスタム ステレオタイプの例としては、「サービス」があります。サービスを表すクラスをマークできます。「サービス」が特別なインターフェースを実装しなければならないという制約が存在する可能性があります。この場合、この制約を (退屈な) 不変条件として表現できます。しかし、おそらくそれは単なるマーカーです。後者の場合、代わりにキーワードを使用できます。
«abstract»
このスレッドが数年前のものであることは認識していますが、ステレオタイプが UML 仕様でサポートされていないという主張を裏付けるものとして、他の誰かによって参照されたときにこのスレッドにたどり着きました。その主張はあまり正確ではありません。その理由を説明したいと思います。まず、抽象クラスとは何かを明確にすることから始めます。
抽象クラスは、完全な実装を含まないクラスの定義です。したがって、抽象クラスを直接インスタンス化することはできません。特殊化 (継承) する必要があります。抽象クラスは、クラス名と抽象メソッドをイタリック体で表記し、オプションで {abstract} プロパティをクラス名および/または操作に追加することで表記されます (通常はメソッドと呼びますが、メソッドは実際には「メソッド」です)。操作が実装される ") は抽象的です。
インターフェイスは、実際には特定のタイプの抽象クラス、つまり実装のないクラスです。それらの表記法は、他のタイプの抽象クラスとは異なります (イタリック体にせず、«interface»
キーワードを使用し、すべての特殊化矢印を点線で表記します)。したがって、Christian がここで述べているように、抽象クラスには標準的な表記法があります。少なくとも、クラス図にはあります。
さて、クリスチャンも言っているように、«abstract»
ステレオタイプが存在しないのは事実ですが、必要に応じてステレオタイプを作成できることも事実であり、そうすることはUML仕様でサポートされています. (少なくともクラス図では) 理由があるとは考えにくいですが、それでも可能です。
ステレオタイプは、UML の「拡張メカニズム」です (ステレオタイプ、タグ付き値、および制約の 3 つがあります)。ある種の要素をより具体的に定義することができます。ステレオタイプはクラスに適用されます (実際にはメタクラス、メタクラスはインスタンスがクラスでもあるクラスです)。多くのステレオタイプが事前定義された「標準ステレオタイプ」です (UML 1.4 では「標準要素」と呼ばれていました)。これらの例は、«metaclass»
(インスタンスもクラスであるクラス) および«file»
(開発されたシステムのコンテキストにおける物理ファイル) です。
ステレオタイプはキーワードの一種です。仕様 ( Superstructure 2.0、Annex B、p. 663) には、キーワードについて次のように書かれています。
UML キーワードは、UML 表記の不可欠な部分である予約語であり、通常、UML グラフィック要素に添付されたテキスト注釈として、または UML 図のテキスト行の一部として表示されます。これらの単語は、ユーザー定義のモデル要素に名前を付けるために使用することはできません。そのような名前付けは、モデルの解釈があいまいになる可能性があります。たとえば、キーワード「trace」は、システム定義の抽象化のステレオタイプ (付録 C「標準ステレオタイプ」を参照) であるため、ユーザー定義のステレオタイプを定義するために使用することはできません。
UML では、キーワードは次の 4 つの目的で使用されます。
特定の UML 概念 (メタクラス) を、同じ一般的なグラフィック形式を共有する他の概念と区別するには...
UML 概念間の特定の種類の関係 (メタ関連) を、同じ一般的なグラフィック形式を共有する他の関係と区別するには...
UML 概念 (メタ属性値) に付加された何らかの修飾子の値を指定するには...
標準的なステレオタイプを示すには (付録 C「標準的なステレオタイプ」を参照)...
キーワードは常にギレメット (
«keyword»
) で囲まれます。これは、キーワードが使用されていることをより容易に区別するための視覚的な合図として機能します...キーワードを識別することに加えて、ギレメは、ユーザー プロファイルで定義されたステレオタイプの使用を区別するためにも使用されます。この意味は:
- guillemets の間に現れるすべての単語が必ずしもキーワード (すなわち、予約語) であるとは限りません。
- ギレメに出てくる言葉は、必ずしもステレオタイプを表しているわけではありません。
つまり、キーワードでない限り、任意のステレオタイプを作成できます。«abstract»
「抽象」はキーワードではないので、ステレオタイプを作成できるということになります。
ただし、これを行うには、UML 1.4 よりも UML 2.0 以降の方がより多くのトラブルに遭遇する必要があります。UML 1.4 では、ステレオタイプは UML 仕様の拡張メカニズムであると単純に述べていました。単純にステレオタイプを定義し、それを UML メタモデルの必要な部分に適用し、変更を文書化することができます。UML 2.0 では、ステレオタイプと UML メタクラスの関係を形式化する必要がありました (UML 図上のすべての項目はメタクラスであり、UML メタモデルの一部です)。そこで、彼らはプロファイルを思いつきました。このサンプル図は、プロファイルがどのように機能するかを示しています。
この黒い矢印は少し奇妙に見えるかもしれません。UML 2.0 では、「メタクラスのプロパティがステレオタイプによって拡張されることを示すために使用される」と定義されている拡張の概念が導入されました。この黒い矢印は拡張子を示します。
Tom Pender ( The UML Bible、Wiley Publishing、2004年) の説明を引用します。彼は仕様よりも優れた仕事をしているからです (もちろん、私はそれを改善することはできません)。
コンポーネントが必須の Bean ステレオタイプによって拡張されていることを示しています。Bean ステレオタイプは、Entity と Session の 2 つのサブタイプを持つ抽象型です。したがって、コンポーネントの各インスタンスは、エンティティ ステレオタイプまたはセッション ステレオタイプのいずれかのインスタンスによって拡張する必要があります。ステレオタイプは、プロパティを持つことができる一種のクラスであることを思い出してください。この場合、Session ステレオタイプには、state という名前の属性があります。これは、値がセッションの状態を指定するタグ付き定義に対応します。タグ付きの値は、ステートレスまたはステートフルのいずれかの値を持つ列挙体 StateKind です。
コンポーネントには制約があり、コンポーネント シンボルに添付された注記に表示されます。これは、コンポーネントを一般化または特殊化できないことを示しています。
この図は、Interface メタクラスが Remote および Home ステレオタイプによって拡張されていることも示しています。EJB パッケージには、パッケージ内のメモに表示されている制約があり、Bean は 1 つのホーム インターフェースを正確に認識しなければならないことが示されています。
したがって、«abstract»
わざわざステレオタイプを作成する理由がある場合は、実際にステレオタイプを使用できます。誰もが望む主な理由は、クラス図以外の場所で抽象クラスを表現することです。