UML的几种关系介绍请移步《UML中的关系》!
要真正画好UML图,透彻的理解各个关系的具体含义,需要明白各个关系对应的代码实现。
一、依赖 依赖是类的五种关系中耦合最小的一种关系。
依赖关系可以描述为:Uses a 在生成代码的时候,这两个关系类都不会增加属性。
[csharp]
view plain
copy
print
?
- PublicclassFilmClip{
- publicFilmClip(){}
- }
[csharp]
view plain
copy
print
?
- PublicclassChannel{
- publicChannel(){}
- }
依赖关系的表现形式
1
:
Channel
类是全局的,则
FilmClip
类可以调用它
例如:VB中的公共模块,任何使用这个模块的类都叫做依赖于这个模块
表现形式2:Channel类是FilmClip类的某个方法中的变量,则FilmClip类可以调用它。
表现形式3:Channel类是作为FilmClip类中某个方法的参数或者返回值
如:
[csharp]
view plain
copy
print
?
- PublicFilmClip{
- PublicChannelGrownup(Channelchannel){
- returnnull;
- }
- }
二、泛化 泛化关系可以描述为:Is a ,子类将继承父类的所有属性和方法
对应代码:
[csharp]
view plain
copy
print
?
- classShape{}
- publicclassCircle:Shape{}
- publicclassPolygon:Shape{}
三、关联
(1)双向关联
(2)单向关联
C3->C4:表示相识关系,指C3知道C4,C3可以调用C4的公共属性和方法。没有生命期的依赖。一般是表示为一种引用。
(3)自身关联
代码对应:
1、单向关联代码:
[csharp]
view plain
copy
print
?
- PublicclassWater{
- publicClimatem_Climate;
- publicWater(){}
- }
[csharp]
view plain
copy
print
?
- PublicclassClimate{
- publicClimate(){}
- }
可见生成的代码中,Water类的属性中增加了Climate类。
2、双相关联代码示例:
[csharp]
view plain
copy
print
?
- PublicclassWater{
- publicClimatem_Climate;
- publicWater(){}
- }
[csharp]
view plain
copy
print
?
- PublicclassClimate{
- publicWaterm_Water;
- publicClimate(){}
- }
可见生成的代码中,两个类的属性都添加了! 3、聚合
聚合:表示雁群类是由大雁类聚合而成。雁群类聚合大雁类,但是大雁可以离开雁群而独立存在
[csharp]
view plain
copy
print
?
- PublicclassGooseGroup{
- publicGoosegoose;
- PublicGooseGroup(Goosegoose){
- this.goose=goose;
- }
- }
4、组合
[csharp]
view plain
copy
print
?
- PublicclassGoose{
- publicWingswings;
- publicGoose(){
- wings=newWings();
- }
- }
聚合组合的区别: 1)构造函数不同: 聚合类的构造函数中包含了另一个类作为参数。 雁群类(GooseGroup)的构 造函数中要用到大雁(Goose)作为参数传递进来。大雁类(Goose)可以脱离雁群类而独立存在。 组合类的构造函数中包含了另一个类的实例化。 表明大雁类在实例化之前,一定要先实例化翅膀类(Wings),这两个类紧密的耦合在一起,同生共灭。翅膀类(Wings)是不可以脱离大雁类(Goose)而独立存在。 2)信息的封装性不同 在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的。 在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀 类被严密的封装在大雁类中。
四、实现
实现指的是一个class类实现interface接口(可以是多个)的功能。
实现是类与接口之间最常见的关系之一。
[csharp]
view plain
copy
print
?
- interfaceinterfaceA{}
- classclassA:interfaceA{}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|