【发布时间】:2018-01-01 22:42:46
【问题描述】:
所以,我明白一个类可以有属性和方法。
1) 如果一个类有方法但没有属性,这可能吗? (这似乎不可能,在我看来它违背了创建类的目的)
2) 如果一个类有属性但没有方法,这可能吗? (这似乎是可能的)
非常感谢!
【问题讨论】:
-
是的,是的......
标签: uml software-design class-diagram
所以,我明白一个类可以有属性和方法。
1) 如果一个类有方法但没有属性,这可能吗? (这似乎不可能,在我看来它违背了创建类的目的)
2) 如果一个类有属性但没有方法,这可能吗? (这似乎是可能的)
非常感谢!
【问题讨论】:
标签: uml software-design class-diagram
1) 是的,您有时可以在实用程序类中看到它
class MyUtils {
public int add(int a, int b) {
return a + b;
}
}
它有多大用处完全是另一个问题,但是建模没有问题。
另一种情况是接口(有时表示为抽象类),其中不允许有属性(或更一般地说是状态),只有方法或方法原型/标头。
2) 是的,这在贫血模型中很常见,其中某些类仅充当数据持有者;由于在图表中显示访问器方法不是一个好习惯,因此您可能只能看到属性,而看不到方法;或者如果属性是公共的,并且不需要访问器,例如 C++ 结构。
同样,在设计模型中您很少看到任何方法,因为您关注的是类之间的关系,而不是它们的实现行为。
【讨论】:
没有属性的类(有方法)和没有操作的类(有属性)都是可能的和合法的,但很少见。 类封闭意味着您不应该直接访问类属性。然而,您可能有一个类用于存储数据(仅限属性),而另一个类用于管理该数据(仅限操作)。 另请注意,即使它们存在于类中,您的模型也可能不会显示属性或操作(甚至两者)。
【讨论】:
具有方法但没有字段的类通常用作实用程序类。例如,您有几个函数可以对文本文件进行一些编辑。创建一个只有编辑方法的类 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。
【讨论】: