2

通过谷歌,发现了许多略有不同的解决方案,尽管(对我来说)感觉应该更容易回答。这些是我现在担心的话,同时试图获得体面的 UML 技能:D ...

“公共、受保护、私有、包”

让我首先尝试为 Java 完成这个,因为我对它非常熟悉(请纠正我,如果我做了任何坏事!):

  1. 上市
    • 同一实例的成员可以看到/使用它
    • 同一类的另一个实例的成员可以看到/使用它
    • 同一 pkg 中派生类的成员可以看到/使用它
    • 另一个 pkg 中的派生类的成员可以看到/使用它
    • 同一 pkg 中另一个类的成员可以看到/使用它
    • 另一个 pkg 中的另一个类的成员可以看到/使用它
    • 其他任何东西都可以看到/使用这个
  2. 受保护
    • 同一实例的成员可以看到/使用它
    • 同一类的另一个实例的成员可以看到/使用它
    • 同一 pkg 中派生类的成员可以看到/使用它
    • 另一个 pkg 中的派生类的成员可以看到/使用它
    • 同一 pkg 中另一个类的成员无法看到/使用它
    • 另一个 pkg 中另一个类的成员无法看到/使用它
    • 其他任何东西看不到/使用这个
  3. 私人的
    • 同一实例的成员可以看到/使用它
    • 同一类的另一个实例的成员可以看到/使用它
    • 同一 pkg 中派生类的成员无法看到/使用它
    • 另一个 pkg 中的派生类成员无法看到/使用它
    • 同一 pkg 中另一个类的成员无法看到/使用它
    • 另一个 pkg 中另一个类的成员无法看到/使用它
    • 其他任何东西看不到/使用这个
  4. 包裹
    • 同一实例的成员可以看到/使用它
    • 同一类的另一个实例的成员可以看到/使用它
    • 同一 pkg 中派生类的成员可以看到/使用它
    • 另一个 pkg 中的派生类成员无法看到/使用它
    • 同一 pkg 中另一个类的成员可以看到/使用它
    • 另一个 pkg 中另一个类的成员无法看到/使用它
    • 其他任何东西看不到/使用这个

我现在的问题:

  1. 这与 UML 标准有何不同?
  2. 如果我在上面的列表中包含错误,我在哪里包含错误?我不是上帝,所以可能有一个;)

最好的问候,并提前感谢您的帮助!

4

1 回答 1

2

来自 UML 标准。能见度:

公共元素对所有可以访问拥有它的命名空间内容的元素都是可见的。

私有元素仅在拥有它的命名空间内可见。

受保护元素对与拥有它的命名空间有泛化关系的元素可见。

包元素由不是包的名称空间拥有,并且对于与其拥有的名称空间位于同一包中的元素可见。只有不属于包的命名元素才能标记为具有包可见性。任何标记为具有包可见性的元素对最近的封闭包中的所有元素都是可见的(假设其他拥有元素具有适当的可见性)。在最近的封闭包之外,标记为具有包可见性的元素不可见。

命名空间:

命名空间是可以拥有其他命名元素的命名元素。

我认为 UML 对私有、受保护等的定义与 Java 的定义非常相似。

于 2012-11-18T07:02:30.407 回答