在 UML 中,如果 classes 作为基础 class,我们应该将它们声明为抽象的吗?

In UML should we declare classes as abstract if they serve as a base class?

我们正在开设 UML 课程。老师说:

Every class should be declared as abstract if it serves as base class for its derived classes.

在下图中假设我们要从class chien (Dog woof woof)导出class german shepherdclass labradorclass chien是否有义务成为摘要class

不一定。

这种说法不一定正确。更正确的说法是:

Every class should be declared as abstract if it cannot be instantiated without referring to a concrete derived class.

在您的示例中,DogAnimal 是抽象的是有道理的,因为您有更具体的 classes 可能会填写基础 [=21] 的详细信息=]没有。

但是,当然可以有一个 class,它是具体的并且可以实例化(因此不是抽象的),但仍然可以作为另一个 class 的基础。

如果它是一种概括并且不能单独存在,那么它应该是抽象的。 看看这个情况:

上图中的Relation是抽象的。它不能单独存在。 Customer 和 Employee 是扩展 Relation 的正常 类。但是实习生是雇员。 您可以创建一个员工,也可以创建一个也是员工的实习生。