UML 类图详解
转载来源:http://blog.csdn.net/shift_wwx/article/details/79205187
可以参考:http://www.uml.org.cn/oobject/201211231.asp
一、前言
在软件开发过程中会经常整理文档,不是所有的信息都可以通过文字来表达,而换成图之后会更加的直观、有效,其中频繁使用的就是UML图。结合自己实践总结一下,希望对大家都能有所帮助。
本文中的UML图都是用visio 绘制,source code展示是Java 语言。
二、UML简介
Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。
UML图包括两个范畴:结构图和行为图。
结构图的目的是显示建模系统的静态结构。它包括类、组件和对象。例如UML静态结构图。
行为图的目的是显示系统中对象的动态行为。它包括对象的方法、协作和活动之类的内容。例如UML示例图、UML活动图、UML序列图。
三、UML类图
通过UML类图可以将类之间的所有关系(泛化、实现、关联、聚合、组合、依赖)都能具体的体现出来。
1、类图的表示
类的 UML 表示是一个长方形,垂直地分为三个区,如下图所示。顶部区域显示类的名字。中间的区域列出类的属性。底部的区域列出类的操作。在一个类图上画一个类元素时,你必须要有顶端的区域,下面的二个区域是可选择的(当图描述仅仅用于显示分类器间关系的高层细节时,下面的两个区域是不必要的)。
顶端是类名,中间列出的是类的属性。底部列出的是类的操作。在绘制类图的时候,顶端部分是必须的,其他两个部分可选。
类名:如果是抽象类,采用斜体。
类属性列表:可见性 + 属性名 + 冒号 + 属性类型 + (等号 + 默认值)
属性的可见性下面会说明;属性的类型看属性而定,可以是int,可以是boolean;有的属性可能会有默认值,在类型之后加等号和默认值。
类方法列表:可见性 + 函数名 + (参数列表) + 冒号 + 返回值类型
可见性:
标志 | 可见性类型 |
+ | public |
- | private |
# | protected |
~ | package |
2、继承的表示
为了在一个类图上建模继承,从子类(要继承行为的类)拉出一条闭合的单键头(或三角形)的实线指向超类。
ViewGroup 和 方法onLayout 用的是斜体,说明ViewGroup 是抽象类,方法onLayout 是抽象的。
3、接口的表示
一个类和一个接口不同:一个类可以有它形态的真实实例,然而一个接口必须至少有一个类来实现它。在 UML 中,一个接口被认为是类建模元素的特殊化。因此,接口就象类那样绘制,但是长方形的顶部区域也有文本“interface”。
对于接口,如果用<< 和 >>将字符串interface包起来,表示这是个接口类。并且用虚线带三角形的箭头从实现类指向Interface 类。
4、关联的表示
(1)双向关联
在两个类之间用实线连接,表示两个类彼此都知道它们之间的联系。
在实线的上端写上关联关系,例如 has;在实线的下端写上可能的多重值,多重值表示如下:
表示 | 含义 |
0..1 | 0个或者1个 |
1 | 只能1个 |
0..* | 0个或者多个 |
* | 0个或者多个 |
1..* | 1个或者多个 |
3 | 只能3个 |
0..3 | 0至3个 |
3..13 | 3至13个 |
(2)单向关联
单向关联是用一个实线带一个开放的箭头,表示一端知道箭头指向的另一端。
上图中View 中包含Canvas 类,而Canvas 中不需要包含View。
5、聚合的表示
聚合是一种特别类型的关联,用于描述“总体到局部”的关系。在基本的聚合关系中,部分类的生命周期独立于整体类的生命周期。用一个带空心的菱形的实线表示,菱形指向的是整体的类。
例如,汽车和轮子的关系:
聚合与单向关联的区别在于:单项的关联可能只是一个简单的“包含、引用”关系,关联和被关联类之间在逻辑概念上不一定有紧密的联系,而聚合则不同,它表示的是一种内在关系紧密,相互依存,相互包含的概念,其中的一部分是构成另外一部分的不可或缺的成分。
6、组合的表示
组合聚合关系是聚合关系的另一种形式,但是子类实例的生命周期依赖于父类实例的生命周期。
用一个带实心的菱形的实线表示,菱形指向的是整体的类。
组合跟聚合有很大的不同,聚合的部分的生命周期独立于整体,整体结束那不影响部分。而组合是部分的生命周期依赖与整体,整体结束,部分没有必要存在。就想公司和部分,公司都不存在了,那部门就没有存在的必要了,解散了算。
同样用View 为例:
其中的DeclaredOnclickListener 类是View的一部分,而且是依赖View的生命周期。
7、依赖的表示
依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系,大多数情况下依赖关系体现在某个类的方法使用另一个类的对象作为参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
依赖关系通常通过三种方式来实现:
- 将一个类的对象作为另一个类中方法的参数
- 在一个类的方法中将另一个类的对象作为其对象的局部变量
- 在一个类的方法中调用另一个类的静态方法
关联关系、聚合、组合之间的区别:
关联关系跟突出的是has,只是has的关系,可以通过这一层关系调用到另一个对象中的某个方法。
聚合、组合更突出“整体-部分”的关系,不单单是“拥有”,部分类是构成整体类的一部分。
对于聚合、组合,区别就在于部分类的生命周期如何,如果部分类还可以独立存在,那属于聚合关系;如果部分类不能独立存在,那属于组合的关系。
UML 类图详解的更多相关文章
- UML类图详解_关联关系_一对多
对于一对多的示例,可以想象一个账户可以多次申购.在申购的时候没有固定上限,下限为0,那么就可以使用容器类(container class)来搞,最常见的就是vector了. 下面我们来看一个“一对多” ...
- UML类图详解_关联关系_多对一
首先先来明确一个概念,即多重性.什么是多重性呢?多重性是指两个对象之间的链接数目,表示法是“下限...上限”,最小数据为零(0),最大数目为没有设限(*),如果仅标示一个数目级上下限相同. 实际在UM ...
- UML类图详解
下面是类图的实例: (注:飞翔接口那里应为空心三角形) UML中类图实例 接口:空心圆+直线(唐老鸭类实现了‘讲人话’):依赖:虚线+箭头(动物和空气的关系):关联:实线+箭头(企鹅需要知道气候才迁移 ...
- UML类图详解_泛化关系
泛化其实就是继承关系,还是比较简单的,那么我们就把之前有些问题的博客UML类图重新来实现一次. 依旧是这个图 下面我们来看一个例子 Account.h #include <cstdlib> ...
- UML类图详解和示例
ps:博客园markdown不能自动生成列表,更好的阅读体验可访问我的个人博客http://www.isspark.com/archives/UMLDescription UML类图概述 什么是UML ...
- UML类图详解_组合关系
组合关系和聚合关系有一个最大的不同,组合关系中的整体直接掌握部件的生灭,聚合关系中的整体并不具有生灭部件的权力.一旦组合中的整体不存在时,其组合部件也不能单独存在,必须同时消灭.另外,外界也不能直接与 ...
- UML类图详解_关联关系_多对多
在关联关系中,很多情况下我们的多重性并不是多对一或者一对多的,而是多对多的. 不过因为我们要考虑里面的导航性,如果直接搞的话就是需要去维护两群对象之间多对多的互指链接,这就十分繁杂且易错.那么我们怎么 ...
- UML类图详解_聚合关系
结合UML关系,以看台和基金来介绍聚合关系 aggregation,是一种特殊的关联关系,既有关联关系的特质,还独有“整体 —— 部分(whole —— part)”的特质. 也就是说,用之前的关联关 ...
- UML简单介绍—类图详解
类图详解 阅读本文前请先阅读:UML简单介绍—类图这么看就懂了 1.泛化关系 一个动物类: /** * 动物类 */ public class Animal { public String name; ...
随机推荐
- 字符串(tjoi2016,heoi2016,bzoj4556)(sam(后缀自动机)+线段树合并+倍增+二分答案)
佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了 一个长为\(n\)的字符串\(s\),和\(m\)个问题.佳媛姐姐必须正确回答这\(m\)个问题, ...
- PHP 单点登录实现方案
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...
- java中无参,有参,默认构造方法的应用及举例
类的构造方法: (1)构造方法的名字和类名相同,并且没有返回值. (2)构造方法主要用于为类的对象定义初始化状态. (3)不能直接调用构造方法,必修通过new关键字来自动调用,从而创建类的实例. ne ...
- Windows下安装MySQL详细教程
Windows下安装MySQL详细教程 1.安装包下载 2.安装教程 (1)配置环境变量 (2)生成data文件 (3)安装MySQL (4)启动服务 (5)登录MySQL (6)查询用户密码 (7 ...
- POJ 1154
#include<iostream> #include<stdio.h> #define MAXN 20 using namespace std; int DFS(int i, ...
- 配置文件备份方案(expect+shell)
需求描述:备份所有线上服务器squid.httpd.mysql.nginx的配置文件 环境:在公司内网采用expect+shell脚本模式,进行批量备份.expect脚本通过ssh登录服务器,从本地c ...
- (转)使用 DB2 HADR 选择用于灾难恢复的 SUPERASYNC 模式
使用 DB2 HADR 选择用于灾难恢复的 SUPERASYNC 模式 Vishnu G 和 Hemant Singh2013 年 6 月 25 日发布 WeiboGoogle+用电子邮件发送本页面 ...
- 开源微信支付SDK
应该有一年多没在博客园上写文章了,毕竟是一个记录自己技术成长的平台,没能将写博客长期坚持下来,说起来也是挺惭愧的.对于自己的近况而言,确实平常加班也比较多,时间会比较压缩,所以到后来博客也基本停止了更 ...
- 现代cpu的合并写技术对程序的影响
对于现代cpu而言,性能瓶颈则是对于内存的访问.cpu的速度往往都比主存的高至少两个数量级.因此cpu都引入了L1_cache与L2_cache,更加高端的cpu还加入了L3_cache.很显然,这个 ...
- Vue路由router-link的使用
Vue路由router-link的使用 相关Html: <!DOCTYPE html> <html lang="en"> <head> < ...