这篇文章主要为大家展示了“EA画UML图中什么是泛化”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“EA画UML图中什么是泛化”这篇文章吧。

定义

泛化是指一个较特殊的类到一个较普通的类之间的关系。较特殊的类也叫子类(subclass);较普通的类也叫超类(superclass)。子类继承了超类的所有特性(属性和操作),任何使用超类的地方,都可以用子类代替。

表示法


泛化表示为从子类到超类的实线,超类端带有空心三角形。

EA画UML图中什么是泛化-冯金伟博客园

在本例中,File类的功能已经很完整,可以独立使用,但是我们需要支持文本文件和Utf文件的行读写功能,于是增加了两个子类TextFile和Utf8File,它们一方面完整继承了File的所有特性,一方面又为用户提供了利用者需要的读写文本文件和Utf8文件的便利功能。

这种泛化关系虽然可以满足利用者的需求,但是没有人会在使用File的地方替换使用TextFile或者Utf8File,而是把它们作为另外的类来使用。还有一点:很难找到漂亮的方法避免用户使用File类的Write/Read方法带来的混乱。可以说这种泛化是没有经过认真设计的泛化,或者说是被动的泛化。

抽象类和具象类

还有另外一种情况,在设计时就考虑好超类,子类的分工,共同的部分由超类实现,特殊的部分由子类实现。

EA画UML图中什么是泛化-冯金伟博客园

在上图中,图形尺寸,位置的处理由Shpe类负责;表示的部分则在Shape定义Show操作,具体的Show方法由各个子类实现。因为Shape类没有实现所有的功能,所以不应该被实例化。关于这一点,UML提供了方法,就是将Shape定义为抽象类。在EA中表示为斜体的类名。设定方法是在类属性的【detail】页中,选中Abstract选项。具体如下图:

EA画UML图中什么是泛化-冯金伟博客园

在这种场景下,我们称Shape为抽象类(abstract class),各子类为具象类(concrete class)。