欢迎来到天天文库
浏览记录
ID:14811610
大小:177.50 KB
页数:5页
时间:2018-07-30
《uml的类图关系(c#实例)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、UML的类图关系(c#实例) UML的类图关系分为:关联、聚合/组合、依赖、泛化(继承)。 /// ///UML类图关系:关联 /// #region双向关联:双方都拥有对方的一个指针,当然也可以是引用或者是值。C1-C2 classC1 { publicC2theC2=newC2(); }; classC2 { publicC1theC1=newC1(); }; #endregion #re
2、gion单向关联:C3有C4的指针,而C4对C3一无所知。C3->C4 classC3 { publicC4theC4=newC4(); }; classC4 { }; #endregion #region自身关联(反身关联):自己引用自己,带着一个自己的引用。 classC14 { publicC14theC14=newC14(); }; #endregion /// ///UML类图关系:聚合/组合
3、 ///当类之间有整体-部分关系的时候,我们就可以使用组合或者聚合。 /// //聚合:表示C9聚合C10,但是C10可以离开C9而独立存在 //(独立存在的意思是在某个应用的问题域中这个类的存在有意义)。 classC9 { publicC10theC10=newC10(); }; classC10 { }; //组合(也有人称为包容):一般是实心菱形加实线箭头表示, //表示的是C8被C7包容,而且C8不能离开C7而独立存在。
4、 //但这是视问题域而定的,例如在关心汽车的领域里, //轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。 //但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义的,这就可以用聚合了。 classC7 { publicC8theC8=newC8(); }; classC8 { }; //可以看到,代码和聚合是一样的。具体如何区别,可能就只能用语义来区分了。 /// ///UML类图关系:依赖 ///5、mmary> //指C5可能要用到C6的一些方法,也可以这样说, //要完成C5里的所有功能,一定要有C6的方法协助才行。 //在形式上一般是C5中的某个方法把C6的对象作为参数使用(假设C5依赖于C6)。 //注意,要避免双向依赖。一般来说,不应该存在双向依赖。 usingnamespaceOfC6 classC5 { voidFunc(C6c6) {} }; /// ///UML类图关系:泛化(继承) ///6、mmary> classC11 { } classC12:C11 { } 重复度这里再说一下重复度,其实看完了上面的描述之后,我们应该清楚了各个关系间的关系以及具体对应到代码是怎么样的,所谓的重复度,也只不过是上面的扩展,例如A和B有着“1对多”的重复度,那在A中就有一个列表,保存着B对象的N个引用,就是这样而已。 依赖和聚合组合、关联等有什么不同呢? 关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等就是一种关系。这种关系是非常明显的,在问题领7、域中通过分析直接就能得出。 依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系,就是“我在某个方法中偶然用到了它,但在现实中我和它并没多大关系”。例如我和锤子,我和锤子本来是没关系的,但在有一次要钉钉子的时候,我用到了它,这就是一种依赖,依赖锤子完成钉钉子这件事情。 组合是一种整体-部分的关系,在问题域中这种关系很明显,直接分析就可以得出的。例如轮胎是车的一部分,树叶是树的8、一部分,手脚是身体的一部分这种的关系,非常明显的整体-部分关系。 上述的几种关系(关联、聚合/组合、依赖)在代码中可能以指针、引用、值等的方式在另一个类中出现,不拘于形式,但在逻辑上他们就有以上的区别。 这里还要说明一下,所谓的这些关系只是在某个问题域才有效,离开了这个问题域,可能这些关系就不成立了,例如可能在某个问题域中,我是一个木匠,需要拿着锤子去干活,可能
5、mmary> //指C5可能要用到C6的一些方法,也可以这样说, //要完成C5里的所有功能,一定要有C6的方法协助才行。 //在形式上一般是C5中的某个方法把C6的对象作为参数使用(假设C5依赖于C6)。 //注意,要避免双向依赖。一般来说,不应该存在双向依赖。 usingnamespaceOfC6 classC5 { voidFunc(C6c6) {} }; /// ///UML类图关系:泛化(继承) ///6、mmary> classC11 { } classC12:C11 { } 重复度这里再说一下重复度,其实看完了上面的描述之后,我们应该清楚了各个关系间的关系以及具体对应到代码是怎么样的,所谓的重复度,也只不过是上面的扩展,例如A和B有着“1对多”的重复度,那在A中就有一个列表,保存着B对象的N个引用,就是这样而已。 依赖和聚合组合、关联等有什么不同呢? 关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等就是一种关系。这种关系是非常明显的,在问题领7、域中通过分析直接就能得出。 依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系,就是“我在某个方法中偶然用到了它,但在现实中我和它并没多大关系”。例如我和锤子,我和锤子本来是没关系的,但在有一次要钉钉子的时候,我用到了它,这就是一种依赖,依赖锤子完成钉钉子这件事情。 组合是一种整体-部分的关系,在问题域中这种关系很明显,直接分析就可以得出的。例如轮胎是车的一部分,树叶是树的8、一部分,手脚是身体的一部分这种的关系,非常明显的整体-部分关系。 上述的几种关系(关联、聚合/组合、依赖)在代码中可能以指针、引用、值等的方式在另一个类中出现,不拘于形式,但在逻辑上他们就有以上的区别。 这里还要说明一下,所谓的这些关系只是在某个问题域才有效,离开了这个问题域,可能这些关系就不成立了,例如可能在某个问题域中,我是一个木匠,需要拿着锤子去干活,可能
6、mmary> classC11 { } classC12:C11 { } 重复度这里再说一下重复度,其实看完了上面的描述之后,我们应该清楚了各个关系间的关系以及具体对应到代码是怎么样的,所谓的重复度,也只不过是上面的扩展,例如A和B有着“1对多”的重复度,那在A中就有一个列表,保存着B对象的N个引用,就是这样而已。 依赖和聚合组合、关联等有什么不同呢? 关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等就是一种关系。这种关系是非常明显的,在问题领
7、域中通过分析直接就能得出。 依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系,就是“我在某个方法中偶然用到了它,但在现实中我和它并没多大关系”。例如我和锤子,我和锤子本来是没关系的,但在有一次要钉钉子的时候,我用到了它,这就是一种依赖,依赖锤子完成钉钉子这件事情。 组合是一种整体-部分的关系,在问题域中这种关系很明显,直接分析就可以得出的。例如轮胎是车的一部分,树叶是树的
8、一部分,手脚是身体的一部分这种的关系,非常明显的整体-部分关系。 上述的几种关系(关联、聚合/组合、依赖)在代码中可能以指针、引用、值等的方式在另一个类中出现,不拘于形式,但在逻辑上他们就有以上的区别。 这里还要说明一下,所谓的这些关系只是在某个问题域才有效,离开了这个问题域,可能这些关系就不成立了,例如可能在某个问题域中,我是一个木匠,需要拿着锤子去干活,可能
此文档下载收益归作者所有