UML基本关系
UML-Unified Model Language 统一建模语言,又称标准建模语言。是用来对软件密集系统进行可视化建模的一种语言。UML的定义包括UML语义和UML表示法两个元素。
UML是在开发阶段,说明,可视化,构建和书写一个面向对象软件密集系统的制品的开放方法。最佳的应用是工程实践,对大规模,复杂系统进行建模方面,特别是在软件
架构层次,已经被验证有效。统一建模语言(UML)是一种模型化语言。模型大多以图表的方式表现出来。一份典型的建模图表通常包含几个块或框,连接线和作为模型附
加信息之用的文本。这些虽简单却非常重要,在UML规则中相互联系和扩展。
UML的构造快包含3种:
(1) 事物(4种):结构事物,行为事物,分组事物,注释事物
(2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系(另有两特殊的关联关系:聚合与组合)
(3) 图(10种):用例图,类图,对象图,(包图,组件图)--- 构建图,部署图,状态图,活动图,序列图,协作图
事物是对模型中最具代表性的成分的抽象;关系把事物结合在一起;图是聚集了相关的事物。
几种关系所表现的强弱程度依次为:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
一、UML的关系
UML定义的关系主要有六种:依赖、类属、关联、实现、聚合和组合。这些类间关系的理解和使用是掌握和应用UML的关键,而也就是这几种关系,往往会让初学者迷惑。这里
给出这六种主要UML关系的说明和类图描述,一看之下,清晰明了;以下就分别介绍这几种关系
继承(泛化)
泛化(generalization)关系:是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类
与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性。
实现
实现(realization)关系:指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,
在设计时一般没有争议性;
依赖
依赖(dependency)关系:可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,
需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用
//在java?中.?依赖关系体现为:?局部变量,?方法中的参数,?和对静态方法的调用
关联
关联(association)关系: 表示类与类之间的联接, 它使一个类知道另一个类的属性和方法.
关联可以使用单箭头表示单向关联, 使用双箭头或不使用箭头表示双向关联, 不建议使用双向关联. 关联有两个端点, 在每个端点可以有一个基数,
表示这个关联的类可以有几个实例.
常见的基数及含义:
0..1:0 或1 个实例.
0..*: 对实例的数目没有限制.
1: 只能有一个实例.
1..*: 至少有一个实例.
他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也
不是临时性的,一般是长期性的,而且双方的关系一般是平等的,表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类
A引用了一个类型为被关联类B的全局变量;在java 语言中关联关系是使用实例变量实现的.
聚合
聚合(aggregation)关系: 关联关系的一种特例, 是强的关联关系. 聚合是整体和个体之间的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可
以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一
致的,只能从语义级别来区分;
聚合关系也是使用实例变量实现的. 从java 语法上是分不出关联和聚合的.
关联关系中两个类是处于相同的层次, 而聚合关系中两个类是处于不平等的层次, 一个表示整体, 一个表示部分.
组合
组合(合成)关系(composition): 也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间
的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;合成关系不能共享. 。表现在代码层面,和
关联关系是一致的,只能从语义级别来区分。
组合跟聚合几乎相同,唯一的区别就是“部分”不能脱离“整体”单独存在,就是说,“部分”的生命期不能比“整体”还要长。
二、事物
UML语言的事物,包含4类:
结构事物:语言的静态构成要素,有7种:类和对象、接口、主动类、用例、协作、构件、节点。
行为事物:语言的动态构成要素,表示事物的变化和状态。
分组事物:对模型中事物分组组织的要素,包。
注释事物:对模型中事物标注,注解和解释。
结构事物
结构事物定义了业务或软件系统中的某个物理元素,描述了事物的静态特征。结构事物常用名词表示。结构事物有7种,
它们是:类和对象、接口、主动类、用例、协作、构件、节点。
1.类和对象
类是对具有相同属性、相同操作、相同关系的一组对象的共同特征的抽象,类是对象的模板,对象是类的一个实例。
(1)类的表示
在UML中,类是用一个矩形表示的,它包含三个区域,最上面是类名、中间是类的属性、最下面是类的方法。
例如,描述People(类)用图形表示,如图1所示。
假设,People类包含的属性和行为如下:
类名:People, 在第一栏。
字段名:name、age,字段名(也称属性)放在第二栏。
方法名:speak()、breathe( ),方法在第三栏
(2).对象的表示
对象是用一个矩形表示,在矩形框中,不再写出属性名和方法名,只是在矩形框中用“对象名:类名”的格式表示一个对象。
例如,属于类People中的对象张连海的图形表示如图2所示。
2.接口
因为外界对类(或构件)的使用,是通过类(或构件)的方法来实现的,因此,我们把
为类或构件提供特定服务的一组操作的集合称为接口。接口向外界声明了它能提供
的服务。接口分为供给接口和需求接口两种,供给接口只能向其它类(或构件)提供
服务,需求接口表示类(或构件)使用其它类(或构件)提供的服务。
3.主动类
主动类是指该类创建的对象至少拥有一个进程或线程,通过进程或线程控制任务的执行。
主动类的表示与一般类相似,只是最外框是粗线描述而已。
如主动类”Radio”的表示如图4所示。
4.用例
在系统中,为完成某个任务而执行的一序列动作,以实现某种功能,我们把这些动作的集合称为用例实例。
用例是对一组用例实例共同特征的描述,用例与用例实例的关系,正如类与对象的关系。
用例是用一个实线椭圆来表示的,在椭圆中写入用例名称。如,用例“用户登录”表示如图5
5.协作
协作是指有意义的交互,即,一组对象为了完成某个任务,相互间进行的交互。
用例的实现:实现某个用例的一组对象之间的交互,即,把一个用例表示为多个对象间的交互(协作)。从本质上说,协作就是用例的实现。
用一个带2个分栏的虚线椭圆表示协作。如,用例“销售房产”,用协作“销售房产”表示时,其对应的表示法如图6所示。
6. 构件
构件也称组件:系统设计中,一个相对独立的软件部件,它把功能实现部分隐藏在内部,对外声明了一组接口(包括供给接口和需求接口)。因此,两个具有相同接口的构件可以相互替换。
构件是比“类”更大的软件部件,例如一个COM组件、一个DLL文件、一个执行文件等等。
构件通常采用带有2个小方框的矩形表示,如下图7所示。
7.节点
节点是指硬件系统中的物理部件,它通常具有存储空间或处理能力。如,PC机、打印机、服务器等都是节点。在UML中,用一个立方体表示一个节点。如,节点“server”的表示方法如图8所示。
二)、行为事物
行为事物是用来描述业务系统或软件系统中,事物之间的交互或事物的状态变化。行为事物描述了事物的动态特征。行为事物用动词表示。行为事物有2种:交互和状态机。
1.交互
交互(interaction)是为了完成某个任务的对象之间相互作用,这种作用是通过信息的发送和接受来完成的。
交互的表示法很简单,用一条有向直线来表示对象间的交互,并在有向直线上面标有消息名称。如图9所示。
2.状态机
状态机(statemachine)在对象生命周期内,在事件驱动下,对象从一种状态迁移到另一状态的状态序列,
这些状态序列构成了状态机,即,一个状态机由多个状态组成。
在UML模型中,将状态表示为一个圆角矩形,并在矩形内标识状态名称。 如,“等待”表示如图10所示。
三)、分组事物
对于一个中大型的软件系统而言,通常会包含大量的类、接口、交互,因此也就会存在大量的
结构事物、行为事物,为了能有效地对这些事物进行分类和管理,就需要对其进行分组。在UML
中,提供了“包(Package)”来实现这一目标。表示“包(Package)”的图形符号,与windows中
四)、注释事物
在模型中,用来对其它事物的解释部分(文本解释)称为注释。注释事物是用一个右上角折起来的矩形,解释的文字就写在矩形中。注释符号如图12所示。
UML基本关系的更多相关文章
- 【建模】UML类关系分析
一.UML类关系分析 1.关联(asociation) 一般是一方拥有另一方对象的指针.箭头的方向是访问方向. 2.聚合(Aggregation)和组合(Composition) 聚合和关联一般不做区 ...
- UML六种关系
UML六种关系 基础之上,并对其进行了扩展.在程序中是通过继承类实现的.比如狗是对动物的具体描述,在面向对象设计的时候一般把狗设计为动物的子类. 表示方法:空心三角形箭头的实线,子类指向父类 实现 概 ...
- 设计模式学习---UML常见关系的实现
一.UML基本构造 UML的基本构造含3种: (1) 事物(4种):结构事物,行为事物,分组事物,注释事物 (2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系 (3) 图(10种):用例图, ...
- UML——六大关系整理
UML——六大关系整理 1.定义 是一种面向对象的建模语言,它是运用统一的.标准化的标记和定义实现对软件系统进行面向对象的描述和建模(百度百科). 2.六种关系 这六种关系分别为,继承.实现.关联.聚 ...
- UML中关系的分类及其概念——总结备忘
UML中关系分类: 依赖:依赖是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义. 关联:关联是类与类之间的联接,它使一个类知道另一类的属性和方法. 聚合:聚合 ...
- UML中类关系表示与Java代码中的对应关系
UML中类关系表示与Java代码中的对应关系 1. 类的UML表示法 上图中,Employee 类有两个String类型的私有属性和一个返回值为String类型public 方法 getName(); ...
- 学习设计模式第三 - 基础使用UML表示关系
面向对象的思想中存在如下几种关系,一般为了方便交流都使用UML的类图来展现类之间的关系.所以了解类图中符号的含义对看懂类图,尤其是用类图展示的设计模式很有帮助.下面依次介绍这几种关系 类继承关系 继承 ...
- 我所理解的OOP——UML六种关系
最近由于经常给公司的小伙伴儿们讲一些OOP的基本东西,每次草纸都被我弄的很尴尬,画来画去自己都乱了,有时候也会尝试使用UML表示类之间的关系,但UML从毕业后就再也没接触过了,经常会被小伙伴儿们指出继 ...
- 软件开发与UML的关系
今天,我们上<统一建模语言UML>.课上老师给我们讲解了软件开发与UML之间的关系:UML常用于建立软件系统的模型,适用于系统开发的不同阶段.UML的应用贯穿于系统开发的不同阶段.1.需求 ...
随机推荐
- c/c++排坑(2) -- c语言中的符号重载
所谓的符号重载就是在不同的上下文环境里有不同的意义.甚至有些关键字也被重载而具有好几种意义,这也是C语言的作用域规则对程序员不那么清晰的主要原因. 本章内容摘自<c专家编程>P37. 大家 ...
- web前端习总结--JavaScript
JavaScript 什么是JavaScript JavaScript是嵌入HTML中在浏览器中的脚本语言,有与Java和C语言类似的语法 一种网页编程技术,用来向HTML页面添加交互行为 直接嵌入H ...
- Linux之内核管理及故障排错
一.Centos6启动流程: 加电自检PSOT 引导加载器BootLoader MBR(GRUB第一阶段)||(GRUB第1.5阶段)(GRUB第2阶段) 加载内核(vmlinuz.initramfs ...
- 【7】Django网页视图模板处理
天下难事必作於易.天下大事必作於细.是以圣人终不为大,故能成其大 --老子<道德经> 本节内容 HTML页面的渲染 使用页面模板 异常处理 超链接路径处理 路由命名空间 1. HTML页面 ...
- STM32定时器配置(TIM1-TIM8)高级定时器+普通定时器,定时计数模式下总结
文章结构: ——> 一.定时器基本介绍 ——> 二.普通定时器详细介绍TIM2-TIM5 ——> 三.定时器代码实例 一.定时器基本介绍 之前有用过野火的学习板上面讲解很详细,所以 ...
- 【codeforces 514C】Watto and Mechanism(字符串hash)
[题目链接]:http://codeforces.com/contest/514/problem/C [题意] 给你n个字符串; 然后给你m个询问;->m个字符串 对于每一个询问字符串 你需要在 ...
- [Cogs14] [网络流24题#1] 飞行员分配方案 [网络流,最大流,二分图匹配]
经典二分图匹配,可以用匈牙利算法,也可以用最大流 代码如下(Dinic): #include <iostream> #include <cstdio> #include < ...
- 积木大赛 2013年NOIP全国联赛提高组
题目描述 Description 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为 n 的大厦,大厦可以看成由 n 块宽度为1的积木组成,第i块积木的最终高度需要是hi.在搭建开 ...
- 【Unity3D】 KeyCode 键码
Key codes returned by Event.keyCode. These map directly to a physical key on the keyboard. KeyCode是由 ...
- 经典左右布局demo
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...