【问题标题】:Does a class diagram always need attributes?类图总是需要属性吗?
【发布时间】:2018-01-01 22:42:46
【问题描述】:

所以,我明白一个类可以有属性和方法。

1) 如果一个类有方法但没有属性,这可能吗? (这似乎不可能,在我看来它违背了创建类的目的)

2) 如果一个类有属性但没有方法,这可能吗? (这似乎是可能的)

非常感谢!

【问题讨论】:

  • 是的,是的......

标签: uml software-design class-diagram


【解决方案1】:

1) 是的,您有时可以在实用程序类中看到它

class MyUtils {
  public int add(int a, int b) {
    return a + b;
  }
}

它有多大用处完全是另一个问题,但是建模没有问题。

另一种情况是接口(有时表示为抽象类),其中不允许有属性(或更一般地说是状态),只有方法或方法原型/标头。

2) 是的,这在贫血模型中很常见,其中某些类仅充当数据持有者;由于在图表中显示访问器方法不是一个好习惯,因此您可能只能看到属性,而看不到方法;或者如果属性是公共的,并且不需要访问器,例如 C++ 结构。

同样,在设计模型中您很少看到任何方法,因为您关注的是类之间的关系,而不是它们的实现行为。

【讨论】:

  • 在抽象类中允许使用属性。在接口中 - 不,但问题不在他们身上。而且他们大多没有方法,只有标题。
  • @Gangnus UML 接口可以有属性(虽然不一定是有状态的)。没有接口的语言的实现模型可以将它们表示为没有属性的类。
  • 他应该以什么语言使用带有属性的接口? SO毕竟是用于编程的。 ...并且抽象类仍然可以具有属性。当然是静态的。
  • 在 UML 中;程序员如何选择实现这样的接口是一个不相关的问题。无论如何,我已将问题改写为不那么令人困惑。
【解决方案2】:

没有属性的类(有方法)和没有操作的类(有属性)都是可能的和合法的,但很少见。 类封闭意味着您不应该直接访问类属性。然而,您可能有一个类用于存储数据(仅限属性),而另一个类用于管理该数据(仅限操作)。 另请注意,即使它们存在于类中,您的模型也可能不会显示属性或操作(甚至两者)。

【讨论】:

    【解决方案3】:

    具有方法但没有字段的类通常用作实用程序类。例如,您有几个函数可以对文本文件进行一些编辑。创建一个只有编辑方法的类 EditationsUtilities。有些人认为这种做法是邪恶的,但它被广泛使用。 Utility classes are evil? Utility classes are evil?

    有字段但没有方法的类——它们被称为结构。仍然是 - 在 C 中。例如,您有一个 Point 类,它只有两个字段:x 和 y。现在这样的类被认为是不好的风格,但仍然被广泛使用。他们说最好将 x 和 y 声明为私有并为它们创建 getter 和 setter 方法。有趣的是,有些人认为 getter/setter 是邪恶的。 http://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html

    在某些语言中,字段、属性和属性之间存在差异,有些语言必须具有 getter/setter。在这些情况下,类不能有没有方法的属性,因为属性(不是字段!)必须有 getter 和/或 setter。

    在UML(类图)中,当您开始考虑类时,您可以绘制一个只有空类矩形的图。所以,显然他们不会有字段或方法。但这只是暂时的。在代码中,你不会有没有字段和方法的类。

    所以,请在方便的时候使用它。您还没有感觉,哪种组织方式更适合您的 SW。

    【讨论】:

      猜你喜欢
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 2013-10-15
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多