web-dev-qa-db-ja.com

UMLクラス図の可視性表記

私はUMLクラス図と可視性の表記について読んでいますが、この本(Learning UML 2.0 by Russ Miles)にタイプミスがあるのか​​、それともそれ自体を説明していないのかわかりません。

次の2つの図を検討してください。

保護されたメンバー:

enter image description here

プライベートメンバー:

enter image description here

私はベテランのJava開発者です。.しかし、ここでの表記法に興味があります。aMethod()という事実に意味はありますか?可視性修飾子がありませんか?最初の図で、SpecializedClassInAnotherPackageBlogAccountからaMethod()にアクセスできるように見えるのはなぜですか。しかし、同じクラスは2番目の図ではアクセスできませんか?2つの違いは、showcasedプロパティが最初に保護され、2番目がprivateになっていることだけです。

これはタイプミスですか、それとも私は何かを理解していませんか?この本には、可視性修飾子がないことの意味を示すものはすぐにはわかりません。

1
Mirrana

この混乱には簡単な解決策があるようです。これらの図の矢印は、目的地に関して正確ではありません。あなたがそれを正確に見るとき、それらはすべて異なることを指しています。可視性修飾子を持つプロパティを指すもの、他の操作を指すもの、クラス自体を指すものがあります。ただし、作成者の意図は、これらのそれぞれが興味深い可視性修飾子を使用したフィールドへのアクセスに関することであるようです。

または要するに:#creationDateは派生クラスからアクセスできますが、-name ではありません。確かに、著者はこの混乱を避けるために、ここでさらに注意を払ったのかもしれません。

これの実際のセマンティクスに関する少しの拡張。 ML上部構造仕様 (141ページ)を見ると、さまざまな可視性の種類とそれらに指定されたセマンティクスが表示されます。 別の投稿 on SOは、SSSのどこを見れば、デフォルトの可視性(操作の前に何も書き込まれていない場合)がパブリックであることを確認できます。 (はい、SSSは読むのが難しい獣です。実際に読む前に、そのドキュメントの読み方を学ぶ必要があります)。

参考までに、UML SSSで定義されている具体的なセマンティクスを以下に示します。

  • パブリック要素は、それを所有する名前空間のコンテンツにアクセスできるすべての要素に表示されます。
  • プライベート要素は、それを所有する名前空間内にのみ表示されます。
  • 保護された要素は、それを所有する名前空間と汎化関係を持つ要素から見ることができます。
  • パッケージ要素は、パッケージではない名前空間によって所有されており、所有する名前空間と同じパッケージ内にある要素に表示されます。パッケージによって所有されていない名前付き要素のみが、パッケージの可視性を持つものとしてマークできます。パッケージの可視性を持つとマークされた要素は、最も近い外側のパッケージ内のすべての要素から可視です(他の所有要素が適切な可視性を持っている場合)。最も近い外側のパッケージの外側では、パッケージの可視性を持つとマークされた要素は表示されません。
3
Frank