OMT类图和UML类图的基础符号

“类图”在软件开发类文档中有很大的作用,可以清晰简洁地表示出所研究的类之间的关系。我在读《设计模式:可复用面向对象软件的基础》中也碰到了大量的类图,我想有必要总结一下类图中各种符号的含义,以便能更通畅阅读。不过在这本书中,类图的符号是OMT(Object Modeling Technique)符号,而目前能查到类图的讨论最多的格式是UML(Unified Modeling Language),而且后者还有相当多的作图工具。我想对两个格式的类图都学习一下。

需要说明的是,OMTUML类图的符号有很多,这篇只是讨论了诸如“继承”、“聚合”这种基础的内容。

OMT

OMT的学习中我主要参考了《设计模式:可复用面向对象软件的基础》的附录(书中有给出具体的规范是[RBP+91,Rum94],但我不知道怎么才能查到具体的说明文档)。

1.类

一个线框表示一个类,顶部是类名,其次是操作名,再下是变量:
OMT类图和UML类图的基础符号_第1张图片
例如,上面的类名叫ConcreteClassName,它有两个操作。分别是Operation1和返回类型为TypeOperation2。它有两个变量。分别是instanceVariable1和类型为TypeinstanceVariable2

2.继承关系

类继承表示为一个从子类到父类的三角形连线:
OMT类图和UML类图的基础符号_第2张图片
例如,上面表示LineShape这个类是Shape这个类的子类。

3.聚集与相识(或者说组合与聚合)

关于这一点,我发现书中的翻译:聚集相识其实和主流的翻译有区别。网上能查阅到的更多的名字是组合聚合
事实上,书中的聚集和主流翻译组合是一个意思,他们都代表一个类中有另一个类的成员变量,在OMT中有根部有菱形的箭头表示:
在这里插入图片描述
例如上图就表示Drawing类有Shape类型的成员变量,C++代码中会是:

class Drawing
{
	Shape ShapeVar;
}

而书中的相识和主流翻译聚合是一个意思。这点我觉得“相识”的翻译更能让人领会意思,就是说一个类只是“知道”另一个类,但是对于他的生命周期完全不关心。与此相对的是组合关系,被组合的类一定会和组合它的“主人”同生共死。在OMT中,根部没有菱形的箭头表示相识关系:
在这里插入图片描述
例如上图就表示LineShape类相识一个Color类型的变量,C++代码中会是:

class LineShape
{
	Color* ColorVar;
}
4.多个

OMT还定义了一种实心圆点,表示“多于一个”:
在这里插入图片描述
例如上图表示Drawing类有多个Shape类型的成员变量

5.创建

还有一种需要表示的关系是“一个类创建了哪个类的对象”,但书中说OMT并不支持这种表示,因此书中自己用虚线表示了这种关系:
在这里插入图片描述
如图表示CreationTool创建了LineShape类型的对象

5.伪代码注解

OMT类图和UML类图的基础符号_第3张图片

UML

UML的学习中,我查了很多网上的资料,然后用StartUML这个软件画了类图作为测试。

1.类

这点和与OMT的差别不大,区别可能只是UML将变量放在了操作的上面:
在这里插入图片描述
如图类名是Class1,他有Attribute1成员变量和Operation1操作。

2.继承关系

这点和OMT一样
OMT类图和UML类图的基础符号_第4张图片
如图表示Class2Class1的子类。

3.组合与聚合

组合用实心菱形的箭头:
在这里插入图片描述
而聚合用空心菱形:
在这里插入图片描述

4.多个

UML中,直接在箭头附近直接用数字来表示个数:
在这里插入图片描述
如图表示Class1聚合了3Class2

有一个网页中讨论了OMTUML中表示个数的区别:
OMT类图和UML类图的基础符号_第5张图片

5.依赖

“依赖”这个概念是OMT所没有的,可能之前讨论的“创建关系”也算是一种“依赖关系”吧。
UML中的依赖关系用虚线表示:
在这里插入图片描述
如图表示Class8依赖Class7

你可能感兴趣的:(OMT类图和UML类图的基础符号)