在UML图中,何时应该抽象一个类?

时间:2011-02-05 12:46:25

标签: abstract-class uml

在UML图中,何时应该抽象一个类?就在我们想要阻止实例化的时候?

编辑:抽象类是否可以完全实现一个方法(当方法只依赖于该抽象类的属性时)?

7 个答案:

答案 0 :(得分:6)

如果一个类有一个或多个抽象的操作,那么它就是抽象的。

UML 中用斜体或{abstract}表示抽象。

下图(由Martin Fowler撰写的UML Distilled Third Edition第70页)显示了如何以及为何表示摘要: enter image description here

答案 1 :(得分:6)

防止实例化是一个实现问题,因此如果您考虑使用Java,C#等,这是一个很好的理由。

然而,在建模的层面上,如果有多个子类,你想要创建一个类抽象,并且它没有意义一个对象是超类型但是没有亚型。

因此,基本上你不会阻止类的实例化,因为子类的任何实例也是抽象超类的实例。在这种情况下你正在做的是阻止超级类单独的实例化,即使用其中一个子类型强制执行。

回答编辑:是的!

答案 2 :(得分:4)

抽象类a是基本的OOP概念,所以我认为你的问题不是特定于UML的 这是关于何时使用抽象类的问题:

Exact use of Abstract class

基本上,当几个类共享一组功能时,您应该使用抽象类,但该功能本身没有意义或不完整。只有抽象类可以包含抽象方法,这些方法供后代实现。

例如,您可能希望将基本FileLoggerEmailLogger功能提取到Logger类中,但由于它本身没有意义,因此您只需将其保留为抽象。

答案 3 :(得分:0)

当你有多个具有相同功能的类时,类应该是抽象的,但是这个类的每个方法都与超类(抽象类)不同。

e.G。一只动物。每个动物类都有方法isAlive()。这种方法对于所有动物都是相同的。 并且每只动物都有移动方法(目标)。但是每只动物都以不同的方式移动。你不能以一般的方式谈论动物的运动。有些动物飞行,有些动物游动,有些动物游动。

答案 4 :(得分:0)

当您尝试表达子类时,就像您要明确表示CatAnimal的一个特例。

例如,Animal可以对某些行为进行一些基本实现,例如Eat,可以覆盖子类。

答案 5 :(得分:0)

抽象类类似于常规类,除了它允许您在没有方法体的情况下定义方法头。

这允许派生类具有自己的实现,而基类没有自己的实现。

答案 6 :(得分:0)

一个抽象类意味着你可以维护一个方法或变量列表(默认情况下,在抽象类中是public static final)这会强制扩展这个抽象类的类来实现那些未在声明的抽象类中实现的方法。 class与接口有很高的相似性,但唯一的区别是接口是100%抽象类。)