UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)。
/// <summary>
/// UML类图关系:关联
/// </summary>
#region 双向关联:双方都拥有对方的一个指针,当然也可以是引用或者是值。C1-C2
class C1
{
public C2 theC2 = new C2();
};
class C2
{
public C1 theC1 = new C1();
};
#endregion
#region 单向关联:C3有C4的指针,而C4对C3一无所知。C3->C4
class C3
{
public C4 theC4 = new C4();
};
class C4
{
};
#endregion
#region 自身关联(反身关联):自己引用自己,带着一个自己的引用。
class C14
{
public C14 theC14 = new C14();
};
#endregion
/// <summary>
/// UML类图关系:聚合/组合
/// 当类之间有整体-部分关系的时候,我们就可以使用组合或者聚合。
/// </summary>
//聚合:表示C9聚合C10,但是C10可以离开C9而独立存在
//(独立存在的意思是在某个应用的问题域中这个类的存在有意义)。
class C9
{
public C10 theC10 = new C10();
};
class C10
{
};
//组合(也有人称为包容):一般是实心菱形加实线箭头表示,
//表示的是C8被C7包容,而且C8不能离开C7而独立存在。
//但这是视问题域而定的,例如在关心汽车的领域里,
//轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。
//但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义的,这就可以用聚合了。
class C7
{
public C8 theC8 = new C8();
};
class C8
{
};
//可以看到,代码和聚合是一样的。具体如何区别,可能就只能用语义来区分了。
/// <summary>
/// UML类图关系:依赖
/// </summary>
//指C5可能要用到C6的一些方法,也可以这样说,
//要完成C5里的所有功能,一定要有C6的方法协助才行。
//在形式上一般是C5中的某个方法把C6的对象作为参数使用(假设C5依赖于C6)。
//注意,要避免双向依赖。一般来说,不应该存在双向依赖。
using namespaceOfC6
class C5
{
void Func(C6 c6)
{ }
};
/// <summary>
/// UML类图关系:泛化(继承)
/// </summary>
class C11
{
}
class C12 : C11
{
}
重复度
这里再说一下重复度,其实看完了上面的描述之后,我们应该清楚了各个关系间的关系以及具体对应到代码是怎么样的,所谓的重复度,也只不过是上面的扩展,例如A和B有着“1对多”的重复度,那在A中就有一个列表,保存着B对象的N个引用,就是这样而已。
依赖和聚合\组合、关联等有什么不同呢?
关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等就是一种关系。这种关系是非常明显的,在问题领域中通过分析直接就能得出。
依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系,就是“我在某个方法中偶然用到了它,但在现实中我和它并没多大关系”。例如我和锤子,我和锤子本来是没关系的,但在有一次要钉钉子的时候,我用到了它,这就是一种依赖,依赖锤子完成钉钉子这件事情。
组合是一种整体-部分的关系,在问题域中这种关系很明显,直接分析就可以得出的。例如轮胎是车的一部分,树叶是树的一部分,手脚是身体的一部分这种的关系,非常明显的整体-部分关系。
上述的几种关系(关联、聚合/组合、依赖)在代码中可能以指针、引用、值等的方式在另一个类中出现,不拘于形式,但在逻辑上他们就有以上的区别。
这里还要说明一下,所谓的这些关系只是在某个问题域才有效,离开了这个问题域,可能这些关系就不成立了,例如可能在某个问题域中,我是一个木匠,需要拿着锤子去干活,可能整个问题的描述就是我拿着锤子怎么钉桌子,钉椅子,钉柜子;既然整个问题就是描述这个,我和锤子就不仅是偶然的依赖关系了,我和锤子的关系变得非常的紧密,可能就上升为组合关系(让我突然想起武侠小说的剑不离身,剑亡人亡...)。这个例子可能有点荒谬,但也是为了说明一个道理,就是关系和类一样,它们都是在一个问题领域中才成立的,离开了这个问题域,他们可能就不复存在了。
相关推荐
C# WinForm-UML类图程序,绘制UML程序-2023(绘制uml类图,保存,打开文件等等)
UML中心是九种图,九种图的中心是UML类图,你对UML类图是否熟悉,这里就向大家介绍一下UML基础与应用--类图,相信本文的介绍一定会让你对UML类图有深刻的认识。
uml 类图实例 oom powerdesigner 绘制
NULL 博文链接:https://czjxdm.iteye.com/blog/947025
本文向大家简单介绍一下UML类图关系,UML定义的关系主要有六种:依赖、类属、关联、实现、聚合和组合。希望本文的介绍对你的学习有所帮助。
androidStrudio插件simpleUML,本来想通过androidstudio plugin 自动下载,发现找不到,最后只能从网上下载一个,然后离线安装,运行了效果确实不错,可以根据已有的代码生成UML,plantuml 这个跟eclipse配合安装了,...
JDK UML 类图大全 JDK UML 类图大全 JDK UML 类图大全
23种设计模式-UML-类图.docx
计算器 uml 类图 c++ 附源代码
UML类图关系大全,里面把之间的关系描述的较清楚,尤其是图像
UML类图符号 UML类图符号 UML类图符号 UML类图符号 UML类图符号 UML类图符号
清晰简单的UML标识说明,对UML建模初学者十分有用。
UML类图几种关系的总结
UML类图关系大全
java————23种设计模式-UML-类图及对应示例代码.doc
spring2.6框架源码全部uml类图,请用Enterprise Architect打开查看,是学习spring框架不可多得的资料
大家知道,UML类图之间的关系确实难以理解,而诸多教材中的解释又各不相同;我是查阅了了很多教程后,总结出的相对具有共性的解释了; 实例介绍了类图之间的关系及面向对象的相关概念 同时,介绍了EA下类图各关系的...
UML类图在关系数据库中的实现,uml的类图在数据库的实现方法,具体的应用案例。