UML
2016-04-18 10:50
176 查看
缺图,之后补
实现
类实现接口;是类和接口之间最常见的关系。C++中没有直接的接口而是通过在类中定义纯虚函数实现。UML中用带有空心三角箭头的虚线指向接口
泛化
表现为继承或实现关系(is a)。具体形式为类与类之间的继承关系,接口与接口之间的继承关系,类对接口的实现关系。UML中用带有空心三角箭头的实线指向基类
依赖
表现为函数中的参数(use a)。就是一个类用到了另一个类,而这种使用关系是具有偶然性、临时性的。如人要过河,要借用一条船,此时人与船就是依赖关系。
是类与类之间的连接,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类。
如A依赖于B,则B体现为局部变量、方法参数、静态方法的调用。
(1)类B以参数的形式传入类A的方法。
(2)类B以局部变量的形式存在于类A的方法中。
(3)类A调用类B的静态方法。
UML中使用带有箭头的虚线指向被依赖的类
关联
表现为变量(has a)。此关系比依赖更强,不存在偶然性、临时性,一般是长期的,且双方关系一般是平等的。关联有双向和单向关联。
双向关联:两个类都知道另一个类的公共属性和操作。
单向关联:只有一个类知道另一个类的公共属性和操作。
大多数的关良应该是单向的。单向关系更容易建立和维护,有助于寻找可服用的类。
表现在代码层,被关联的类以类属性的形式出现在关联类中,被关联类也可能以全局变量的形式出现在关联类中。
类与类之间的联接,它使一个类知道另一个类的属性和方法。如A依赖于B,则B体现为A的全局变量。
UML中使用一条实线连接相同或不同类
聚合
聚合是关联关系的一种,是弱的关联关系。聚合关系是整体和个体的关系。此时整体和部分是可分离的,他们可以具有不同的生命周期,部分也可以属于多个整体。普通关联关系的两个类处于同一层次上,而聚合关系的两个类处于不同的层次,一个是整体,一个是部分。同时,是一种弱的“拥有”关系。此时整体与部分之间是可分离的,他们可以具有各自的生命周期, 部分可以属于多个整体对象,也可以为多个整体对象共享;比如部门与员工的关系(一个部门有许多员工组成,一个员工可以有多个部门);
表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
UML图中实现使用一条带有虚心菱形的线来表示。
组合
组合是关联关系的一种,是比聚合关系强的关联关系。也称为强聚合。整体和部分是不可分的,具有相同的生命周期。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。整体生命结束,部分的生命也结束。Composition(组合关系)是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一致。他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;UML图中实现使用一条带有实心菱形的线来表示
几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖
聚合和组合的区别:
聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。我们用浅显的例子来说明聚合和组合的区别。聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象。聚合则不一样,被聚合的对象可以属于多个聚合对象。
关联和聚合的区别:
关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。总结
依赖:临时性的用了,人过河关联:对等的关系,是属性或全局变量
聚合:has a,弱包含关系,雁群和大雁,一个大雁可以属于多个雁群。
组合:contain a,强聚合关系,同生命周期,大雁和翅膀,大雁结束相应的翅膀也over
相关文章推荐
- 配置openstack 使用ceph(glance cinder nova)-kilo版本
- 开始我的博客之旅
- RecyclerView 详解 包含了 单选 多选 动画 嵌套scollview
- 让div高度跟随窗口高度自适应的方法
- 启动画面和ico等图像大小设置
- java开发环境搭建
- 【shell学习笔记】curl命令总结
- 二叉排序树
- 欢迎使用CSDN-markdown编辑器
- LeetCode 31. Next Permutation
- @ModelAttribute和@SessionAttributes的用法
- 汇编语言学习第三章-寄存器(内存访问)
- 机型判断,写在APPdelegate里面
- 数据结构实验之栈三:后缀式求值
- 【光影魔术手】裁剪图片中间部分,再把两头拼接。
- property中的copy属性
- 判断输入正整数的数字范围
- POI对EXCEL的操作【重点:如何设置CELL格式为文本格式】
- requireJS
- Android公共属性,常用组件