设计模式——统一建模语言UML
目录
在一个现代化的工程中,人们要相互沟通和合作,就必须使 用标准的工业化设计语言对待开发的产品进行建模
建模过程把复杂的问题分解成为易于理解的小问题,以达到问题的求解;其目的是把所要设计的结构和系统的行为联系起来,并对系统的结构进行可视化控制
一、UML的结构
1.1视图
- 用户视图:以用户的观点表示系统的目标,是所有视图的核心,该视图描述系统的需求
- 结构视图:表示系统的静态行为,描述系统的静态元素,如包、类与对象,以及它们之间的关系
- 行为视图:表示系统的动态行为,描述系统的组成元素,如对象在系统运行时的 交互关系
- 实现视图:表示系统中逻辑元素的分布,描述系统中物理文件以及它们之间的关系
- 环境视图:表示系统中物理元素的分布,描述系统中硬件设备以及它们之间的关系
1.2图
- 用例图:对应用户视图。用例图通过用例来表示系统的功能需求。用例图用于表示多个外部执行者与系统用例之间以及用例与用例之间的关系。用例图与用例说明文档是常用的需求建模工具
- 类图:对应结构视图。类图使用类描述系统的静态结构。类图包含类和它们之间的关系,它描述系统内所声明的类,但它没有描述系统运行时类的行为
- 对象图:对应结构视图。对象图是类图在某一时刻的一个实例,用于表示类的对象之间的关系
- 状态图:对应行为视图。状态图描述一个特定对象的所有可能状态及其引起状态转移的事件。一个状态图包括一系列对象的状态及状态之间的转换
- 活动图:对应行为视图。活动图表示系统中各种活动的次序,其应用非常广泛,既可用来描述用例的工作流程,也可以用来描述类中某个方法的操作行为
- 序列图:又称时序图,对应行为视图。顺序图表示对象之间的交互,重点表示对象之间发送消息的时间顺序
- 协作图:对应行为视图。协作图展示了一组对象、这些对象间的连接以及它们之间收发的消息。它与序列图是同构图,包含了相同的信息,只是表达方式不同而已,协作图与序列图可以相互转换
- 构件图:对应实现视图。构件图描述每个功能所在的组件位置以及它 们之间的关系
- 部署图:对应于环境视图。部署图描述软件中各个组件驻留的硬件位置以及这些硬件之间的交互关系
1.3模型元素
在 UML中,模型元素包括事物以及事物与事物之间的联系
事物是 UML的重要组成部分,它代表任何可以定义的东西。事物之间的关系把事物联系在一起,组成有意义的结构模型。每一个模型元素都有一个与之相对应的图形元素
二、类图
2.1类与类图
类封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称
在系统中,每个类具有一定的职责,即类要完成什么样的功能。一个类可以有多种职责,设计得好的类一般只有 一种职责
定义类的时候,将类的职责分解成为类的属性和操作(即方法)。类的属性即类的数据职责,类的操作即类的行为职责
UML类图中,类一般由三部分组成
- 类名:每个类都必须有一个名字,类名是一个字符串
- 属性:指类的性质,即类的成员变量。类可以有任意多个属性,也可以没有属性。
可见性 名称:类型 [= 默认值]
- 操作:操作是类的任意一个实例对象都可以使用 的行为,操作是类的成员方法
2.2类之间的关系
(1)关联关系
关联关系是类与类之间最常用的一种关系,用于表示一类对象与另一类对象之间的联系
在 UML类图中,用实线连接有关联的对象所对应的类
在使用类图表示关联关系时可以在关联线上标注角色名
public class LoginForm {
private JButton loginButton;
……
}
public class JButton {
……
}
双向关联:默认情况下,关联是双向的
public class Customer { private Product[] products; …… } public class Product { private Customer customer; …… }
单向关联:用带箭头的实线表示
public class Customer { private Address address; …… } public class Address { …… }
自关联:一些类的属性对象类型为该类本身
public class Node { private Node subNode; …… }
重数性关联:表示 一个类的对象与另一个类的对象连接的个数
public class Form { private Button buttons[]; …… } public class Button { … }
表示方式 | 多重性说明 |
---|---|
1..1 |
表示另一个类的一个对象只与一个该类对象有关系 |
0..* |
表示另一个类的一个对象与零个或多个该类对象有关系 |
1..* |
表示另一个类的一个对象与一个或多个该类对象有关系 |
0..1 |
表示另一个类的一个对象没有或只与一个该类对象有关系 |
m..n |
表示另一个类的一个对象与最少m、最多n个该类对象有关系 (m<=n) |
(2)聚合关系
聚合关系表示整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构,从而找出一些成员类,该整体类和成员类之间就形成了聚合关系
在聚合关系中,成员类是整体类的一部分,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立 存在
UML中,聚合关系用带空心菱形的直线表示
public class Car {
private Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
……
}
public class Engine {
……
}
(3)组合关系
组合关系也表示类之间整体和部分的关系, 但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在
在组合关系中,成员类是整体类的一部分,而且整体类可以控制成员类的生命周期,即成员类的存在依赖于整体类
UML中,组合关系用带实心菱形的直线表示
public class Head {
private Mouth mouth;
public Head() {
mouth = new Mouth();
}
……
}
public class Mouth {
……
}
(4)依赖关系
依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系
大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数
UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方
public class Driver {
public void drive(Car car) {
car.move();
}
……
}
public class Car {
public void move() {
……
}
……
}
(5)泛化关系
泛化关系即继承关系
泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派 生类
UML中,泛化关系用带空心三角形的直线表示
public class Person {
protected String name;
protected int age;
public void move() {
……
}
public void say() {
……
}
}
public class Student extends Person {
private String studentNo;
public void study() {
……
}
}
(6)接口与实现关系
接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现关系,在这种关系中,类实现了接口,类中的操作实现了接口中所声明的操作
UML 中,类与接口之间的实现关系用带空心三角形的虚线来表示
public interface Vehicle {
public void move();
}
public class Ship implements Vehicle {
public void move() {
……
}
}
public class Car implements Vehicle {
public void move() {
……
}
}
举例
某基于Java语言的C/S软件需要提供注册功能,该功能简要描述如下:
用户通过注册界面(RegisterForm)输入个人信息,用户点击“注册”按钮后将输入的信息通过一个封装用户输入数据的对象(UserDTO)传递给操作数据库的数据访问类(DAO),为了提高系统的扩展性,针对不同的数据库可能需要提供不同的数据访问类,因此提供了数据访问类接口,如 IUserDAO,每一个具体数据访问类都是某一个数据访问类接口的实现类,如 OracleUserDAO就是一个专门用于访问Oracle数据库的数据访问类
根据以上描述绘制类图。为了简化类图,个人信息仅包括账号(userAccount)和密码(userPassword),且界面类无须涉及界面细节元素
三、序列图
用于表示对象之间的动态交互,而且以图形化的方式描述了对象间消息传递的时间顺序
3.1序列图定义
序列图是一种强调对象间消息传递次序的交互图,又称时序图。它以图形化的方式描述了在一个用例或操作的执行过程中对象如何通过消息相互交互,说明了消息如何在对象之间被发送和接收以及发送的顺序
序列图通常有两种
- 需求分析阶段的序列图:主要用于描述用例中对象之间的交互,可以使用自然语言绘制,用于细化需求,它从业务的角度进行建模,用描述性的文字叙述消息的内容
- 系统设计阶段的序列图:确切表示系统设计中对象之间的交互,考虑到具体的系统实现,对象之间通过方法调用传递消息
3.2序列图组成元素与绘制
UML中,序列图将交互关系表示为一个二维图,纵向轴表示时间轴,时间沿竖线向下延伸;横向轴表示在交互过程中的独立对象,对象的活动用生命线表示。序列图由执行者、生命线、 对象、激活框和消息等元素组成
执行者是交互的发起人,使用与用例图一样的“小人”符号表示,有些交互过程无须使用执行者
生命线用一条纵向虚线表示
对象表示为一个矩形,其中对象名称标有下划线
激活是过程的执行,包括等待过程执行的时间。在序列图中激活部分替换生命线,使用长条的矩形表示
消息是对象之间的通信,是两个对象之间的单路通信,是从发送者到接收者之间的控制信息流。消息在序列图中由有标记的箭头表示,箭头从一个对象的生命线指向另一个对象的生命线,消息按时间顺序在图中从上到下排列
一个复杂的序列图可以划分为几个小块,每一个小块称为一个交互片段。每个交互片段由一个大方框包围,在方框左上角的间隔区内标注该交互片段的操作类型,该操作类型用操作符表示,常用的操作符包括:
- alt:多条路径,条件为真时执行
- opt:任选,仅当条件为真时执行
- par:并行,每一片段都并发执行
- loop:循环,片段可多次执行
在序列图中,有的消息对应于激活,表示它将会激活一个对象,这种消息称为调用消息;如果消息没有对应激活框,表示它不是一个调用消息,不会引发其他对象的活动,这种消息称为发送消息;如果对象的一个方法调用了自己的另一个方法时,消息是由对象发送给自身,这种消息称为自身消息。序列图中的消息还包括创建消息和销毁消息,创建消息用于使用 new关键字创建另一个对象,而销毁消息用于调用对象的销毁方法将一个对象从内存中销毁
举例
某基于Java EE的B/S系统需要提供登录功能,该功能简要描 述如下:用户打开登录界面login.jsp输入数据,向系统提交请 求,系统通过Servlet获取请求数据,将数据传递给业务对象, 业务对象接收数据后再将数据传递给数据访问对象,数据访 问对象对数据库进行操作,查询用户信息,再返回查询结果
四、状态图
用于描述对象的各种状态以及状态之间的转换
4.1状态图定义
通常用状态图来描述单个对象的行为,它确定了由事件序列引出的状态序列,但并不是所有的类都需要使用状态图来描述它的行为,只有那些具有重要交互行为的类,我们才会使用状态图来描述
大多数面向对象技术都使用状态图来描述一个对象在其生命周期中的行为,对象从产生到结束,可以处于一系列不同的状态。状态影响对象的行为,当这些状态的数目有限时,就可以用状态图来建模对象的行为,状态图显示了单个类的生命周期,在不同状态下对象可能具有不同的行为
4.2状态图组成元素与绘制
状态:又称为中间状态,用圆角矩形框表示,在一个状态图中可有多个状态,每个状态包含两格:上格放置状态名称,下格说明处于该状态时对象可以进行的活动
初始状态:又称为初态,用一个黑色的实心圆圈表示,在一个状态图中只能够有一个初始状态
结束状态:又称为终止状态或终态,用一个实心圆外加一个圆圈表示,在一个状态图中可能有多个结束状态
转移:用从一个状态到另一个状态之间的连线和箭头说明状态的转移情况,并用文字说明引发这个状态变化的相应事件是什么。事件有可能在特定的条件下发生,在 UML中这样的条件称为守护条件,发生事件时的处理也称为动作。状态之间的转移可带有标注,由三部分组成(每一部分都可省略),其语法为:
事件名 [条件] / 动作名
在一个状态图中,一个状态也可以被细分为多个子状态,包含多个子状态的状态称为复合状态
举例
某信用卡系统账户具有使用状态和冻结状态,其中使用状态又包括正常状态和透支状态两种子状态。如果账户余额小于零则进入透支状态,透支状态时既可以存款又可以取款,但是透支金额不能超过5000元;如果余额大于零则进入正常状态,正常状态时既可以存款又可以取款;如果连续透支100天,则进入冻结状态,冻结状态下既不能存款又不能取款,必须要求银行工作人员解冻。用户可以在使用状态或冻结状态下请求注销账户
设计模式——统一建模语言UML的更多相关文章
- 2017.12.23 第二章 统一建模语言UML概述
第二章 统一建模语言UML概述 (1)为什么要建模 模型是某个事物的抽象,其目的是在构建这个事物之前先来理解它,因为模型忽略了那些非本质的细节,这样有利于更好的理解和表示事物: 在软件系统开发之前首先 ...
- 统一建模语言UML
目录 1. UML定义 2. UML结构 2.1 视图(View) 2.2 图(Diagram) 2.3 模型元素(Model element) 2.4 通用机制(General mechanism) ...
- 014.统一建模语言UML
1.UML 的设计目的 UML是为了简化和强化现有的大量面向对象开发方法这一目的而开发的. UML 适用于各种软件开发方法.软件生命周期的各个阶段.各种应用领域以及各种开发工具,是一种总结了以往建模技 ...
- 技术人应该学习的行话--UML统一建模语言
新生代码农如何在硝烟弥漫的商业丛林中生存和崛起? 洞见,让一部分先遇见未来. 最近公司技术部在组织架构师培训,有幸参与.导师老刘特别推荐了UML语言的学习.回想多年来,自己习惯做一些流程图,框图或者所 ...
- 统一建模语言UML---类图
什么是统一建模语言,来看看百科中的介绍统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明.可视化和编制文档的一种标准语言,是非专利的第三代建模 ...
- 建模语言UML
建模语言UML Unified Modeling Language (UML)又称统一建模语言或标准建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持, ...
- 设计模式学习总结(一)——设计原则与UML统一建模语言
一.概要 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性. 设计 ...
- 【UML】统一建模语言
如果是准备学习设计模式的同学,可以只了解类图相关的知识 而如果是在准备软件设计师考试的同学,或许会对你有点帮助 正在施工...... 参考博客:https://blog.csdn.net/unique ...
- 1. UML统一建模语言
(1)UML概述: 建模: 对现实系统进行适当的过滤, 用适当的表现规则描述出简洁的模型. 建模是一种深入解决问题的方法. UML: UML(United Modeling Language, 统一建 ...
随机推荐
- CF 551 E GukiZ and GukiZiana
https://codeforces.com/contest/551/problem/E 分块真强. 题意就是1.区间加,2.询问整个区间中,最远的两个x的距离. 分块,然后,每次找位子用二分找即可. ...
- 共价大爷游长沙 lct 维护子树信息
这个题目的关键就是判断 大爷所有可能会走的路 会不会经过询问的边. 某一条路径经过其中的一条边, 那么2个端点是在这条边的2测的. 现在我们要判断所有的路径是不是都经过 u -> v 我们以u为 ...
- CodeForces 1082 F Speed Dial
题目传送门 题意:现在有n个电话号码,每个电话号码为si,拨打次数为pi. 现在有k 个快捷键,每次拨打号码之前可以先按一次快捷键,然后再输入数字,现在问输入数字次数是多少.快捷键的号码可以不在电话簿 ...
- CodeForces 367 C Sereja and the Arrangement of Numbers 欧拉回路
Sereja and the Arrangement of Numbers 题解: ummm. 在一副图中,如果全部点的度数是偶数/只有2个点是奇数,则能一笔画. 考虑图的点数k为奇数的时候,那么每个 ...
- hadoop之数据倾斜
数据倾斜介绍 在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显.主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Count ...
- C#开发BIMFACE系列22 服务端API之获取模型数据7:获取多个模型的楼层信息
系列目录 [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模型的楼层信息>中介绍获取单个模型的所有楼层信息.某些场景下 ...
- vue基础技术点列表(一)
一. vue编写需要注意的细节1.vue初始化实例时使用首字母大写,在添加全局配置时也要首字母大写(如添加组件Vue.component("",{template:"&q ...
- Maven学习归纳(一)——简单的环境配置入门
一.Maven的基本概念 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的编译,测试,构建,报告和文档的软件项目管理工具和解决依赖关系的工具. 1.1 项目的构建 项目的构建 ...
- MyBatis的发展和选型
xlecho编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! 参考 ...
- LVM扩容根分区
LVM的工作方式 LVM管理工具集 [root@wendang ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda ...