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

时间:2016-09-26 11:25:33

标签: class object polymorphism uml abstract

我们正在学习UML课程。老师说:

  

如果每个类都作为基类使用,则应将其声明为抽象类   它的派生类。

在下图中假设我们想要从class german shepherd派生class labradorclass chien (Dog woof woof)class chien是否有义务成为抽象类

enter image description here

2 个答案:

答案 0 :(得分:5)

不一定。

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

  

如果在没有引用具体派生类的情况下无法实例化每个类,则应将其声明为抽象类。

在您的示例中,DogAnimal是抽象的是有意义的,因为您有更多特定的类可能会填写基类没有的详细信息。

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

答案 1 :(得分:1)

如果它是一种概括并且不能存在于其自身,那么它应该是抽象的。 看看这种情况: enter image description here

在上图中,Relation是抽象的。它不可能由它自己存在。 Customer和Employee是扩展Relation的普通类。但是培训生是一名员工。 您可以创建一个Employee,也可以创建一个Employee,也可以创建一个Employee。