EA&UML日拱一卒--类图::泛化(generalization)

网友投稿 958 2022-10-13

EA&UML日拱一卒--类图::泛化(generalization)

EA&UML日拱一卒--类图::泛化(generalization)

类和类之间,除了存在关联/聚合/组合这种协作关系以外,还有泛化关系,也就是C++中的继承关系。

定义

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

表示法

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

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

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

抽象类和具象类

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

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:考研小程序开发「心理学考研小程序」
下一篇:客服小程序开发「客服小程序源码」
相关文章

 发表评论

暂时没有评论,来抢沙发吧~