UML之关系详解
2016-06-04 21:14
330 查看
一、UML中的6大关系
关联、依赖、聚合、组合、泛化、实现关联:连接模型元素及链接实例,用一条实线来表示;依赖:表示一个元素以某种方式依赖于另一个元素,用一条虚线加箭头来表示;
聚合:表示整体与部分的关系,用一条实线加空心菱形来表示;
组成:表示整体与部分的有一关系,用一条实线加实心菱形来表示;
泛化(继承):表示一般与特殊的关系,用一条实线加空心箭头来表示;
实现:表示类与接口的关系,用一条虚线加空心箭头来表示;
注意:泛化关系和实现关系又统称为一般关系;总之:一般关系表现为继承或实现(is a);关联关系、聚合关系、合成(聚合)/组合关系表现为成员变量(has a),依赖关系表现为函数中的参数(use a);
二、类与类之间的关系
一般关系:泛化、实现特殊关系:由弱到强分别是 没关系 → 依赖 → 关联 → 聚合 → 组合UML中类之间的关系:依赖关系:类之间使用关系泛化关系:类之间一般/特殊关系
关联关系:对象之间结构关系
实现关系:类中规格说明和实现之间关系
三、关系详解
3.1 聚合与组合
首先说明一下不容易混淆的概念:聚合(Aggregation)一种特殊类型的关联。表示整体与部分关系的关联。
描述了“has a”的关系。
部分事物的对象可以属于多个聚合对象。部分事物的对象与聚合对象的生存期无关,删除了它的聚合对象,不一定就随即删除了代表部分事物的对象。
组合(Composite)聚合关系中的一种特殊情况,是更强形式的聚合,又称强聚合。
成员对象的生命周期取决于组合的生命周期。
组合不仅控制着成员对象的行为,而且控制着成员对象的创建和解构。
3.2 依赖
依赖(dependency):指一个模型元素的变化必影响到另一个模型元素的变化。 可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖; 表现在代码层面,为类B作为参数被类A在某个method方法中使用(使用依赖之参数传递)。在UML中表示:在类的关系中导致依赖性的原因:一个类向另一个类发送消息;
一个类是另一个类的数据成员;
一个类用另一个类作为它的某个操作的参数;
四种基本类型依赖:使用依赖(Usage):表示客户使用提供者提供的服务以实现它的行为。
抽象依赖(Abstraction):表示客户与提供者之间的关系,依赖于在不同抽象层次上的事物。
授权依赖(Permission):表达一个事物访问另一个事物的能力。
绑定依赖(Binding):较高级的依赖类型,用于绑定模板以创建新的模型元素。
使用依赖包括:使用《use》:声明使用一个模型元素需要用到已存在的另一个模型元素,以实现使用者的正确功能(最常用)。
调用《call》:声明一个类中的方法调用其它类的操作( 较少用)。
参数《parameter》:声明一个操作和他的参数之间的关系(较少用)。
发送《send》:声明信号发送者和信号接受者之间的关系。
实例化《instantiate》:声明用一个类的方法创建了另一个类的实例。
抽象依赖包括:跟踪《trace》:声明不同模型中的元素之间存在一些连接,通常这些模型是开发过程中不同阶段的模型。
精化《refine》:声明具有两个不同语义层次上的元素之间的映射,它们中的一个通常是另一个的未完善的形式
派生《derive》:声明一个实例可以从另一个实例导出,表示一个元素可以通过计算另一个元素来得到。
跟踪和精化依赖可以将不同模型或不同抽象层的元素连接起来。这些关系将同一个潜在事物的不同形式联系起来。授权依赖包括:访问《access》:允许一个包访问另一个包的内容
导入《import》:允许一个包访问另一个包的内容,并可以将目标包内容的名字加入到导入包的命名空间内
友元《friend》:允许一个元素访问另一个元素,不管被访问的元素是否具有可见性
绑定依赖包括:绑定《bind》:为模板参数指定值,以生成一个新的模型元素,可通过取代模板备份中的参数实现。
使用依赖和绑定依赖在同一语义层上将很强的语义包括进元素内。它们必须连接模型同一层的元素。
3.3 关联
关联(association):代表对象类的实例(对象)之间的一组链接。关联是一种结构关系,指一种对象和另一种对象有联系。给定关联的两个类,可以从其中的一个类的对象访问到另一个类的相关对象。应用于关联的修饰:名称、角色、多重性、聚合、组合、导航性。在UML中用直线连接关联的类。关联的多元性:
关联类:通过关联对象类可以进一步描述关联的属性、操作,及其它信息。关联对象类是一个关联也是一个类,关联类的图标用一条虚线连接到关联线上。(简而言之:关联类就是通过一个类将其他两个类关联起来。)
自反关联:一个对象类与本身的关联,一个类的两个实例集间的关联。
N元关联:意如其名
3.4 泛化
泛化(generalization):是类的一般描述和具体描述之间的关系。继承是实现泛化的一种机制。(在此不详细说明继承)继承分为单继承和多继承单继承:一个子类只从一个父类继承属性和方法。(层次结构)
多继承:一个子类可以从多个父类继承属性和方法。(网格结构)
继承有传递性。
继承中重要的概念:重载,覆盖(重写),多态单分类和多重分类 在最简单的形式中,一个对象仅属于一个类,许多面向对象的语言有这种限制。一个对象仅属于一个类并没有逻辑上的必要性,我们只要从多个角度同时观察一下真实 世界的对象就可以发现这一点。在 UML 更概括的形式中,一个对象可以有一个或多个类。对象看起来就好像它属于一个隐式类,而这个类是每个直接父类的子类 — 多重继承可以免去再声明一个新类,这可提高效率。静态与动态类元 在最简单的形式中,一个对象在被创建后不能改变它的类。我们再 次说明,这种限制并没有逻辑上的必要性,而是最初目地是使面向对象编程语言的实现更容易些。在更普遍的形式下,一个对象可以动态改变它的类,这么做会得到 或失去一些属性或关联。如果对象失去了它们,那么在它们中的信息也就失去了并且过后也不能被恢复,哪怕这个对象变回了原来的类。如果这个对象得到了属性或 关联,那么它们必须在改变时就初始化,就像初始化一个新对象一样。 当多重分类和动态分类一起使用时,一个对象就可以在它的生命期内得到或失去 类。动态类有时被称作角色或类型。一个常见的建模模式是每个对象有一个唯一的静态的固有类(即不能在对象的生命期内改变的类),加上零个或多个可以在对象 生命期内加入或移走的角色类。固有类描述了这个对象的基本特性,而角色类描述了暂时的特性。虽然许多程序设计语言不支持类声明中的多重动态分类,然而它仍 然是一个很有用的建模概念,并且可以被映射到关联上。
3.5 实现
实现(realization):规格说明和其实现之间的关系。UML中实现关系通常在两种情况下被使用:在接口与实现该接口的类之间;
在用例以及实现该用例的协作之间
四、关联关系与依赖关系的区别
方向性关联有双向与单向之分。
类A与类B双向关联可以是A与B相互可以作为对方的一个attribute(属性),单向的话,就指其中一个类作为另一个类中的 attribute(属性);
依赖就只有单向的。
不存在attribute(属性)的问题,例如类A依赖类B,表示在类A中有三种类B的使用方法:一是类B是全局的,二是类B在类A中实例化,三是类B作为参数被传递
关系类型
1.关联是一种结构关系,表现为一个对象能够获得另一个对象的实例引用并调用它的服务(即使用它)。
2.依赖是一种使用关系,表现为一个对象仅仅是调用了另一个对象的服务依赖是比关联弱的关系,体现在生成的代码中,以
java为例:若类A单向关联指向类B,则在类A中存在一个属性B b。若类A依赖类B,则不会有这个属性,类B的实例可能存在于某个方法调用的参数中,或某个方法的局部变量中。
/* 若类Person单向关联指向类Car ,则在类Person中存在一个属性Car car。 若类Person依赖类Car ,则不会有这个属性,类Car 的实例可能存在于某个方法调用的参数中,或某个方法的局部变量中。 */ //关联(Association Relationship)的代码为: Public class Person{ Car car=new Car(); } //依赖(Dependency Relationship)的代码为: Public class Person{ Public void buy(Car car){ } }目的性
关联的主要目的是要得知外部对象的属性和方法。
依赖的主要目的是将对象或类信息作为外部状态传进类中形成外蕴。
在java中关联关系是通过实例变量而实现的,同时关联可以是双向的,关联可以有一对多的关系。
依赖在java语言中体现为局部变量、方法参数,以及对静态的方法调用。依赖总是单向的。
五、实现关系与泛化关系的区别
相同点泛化和实现关系都可以将一般描述与具体描述联系起来。
不同点
泛化将同一语义层上的元素连接起来,并且通常在同一模型内。
实现关系则将不同语义层内的元素连接起来,通常建立在不同的模型内。
六、聚合关系与组合关系的区别
组合就是强聚合。通俗来讲:组合是缺一不可,聚合就没有这种强制要求了。参考资料:河北工程大学-教学课件uml 类图依赖与关联的区别
详解UML中的6大关系(关联、依赖、聚合、组合、泛化、实现)
类与类之间的关系图(Class Diagram,UML图)
UML中关联和依赖的区别收集大全
泛化在UML中的概念
UML类关系中关联和实现关系的区别
[跟我学UML] UML类图中的关联类
在我写过的博客中有两篇博客是对资源的整理,可能对大家都有帮助,大家有兴趣的话可以看看!!资源大放送 - 图书与视频教程!
常用软件 — 整理
博文编号:20160604211456
相关文章推荐
- TYVJ 1288 飘飘乎居士取能量块
- OpenCV用形态学方法进行图像线特征和角点的提取
- c++作业7
- 一致性哈希算法(consistent hashing)
- Lightoj 1002
- TYVJ 1288 飘飘乎居士取能量块
- 1078 最小生成树
- The Fast and the Furious
- Activiti工作流学习(三)Activiti工作流与spring集成
- sed简单使用(三)替换
- 修改anchorPoint后图层发生变化的解决方案
- 利用小鸟云虚拟机搭建web服务尝试
- Android 基础总结:( 十六)Android Thread
- 机器学习整理笔记——基于《机器学习实战》
- 团队项目-个人博客6.4
- 4000 Hibernate-分组查询、聚合函数
- 基于深度学习的目标检测研究进展
- 《机电传动控制》——直流电机调速仿真作业
- 个人最终总结(1)
- 《梦断代码》阅读笔记02