这是一篇相对较长的文章,如你们所见,比较详细,全长两万字。我不建议你们一次性看完,直接跳目录找你需要的知识点即可。
--------欢迎各位来到我UML国!
一、UML图
总共有如下几种:
- 用例图(Use Case Diagram):描述系统功能和用户交互。
- 类图(Class Diagram):描述系统中的类、接口、它们的属性、方法和关系。
- 序列图(Sequence Diagram):描述对象间的消息交换顺序。
- 状态图(State Diagram):描述对象状态的变化。
- 活动图(Activity Diagram):描述业务流程或操作的步骤。
- 组件图(Component Diagram):描述系统的物理结构,展示组件和它们的依赖关系。
- 部署图(Deployment Diagram):描述系统的物理部署,展示硬件和软件组件的分布。
- 通信图(Communication Diagram):序列图的变体,强调对象间的关系。
- 定时图(Timing Diagram):描述对象间交互的时间约束。
- 交互概览图(Interaction Overview Diagram):组合不同类型的交互图。
- 对象图(Object Diagram):类图的实例,显示对象间的具体交互。
- 包图(Package Diagram):描述系统的逻辑视图,展示包和类的关系。
接下来,小的给小主详细介绍一下宫里几位主子:
<1>皇帝:用例图【Use Case】
- 定义
用例图是表示一个系统中用例与参与者关系之间的图,描述系统中相关用户和系统对不同用户提供的功能和服务。
用例 就是参与者提出来的要求实现的功能。
2.构成元素
【1】参与者(Actor)**:位于用例的外部,和软件系统有交互的人或者事物。图如下:
【2】系统边界(System Scope)**:表示软件系统的边界,边界内部就是软件必须实现的,边界外部就不需要写代码来实现。图如下:
【3】用例(Use Case)**:描述系统对外提供的功能,用椭圆表示。
【4】关联(Association)**:表示参与者和用例之间的关系,用直线表示。
如何识别参与者?为系统提供输入的人或事物
举例:
为系统提供输入的人 网上商店:卖家 买家
为系统提供输入的物 教务管理系统 学生宿舍管理系统
接收系统输出的人或事物 校长接收全校成绩/挂科人数
需要接入的第三方系统或设备 电商系统 支付宝、微信、网络银行系统
时间是否会触发某些事件 还书超过时间要付赔偿金
负责支持或维护系统中信息的人 图书管理员
3.画出参与者、用例之间的关系
3.1 Generalization :泛化关系、继承关系
图形:带空心三角形的实线,指向父类
++例如狗和动物,自行车和交通工具++
参与者与参与者之间:
用例与用例之间:
3.2 Include:包含关系
两个用例之间的关系,表示一个用例的实现需要另一个用例的参与。
图形:带箭头的虚线,指向被包含
++例如去餐厅吃饭需要付钱,网上购物需要填写收货地址++
网络商店:用户登录(A) 账号密码登录 (B) 微信登录 (B)
A用例称之为基用例,两个B用例称之为包含用例;
没有B用例,A用例是不完整的;B用例是必不可少的
3.3 Extend:扩展关系
表示一个用例是另一个用例的可选部分,基本用例是一个完整的用例,即使没有扩展用例 也能完成功能。
图形:带箭头的虚线,指向基用例
打个比方,你去购买商品的时候需要申请折扣,在线预定酒店需要请求特殊需求,需要一 个母婴房或者是无烟房。就是不是每次都会发生的。
购买商品又叫做基用例,申请折扣是拓展用例;
在线预订酒店是基用例,请求特殊需求就是拓展用例
图书馆管理系统:归还图书(A) 缴纳罚金(B)
A用例是基用例,B用例称之为扩展用例
A用例是B用例执行的前提;
B用例是A用例执行过程中满足某些条件才执行的
3.4 Association:关联关系
表示两个类之间存在某种联系,是一种拥有的关系,它使一个类知道另一个类的属性和方法。
图形:
**双向关联**:通常用一条不带箭头的实线表示,表示两个类之间相互关联。
**单向关联**:用一条带箭头的实线表示,箭头指向被拥有的类。
一个"学生"(Student)类和一个"课程"(Course)类,一个学生可以注册多个课程,一个课程可以有多个学生注册。这种情况下,学生和课程之间的关联关系是双向的。
如果关联关系是单向的,比如一个"老师"(Teacher)类和一个"课程"(Course)类,一个老师可以教授多个课程,但一个课程通常只有一个主要负责人。这种情况下,老师和课程之间的关联关系是单向的,从"老师"指向"课程"。
Teacher --> Course
4.用例规约
表达行业性功能的业务流程的方式:活动图、用例规约
用例图无法表达行业性功能的业务流程,只能用上面两种方式
|----------|---------------------------------------------|-------------------------------------------------------------|
| 用例名称 | 用户登录 ||
| 参与者 | 读者、学生、老师 ||
| 用例简述 | 图书馆的各种读者通过用户登录获取其在系统中的合法身份 ||
| 前置条件 | 已经注册了读者身份 ||
| 基本事件流 | 用户操作 1. 用户要求进行用户登录 3、用户在登录界面上输入账号、密码数据, 并提交 | 系统反应 2、系统显示登录界面 4、系统验证账号是否存在,密码是否正确,系统记录 登录成功的用户的数据;系统显示主界面 |
| 分支事件流(n) | 在基本事件流第4步发现账号不存在或者密码错误,进入分支事件流 回到基本事件流第3步 | 系统再一次显示登录界面,界面上显示上一次的错误原因 |
| 后置条件 | 系统记录用户信息,修改用户的状态 ||
- 用例规约中的文字禁止使用软件专业术语
- 基本事件流只写正确执行的主要事件流,不正确的流程写在分支事件流
- 事件流只写用户与系统之间的交互,系统内部不用描述的,将软件系统看成一个黑匣子
- 用例图的用途
-用例图通过参与者、用例以及它们之间的关系来描述系统的功能,便于开发人员开发。
用于描述系统功能和用户交互
复习题:
<1>上图中的参与者有:
- 读者 2、借阅图书 3、用户登录 4、微信登录
<2>上图中那两个构件事物之间存在包含关系:
- 学生和读者 2、归还图书和缴纳罚金 3、用户登录和账号密码登录
<3>考点:包含关系和扩展关系有什么相同点和不同点?
复习题答案
<1>找火柴人:选1
<2>找include:选3
<3>
相同点:包含关系和扩展关系都是从现有的用例中抽取出公共的部分信息,作为一个单独的用例,然后通过不同的方法来重用这个公共的用例,以减少模型维护的工作量。
不同点:
- **执行时机**:
- **包含关系**:在基用例的基本流执行时,包含用例一定会执行。这意味着包含用例是基用例执行的必要部分。
- **扩展关系**:扩展用例是对基用例的扩展,即使没有扩展用例的参与,基用例也可以完成一个完整的功能。扩展用例只有在基用例满足某种条件的时候才会执行,这使得扩展用例成为基用例的可选部分。
- **图形表示**:
- **包含关系**:在用例图中,包含关系使用带箭头的虚线表示,箭头从基用例指向包含用例,并在线上标注"<<include>>"。
- **扩展关系**:在用例图中,扩展关系也使用带箭头的虚线表示,但箭头从扩展用例指向基用例,并在线上标注"<<extend>>"。
<2>皇后:类图【Class Diagram】
- 定义
- 类图用于描述系统中的类、接口、属性、方法以及它们之间的关系。它是面向对象设计的核心,用于展示系统的静态结构。
2.构成元素
【1】类(Class)**:表示具有相同属性和操作的一组对象的蓝图。
类通常用矩形表示,分为三个部分:顶部是类名,中间是属性,底部是操作。
【2】接口(Interface)**:定义了一组操作规范,但不实现这些操作。
【3】 属性(Attributes)**:类中定义的变量,用于存储数据。
【4】 操作(Operations)**:类中定义的函数或方法,用于执行动作。
【5】关系(Relationship)**:
**关联(Association)**:表示两个类之间的结构性关系。
**依赖(Dependency)**:表示一个类的变化可能影响另一个类。
**泛化(Generalization)**:表示继承关系,子类继承父类的属性和操作。
**实现(Realization)**:表示一个类实现了一个接口。
**聚合(Aggregation)**:表示整体与部分的关系,部分可以独立于整体存在。
**组合(Composition)**:表示整体与部分的关系,部分不能独立于整体存在。
【6】可见性(Visibility)
**+** public:公共的,可以被任何其他类访问。
**-** private:私有的,只能在定义它的类内部访问。
**#** protected:受保护的,可以被定义它的类及其子类访问。
**~** package:包访问权限,只能在定义它的包内部访问。
- 两个类之间相互关联时,关联自身也具有属性和操作。
- 类图主要展示系统的静态结构,但也可以表示动态方面,如对象间的关系和交互。
3.作用
提供系统的静态视图,帮助理解系统的结构和组成。
作为代码实现的蓝图。
促进团队成员之间的沟通和理解。
复习题:
某商场会员管理系统包含一个会员类(Member), 会员的基本信息包括会员编号、 会员姓名、 联系电话、 电子邮箱、 地址等, 会员可分为金卡会员(GoldMember)和银卡会员(SilverMember)两种, 不同类型的会员在购物时可以享受不同的折扣; 每个会员可以拥有一个或多个订单(Order), 每一个订单又可以包含至少一条商品销售信息(ProductItem), 商品销售信息包括订单编号、 商品编号、 商品数量、 商品单价和折扣等; 每一条商品销售信息对应一类商品(Product), 商品信息包括商品编号、 商品名称、 商品单价、 商品库存量、 商品产地等。
<1>根据以上描述画出类图。
<2>UML类图中,关联和依赖的区别是什么?
A. 关联是有向的,依赖是无向的
B. 关联是无向的,依赖是有向的
C. 关联表示对象之间的关系,依赖表示类之间的继承关系
D. 关联表示类之间的继承关系,依赖表示对象之间的关系
<3>在UML类图中,多重性"1"表示什么含义?
A. 一个类的对象可以与另一个类的对象有多个关联。
B. 一个类的对象必须与另一个类的对象有一个关联。
C. 一个类的对象可以与另一个类的对象有零个或多个关联。
D. 一个类的对象可以与另一个类的对象没有关联。
<4>如果在UML类图中,一个类与另一个类之间的关联多重性标记为"0..*",则表示:
A. 每个对象至多有一个关联对象。
B. 每个对象至少有一个关联对象。
C. 每个对象可以有零个或多个关联对象。
D. 每个对象必须有多个关联对象。
复习题答案
<1>
<2>C. 关联表示对象之间的关系,依赖表示类之间的继承关系
<3>B. 一个类的对象必须与另一个类的对象有一个关联。
<4>C. 每个对象可以有零个或多个关联对象。
<3>贵妃:序列图【 Sequence Diagram**】**
1.定义
序列图通过描述对象之间发送消息的时间顺序来显示多个对象之间的动态协作。它在详细设计阶段用于设计对象的交互和行为。
它是一个二维图,横轴表示对象,纵轴表示时间,消息在各对象之间横向传递,依照时间顺序纵向排列。
2.构成元素
【1】角色(Actor)**:系统角色,可以是人或其他系统,子系统。以一个小人图标表示。
【2】对象(Object)**:对象位于序列图的顶部,以一个矩形表示。对象的命名方式一般有三种:对象名和类名、只显示类名(匿名类)、只显示对象名。
【3】生命线(LifeLine)**:每个对象底部中心的垂直虚线,表示对象在一段时间内的存在。
【4】激活(Activation)**:表示对象将执行相应操作的时间段的符号。在C语义中可以解释为一对括号{};用一个小矩形表示,即绿色圈中部分。
【5】消息(Message)**:对象之间传递的信息,用于表示对象之间的交互。消息分为同步消息、异步消息和返回消息。
- 消息类型
<1>同步消息(Synchronous Message)**:发送者发送消息后,必须等待接收者处理完毕后才能继续执行。
<2>异步消息(Asynchronous Message)**:发送者发送消息后,不需要等待接收者的响应,可以继续执行后续操作。
<3>返回消息(Return Message)**:表示一个对象收到消息后执行了相应的操作,并将结果返回给发送消息的对象。
- 自关联消息
自关联消息是指对象在序列图中发送消息给自己的情况。这种消息表示对象内部的自身行为或交互。
- 创建和销毁消息
参与者不一定在序列图交互的整个持续时间内都存在。可以根据传递的消息创建和销毁参与者。
复习题:
<1>上图绘制的是客户在自动售货机购买商品的顺序图,参与的用户界面类是:
A、出货器 B、前端 C、顾客 D、识别器
<2>正确按照时间顺序排列的消息是:
A.交付货币 交付商品信息 识别 出货
B.识别 交付货币 交付商品信息 出货
C.交付货币 识别 交付商品信息 出货
<3>交付货币消息将被实现为类的方法
出货器 B、前端 C、顾客 D、识别器
复习题答案
<1>B 找和用户有交互接触的类
<2>C 顺序图的时间顺序一般是从左到右,再从上到下
<3>D 消息成为消息指向的类中的方法,就是说 消息指向谁就实现谁的方法
<4>贵妃:状态图【State Diagram】
- 定义
- 状态图用于描述对象在系统中的所有可能状态及其相互之间的转变关系。它主要用于分析和设计基于事件驱动的系统,例如嵌入式系统、交互式软件或业务流程。
2.构成元素
【1】状态(State)**:表示对象在其生命周期中的各种条件或情况。用圆角矩形表示,包含状态名称,可选内部描述包括进入、退出和持续活动。
【2】初始状态(Initial State)**:系统或对象的起始点,用一个实心圆表示。
【3】最终状态(Final State)**:系统或对象生命周期的终止状态,用一个双圈的实心圆表示。
【4】选择状态(Choice State) **:一般用菱形表示
【5】状态转移(Transition)**:表示状态之间的变更,用带箭头的直线连接两个状态,箭头上标注触发事件、条件和动作。
【6】触发事件(Triggers)**:Triggers是指引起状态转换的事件或信号。它们是状态机响应的外部或内部刺激,可以是消息的接收、时间事件、条件满足或其他任何可以被状态机识别的事件。
【7】条件(Guard Condition)**:状态转移的约束,通常用方括号表示,条件为真时,转移才会发生。
这里有关Triggers和Guard我想补充一下,有些同学会比较困惑不太能理解。
比如现在咱就是过马路,因为现在是状态图对吧。路灯有红灯,绿灯,黄灯三种状态,咱都知道,一般过了一段固定的时间路灯就会变颜色,这个固定的时间就是Triggers,也就是我们说的触发器。这个Guard呢,比如说黄灯转绿灯就要没有车辆靠近,这个没有车辆靠近就是Guard。Triggers是Transition的必要条件,但是Guard不是。
【8】活动(Activity)**:表示在状态中执行的操作,可以细分为入口(entry)、持续(do)和出口(exit)动作。
3.画图
第一步:右击Model根节点
第二步:Add a Model using Wizard 添加新模型
第三步:State Machine选择一个模型 ---> Create pattern
第四步:先画Initial开始状态和Final结束状态
第五步:绘制其他状态State
第六步:画状态之间的转移
注意:一般initial、final和一般状态之间的转移不需要写转移条件
复习题:
<1>状态图中,以下哪一项是描述状态之间转换的触发因素?
A. 状态 B. 转换 C. 事件 D. 动作
<2>在状态图中,当对象从一个状态转移到另一个状态,这个过程称为什么?
A. 事件 B. 转换 C. 动作 D. 状态
<3>下列哪一项不是状态图的核心元素?
A. 对象 B. 状态 C. 转换 D. 事件
<4>对于在线购物系统中的订单对象,以下哪一状态不可能出现在其状态图中?
A. 待付款 B. 已发货 C. 购物车 D. 已完成
<5>根据以下的描述,绘制"复印机"的状态图。
未接到工作命令时,复印机处理闲置状态,接到复印命令后,转入复印状态,完成复印后又回到闲置状态,等待命令。若复印时发现没纸,则进入缺纸状态,发出警告等待装纸,装纸完成后又进入闲置状态;若复印时发现卡纸,则进入卡纸(故障)状态,发出警告等待排除故障,故障排除后又进入闲置状态。
<6>绘制选课系统中课程(Course)对象的状态图。
经过需求分析,Course课程对象有以下状态:创建(Created),添加到数据库中(In Database),课程(在数据库中)被删除(Deleted),课程被修改(Modified),课程被开设(纳入学期计划)(In Schedule),不允许选修(选修人数满)(Locked)。
复习题答案
<1>C. 事件
<2>B. 转换
<3>A. 对象
<4>C. 购物车
<5>
<6>
<5>嫔: 活动图**【** Activity Diagram**】**
- 定义
-活动图用于描述系统中业务流程、工作流或系统操作的动态行为。它展示了业务流程中的步骤以及这些步骤之间的控制流。
- 构成元素
【1】活动(Activity)**:表示一个操作或一个动作的执行,是活动图中的基本单元。
【2】动作状态(Action )**:表示一个动作的执行,是活动图中的一个节点。不可细分!
Activity和action是有区别的,一个Activity可以包括多个action。比如说你要去上早八,首先你要起床----去买个包子----走路到教室----认真听讲【混日子的就是打王者刷抖音偶尔抬头看一眼老师等吃饭】----下课,其中上早八就是Activity。起床/买包子/走路到教室/听讲/下课分别是5个Action。
【3】决策节点(Decision Node)**:具有一个进入控制流和至少两个导出控制流。判断是否满足条件。满足继续,不满足走另一条路。
【4】并发区域(Concurrent Region)**:表示多个活动可以并行执行。
【5】同步条(Synchronization Bar)**:表示多个并行活动的开始或结束。
【6】. 动作流(Action Flow)**:连接活动,表示活动之间的顺序执行。
【7】 分叉(Fork)和汇合(Join)**:
用来对并发的控制流建模
分叉用于将活动流分为两个或多个并发运行的分支,汇合用于将并行分支的活动流重新合并。
所有的子流程都要执行;所有子流程的执行具有并行执行的特点
【8】泳道(Swimlane)**:将活动图划分为不同的区域,每个泳道代表一个责任区域,指明活动是由谁负责的或发起的。
【9】对象流(Object Flows)**:表示动作状态或活动状态与对象之间的依赖关系,表示动作使用对象或动作对对象的影响。
【10】开始节点(Initial Node)**:表示流程的开始,通常用一个实心黑色圆点表示。
【11】终止节点(Final Node)**:表示流程的结束,通常用一个半实心球表示。
复习题:
<1>活动图中用于判断节点的多个控制流合并的元素是( ).
A 判断节点 B 泳道 C 合并 D 分叉
<2>下面不是活动图中的基本元素是( ).
A 分叉、合并 B 泳道、对象流 C 用况 状态 D 活动 分支
<3>活动图中用于活动分组的元素是( ).
A 泳道 B 控制流 C 判断节点 D 包
<4>下列建模适合使用活动图的有( ),
A 对业务流程建模 B 对程序流程建模 C 对体系结构建模 D 对数据库建模
<5>请根据以下流程,画一张学生请假的活动图。
学生填写请假单 ===> 班主任审批 ===> (请假时间>1天)学工处审批===>
学工处记录 ===> 班主任通知学生请假结果
<6>请根据以下流程,画一张活动图。
卖家接收到买家的订单后处理订单的业务流程:
财务部收款 开具发票
仓储部备货 发物流
复习题答案
<1>C
<2>C
<3>A
<4>AB
<5>无脑画initial和final开始和结束-----依赖画Action动作-----使用ControlFlow连接所有动作
<6>嫔: 组件图**【** Component Diagram**】**
1.定义
- 组件图提供了系统的物理视图,展示了软件组件如何分解以及它们之间的依赖关系。
2.构成元素
【1】组件(Component)**
组件是软件的可替换模块,它封装了实现细节,并提供了一个清晰的接口。
在组件图中,组件通常用矩形表示,名称通常显示在矩形内部。
【2】接口(Interface)**
组件提供的接口用小圆圈表示,位于组件的边界上。
接口可以是用于组件间通信的点,也可以是组件提供的服务。
【3】组件之间的关系**
**依赖关系(Dependency)**:表示一个组件的使用或功能依赖于另一个组件的实现。
**实现关系(Realization)**:表示一个组件实现或特化了一个接口。
**聚合关系(Aggregation)**:表示组件间的整体与部分的关系,部分可以独立于整体存在。
**组合关系(Composition)**:表示组件间的强整体与部分的关系,部分不能独立于整体存在。
【4】可见性(Visibility)
- 接口的可见性可以是公共的(+)或私有的(-),表示接口的访问权限。
【5】部署视图**
- 组件图与部署图(Deployment Diagram)结合使用,可以展示组件在硬件上的部署情况。
复习题:
<1>组件图专注于系统的哪种实现图?
A. 动态 B. 静态 C. 基础 D. 实体
<2>在UML中,哪个元素是被节点执行的事物?
A. 包 B. 组件 C. 接口 D. 节点
<3>组件图通常在软件开发的哪个阶段使用?
A. 实现 B. 需求分析 C. 架构设计 D. 维护
<4>组件图中,哪个元素定义了组件提供或使用的功能?
A. 组件 B. 接口 C. 依赖关系 D. 关联关系
在这个组件图中:
用户界面
(UI)负责显示书籍信息和处理用户订单。订单处理
(OP)管理订单逻辑和库存更新。库存管理
(IM)跟踪书籍库存。支付网关
(PG)处理支付事务。书籍数据库
(BD)存储书籍信息和库存数据。<5>在在线书店系统中,"支付网关(PG)"组件的主要功能是什么?
<6>如果在线书店系统需要添加一个新的功能,允许用户撰写和阅读书籍评论,请设计相应的组件
复习题答案
<1> B. 静态
<2> B. 组件
<3>A. 实现
<4>B. 接口
<5>
- 接收支付请求:当用户完成购物并选择支付方式后,支付网关接收来自用户界面的支付请求。
- 验证支付信息:支付网关验证用户提供的支付信息,如信用卡详情、支付金额等。
- 与银行或支付服务提供商交互:支付网关与外部银行系统或支付服务(如PayPal、Stripe等)进行通信,以完成支付处理。
- 确认支付结果:支付网关将支付结果(成功或失败)返回给订单处理组件,以便更新订单状态。
- 安全性保障:确保所有支付信息的安全传输和处理,遵守相关的支付卡行业(PCI)标准。
- 提供支付日志和报告:记录所有支付活动的细节,为审计和报告目的提供数据。
<6>新组件名称:评论管理(Review Management)
- 主要功能:
- 评论提交:允许用户提交书籍评论,并将其存储在系统中。
- 评论检索:提供接口供用户检索和阅读书籍评论。
- 评论存储:将评论数据存储在数据库中,与书籍信息和用户信息相关联。
- 评论审核:对用户提交的评论进行审核,确保评论内容符合规定标准。
- 用户反馈:允许用户对评论进行点赞或报告不当内容。
- 与其他组件的关系:
- 用户界面(UI):评论管理组件将与用户界面组件交互,提供评论提交和显示的界面。
- 书籍数据库(BD):评论管理组件将与书籍数据库组件交互,存储和检索与书籍相关的评论。
- 订单处理(OP):如果评论与特定订单相关,评论管理组件可能需要与订单处理组件交互,以获取订单详情。
<7>贵人: 部署图**【** Deployment Diagram**】**
1.定义
- 部署图(Deployment Diagram)描述了系统的物理架构,包括硬件节点和在这些节点上运行的软件组件。它展示了系统的硬件配置、硬件部署以及软件如何部署到网络结构中。
2.构成元素
【1】节点(Node)**:代表运行时的物理对象,如服务器、数据库服务器等。节点通常用立方体表示,处理器节点带阴影,设备节点不带阴影。
【2】节点实例(Node Instance)**:表示特定节点的一个实例,名称会有下划线,并且节点类型前会有冒号。
【3】构件(Artifact)**:软件开发过程中的产物,如源代码、可执行程序、文档等。构件通常用带有关键字<<artifact>>和文档图标的矩形表示。
构件vs节点
- 构件表示软件部件,节点表示硬件部件。构件是参与系统执行的事物,而节点是执行构件的事物。
【4】连接(Association)**:表示节点之间的通信路径,可以是协议如TCP/IP、HTTP等。
【5】处理器(Processor)**:具有计算能力的节点,可以执行软件组件,如服务器。
【6】设备(Device)**:不具有计算能力的节点,通过接口提供服务,如打印机、扫描仪。
3.用途
- 描述一个具体应用的主要部署结构。
- 平衡系统运行时的计算机资源分布。
- 描述组织的硬件网络结构或嵌入式系统的多种硬件和软件相关的系统运行模型。
复习题
<1>在UML中,部署图主要用于展示以下哪项内容?
A. 系统的静态结构 B. 系统的动态行为 C. 系统的物理架构 D. 系统的功能需求
<2>UML部署图中,以下哪个选项不属于部署图中的事物?
A. 节点(Node) B. 构件(Artifact) C. 用例(Use Case) D. 组件(Component)
<3>在UML部署图中,以下哪个选项正确描述了构件实例与节点的关系?
A. 每个构件实例必须部署在多个节点上
B. 一个节点可以包含多个构件实例
C. 构件实例不能与节点分开
D. 节点是构件实例的抽象表示
复习题答案
<1>C. 系统的物理架构
<2>C. 用例(Use Case)
<3>B. 一个节点可以包含多个构件实例
<8>常在:通信图/协作图【Communication Diagram】
1.定义
- 通信图用于描述一组对象在协作过程中如何互相通信,强调对象在交互中承担的角色,侧重于展示对象之间的关系。通信图是序列图的变体,强调对象间的关系。它在详细设计阶段用于展示对象间的交互结构。
2.构成元素
【1】对象(Object)**:
对象的基本表示形式与顺序图中的对象相同,都是类的实例。
对象在通信图中的位置没有限制,且不表示对象的创建与销毁。
-图形为一个方框,加了":"之后就变成实例化对象
【2】链(Link)**:表示对象之间的关系或连接,用于描述消息传递的路径。
- 链是关联的实例,用于连接对象并传递消息,若两个对象需要发生交互,必须先建立链。
【3】消息(Message)**:
消息需要附加在对象之间的链上,通过链连接的两个对象之间才允许在交互执行过程中进行消息传递。
短箭头上方的阿拉伯数字表执行顺序。
3.画message
<1>先画两个对象
<2>画association
<3>右击选择消息,点击黑框或者绿框,你自己根据情境选择
或者可以把类实例化变成对象之后再进行message的连接,加了":"之后就变成实例化对象
- 特征
通信图可以表示多态性,展示不同类型的对象如何响应同一消息。
通信图可以表示同步和异步消息,通过特定的箭头和符号来区分。
复习题
假设我们正在设计一个电梯系统,该系统需要处理用户的楼层请求,并根据请求调度电梯。系统包括队列(RequestQueue)、电梯(Elevator)、命令、楼层控制器(FloorController)、按钮(Button)等组件。用户通过按钮发出请求,楼层控制器接收请求并调度电梯,电梯根据命令执行上下行操作。
- 用户调用按钮的
nextJob()
方法发出请求。- 按钮调用楼层控制器的
create()
方法创建一个新的请求。- 楼层控制器调用队列的
push()
方法将请求添加到队列中。- 楼层控制器根据队列中的请求调用电梯的
getElevator()
方法分配电梯。- 电梯根据楼层控制器的命令执行
moveUp()
或moveDown()
方法。<1>请你根据描述画出协作图
阅读以下读者借阅图书用例的协作图,完成习题:
<2>图上用户界面类是:
A 借书窗口
B 图书信息
C 图书借阅信息
D 图书管理员
<3>检查借阅信息这几个消息的时间序列
选择书籍 / 添加借阅图书信息 / 显示借阅记录 / 提交借书证和书籍
<4>本图中有哪些消息需要循环发送?
复习题答案
<1>
<2>A 用户界面类负责IO,和参与者有交互的类 看消息标注上的前缀
<3>提交借书证和书籍 ----- 选择书籍 ----- 添加借阅图书信息 -----显示借阅记录
<4>*[所有想要借的图书]选择书籍()
<9>常在: 定时图**【** Timing Diagram**】**
1.定义
- 定时图用于展示对象状态随时间的变化,以及对象间的交互和事件的时序关系,特别适用于分析并发系统和实时系统。
--定时图描述对象间交互的时间约束。它在需要精确时间控制的系统中使用,如实时系统。
2.构成元素
【1】时间轴(Time Axis)**:展示时间的流逝,通常是水平方向。
【2】生命线(Lifeline)**:代表系统中的一个元素,如一个对象或组件,在定时图中通常是垂直方向展示。
- 生命线结束表示对象完成了其生命周期内的所有行为。
【3】状态(State)**:展示生命线上对象在特定时间段的状态。
【4】时间约束(Time Constraint)**:指定状态持续时间或事件发生的具体时间。
【5】事件(Event)**:表示在特定时间点发生的事情,可以是发送或接收消息,也可以是状态的变更。
【6】条件事件(Conditional Event)**:表示基于特定条件的事件,条件可以是布尔表达式,当条件为真时事件发生。
【7】时间段(Time Interval)**: 表示一个时间段,在这段时间内对象保持特定的状态或执行特定的活动。
【8】同步条(Synchronization Bar)**: 表示多个对象在特定时间点的同步操作,通常用一条粗线表示。
【9】销毁(Destruction)**:表示对象在某个时间点被销毁,可以用一个"X"标记在生命线上。
【10】创建(Creation)**:表示对象在某个时间点被创建,可以用一个空心圆圈标记在生命线上。
【11】自事件(Self-Event)**: 表示对象内部发生的事件,通常用一个指向自身的箭头表示。
【12】组合片段(Interaction Fragments)**:用于表示消息序列中的选择、迭代和并发等复杂行为。
- 用途
定时图特别适用于分析并发控制和时间依赖的行为设计。
定时图与其他交互图(如顺序图和通信图)的主要区别在于它强调时间因素,而顺序图强调消息的时间顺序,通信图强调对象间的组织结构。
复习题
<1>UML定时图主要用于表示什么?
A. 类之间的关系
B. 对象状态随时间的变化
C. 系统的物理部署
D. 用例的实现细节
<2>在UML定时图中,时间轴通常是如何表示的?
A. 垂直方向 B. 水平方向 C. 对角线方向 D. 无固定方向
<3>生命线在UML定时图中代表什么?
A. 事件 B. 操作 C. 对象或组件 D. 用例
<4>下列哪个不是UML定时图的基本组成部分?
A. 时间轴 B. 状态 C. 消息序列 D. 时间约束
<5>定时图中的生命线结束表示什么?
A. 对象被销毁
B. 系统崩溃
C. 对象状态不再改变
D. 对象完成了其生命周期内的所有行为
复习题答案
<1>B. 对象状态随时间的变化
<2>B. 水平方向
<3>C. 对象或组件
<4>C. 消息序列
<5>D. 对象完成了其生命周期内的所有行为
<10>答应: 交互概览图**【** Interaction Overview Diagram**】**
- 定义
交互概览图=活动图+顺序图
交互概览图是活动图的一种形式,其节点代表交互图。它可以理解为细化的活动图,其中的活动通过一些小型的顺序图来表示;也可以将其理解为利用标明控制流的活动图分解过的顺序图。
2.构成元素
【1】交互发生(Interaction Occurrence)**
- 表示一个特定的交互实例,可以是顺序图中的一个片段或其他类型的交互图。
【2】交互使用(Interaction Use)**
- 表示一个通用的交互模式,可以被多个不同的交互发生所重用。
【3】生命线(Lifeline)**
- 表示参与交互的对象,每个对象都有一条垂直的生命线。
【4】消息(Message)**
- 表示对象之间的通信,包括同步消息、异步消息和返回消息。
- 自关联消息(Self-Message):表示对象发送消息给自己的情况。
【5】扩展区域(Extension Region)**
- 表示扩展用例的片段,用于展示扩展用例如何扩展基础用例。
【6】包含区域(Include Region)**
- 表示包含用例的片段,用于展示基础用例如何包含其他用例。
【7】交互(Interaction)**
- 表示一系列消息交换,可以是顺序图、通信图或其他类型的交互图。
【8】时间约束(Time Constraints)**
- 用于指定消息交换的时间限制。
【9】守卫条件(Guard Conditions)**
- 用于指定分支的条件,只有当条件满足时,相应的分支才会执行。
【10】角色(Actor)**
- 表示与系统交互的外部实体,可以是人或其他系统。
【11】信号(Signal)**
- 表示在特定条件下触发的动作,通常用于表示异步事件。
【12】时间轴(Timeline)**
- 用于展示时间的流逝,通常在交互概览图的顶部或底部。
【13】交互执行(Interaction Execution)**
- 表示交互的执行路径,可以包含多个消息和分支。
好无聊啊 做个表情包玩下
复习题
复习什么复习,这个使用频率相对较少,自己找找概念题做一下算了,画图估计不会考
<11>答应: 对象图**【** Object Diagram**】**
- 定义
对象图展示了类的实例以及这些实例之间的关系,是一种快照,反映了系统的某个特定时刻的状态。
对象图是类图的实例,显示对象间的具体交互。它在分析特定场景下的对象状态和关系时使用。
2.构成元素
【1】对象(Object)**:表示类的一个具体实例,用矩形表示,通常包含对象名和类名。
- 对象的属性可以列出具体值,用"属性名:属性值"的形式表示。
- 对象图可以展示对象的方法,但通常不展示方法的具体实现。
- 表示关联中对象的数量,用在关联的两端,如"1..*"表示"一到多个"。
- 属性和方法的可见性可以用"+"(public)、"-"(private)、"#"(protected)和"~"(package)表示。
【2】关联(Association)**:表示对象之间的关系,用带标签的线表示。
【3】聚合(Aggregation)**:表示整体与部分的关系,用带有菱形或实心点的线表示。
【4】组合(Composition)**:表示更强烈的整体与部分关系,用带有实心菱形的线表示。
【5】依赖(Dependency)**:表示一个对象的变化可能影响另一个对象,用虚线箭头表示。
【6】继承(Inheritance)**:表示一个类是另一个类的子类,用带空心箭头的线表示。
- **对象图与类图的区别**
- 类图描述了类的静态结构和类之间的关系,而对象图展示了类的具体实例和实例之间的关系。
复习题
<1>在UML对象图中,以下哪个符号用来表示对象?
A. 矩形 B. 圆圈 C. 三角形 D. 椭圆形
<2>在UML对象图中,哪个符号表示对象之间的关联关系?
A. 实线 B. 虚线 C. 带箭头的线 D. 点划线
<3>在UML对象图中,多重性是如何表示的?
A. 使用数字表示 B. 使用文本描述 C. 使用图标表示 D. 不能表示
<4>在该UML对象图中,一个"Student"对象可以与多少个"Course"对象相关联?
复习题答案
<1>A
<2>A
<3>A
<4>一个"Student"对象可以与2个"Course"对象相关联。
<12>宫女: 包图**【** Package Diagram**】**
- 定义
- 包图(Package Diagram)用于描述模型中的包及其关系,展示了系统的模块化结构和包之间的依赖关系。
2.构成元素
【1】包(Package)**
包是包图的主要元素,用于组织和封装其他模型元素,如类、用例、组件、其他包等。
在包图中,包通常用一个矩形表示,矩形内部可以包含包的名称。
包中的元素可见性包括公有(public)、私有(private)和保护(protected),分别用 "+"、"-"和"#"表示。
包可以嵌套使用,表达系统模型元素的静态结构关系。
允许一个包中的元素访问另一个包中的元素,用虚线带箭头表示,箭头指向被导入的包。
【2】节点(Node)**:
- 在包图中,节点可以表示处理器或设备,类似于部署图中的节点。
【3】元素(Elements)**
- 包内可以包含各种UML模型元素,如类、用例、接口、组件、节点等。
【4】依赖关系(Dependency)**
表示两个包之间的依赖关系,即一个包的变化可能影响到另一个包。
在包图中,依赖关系用一条带箭头的虚线表示,箭头指向依赖的方向。
【5】导入关系(Import)**
- 允许一个包导入另一个包中的元素,使得导入包可以访问被导入包的元素。
【6】泛化关系(Generalization)**
表示包之间的继承关系,子包继承父包中的元素。
在包图中,泛化关系用一条带空心箭头的实线表示,箭头指向父包。
【7】 子包(Subpackage)**
包内可以包含子包,形成包的层次结构。
包可以有自己的属性,如版本信息、作者等。
包可以有自己的操作,这些操作可以应用于包内的所有元素。
复习题
<1>下列哪个是用于把元素组织成组的通用机制?
A. 类
B. 包
C. 接口
D. 组件
<2>在UML提供的图中,哪个用于描述系统与外部系统及用户之间的交互?
A. 用例图
B. 类图
C. 对象图
D. 部署图
<3>在UML中,包和包之间的关系是什么?
A. 泛化
B. 实现
C. 依赖
D. 关联
<4>包图中,包的表示方法是?
A. 用一个带有下划线的类名
B. 用一个带有双下划线的类名
C. 用一个圆圈表示
D. 用一个矩形表示
<5>在UML中,哪个图用于展示系统的静态实现视图?
A. 部署图
B. 组件图
C. 包图
D. 用例图
复习题答案
<1>B. 包
<2>A. 用例图
<3>C. 依赖
<4>D. 用一个矩形表示
<5>C. 包图
二、应用场景以及区别
- 用例图(Use Case Diagram)
- 描述系统的功能和用户(参与者)如何与这些功能交互。
- 强调系统的功能需求和用户视角。
- 类图(Class Diagram)
- 描述系统的静态结构,包括类、接口、属性、方法以及它们之间的关系。
- 强调系统的结构和类之间的关系。
- 对象图(Object Diagram)
- 展示特定时刻系统中对象的实例和它们之间的关系。
- 是类图的实例化,强调系统的动态状态。
- 状态图(State Diagram)
- 描述对象在其生命周期内的状态变化以及触发状态变化的事件。
- 强调对象的状态和行为。
- 活动图(Activity Diagram)
- 描述业务流程或操作的步骤和流程。
- 强调系统的动态行为和流程。
- 序列图(Sequence Diagram)
- 描述对象之间交互的消息顺序。
- 强调对象间通信的时间顺序。
- 通信图(Communication Diagram)
- 描述对象之间的交互和协作关系。
- 类似于序列图,但更强调对象的结构。
- 定时图(Timing Diagram)
- 描述对象状态变化和事件的时间约束。
- 强调时间因素和时序关系。
- 组件图(Component Diagram)
- 描述系统的物理结构,包括组件和它们的依赖关系。
- 强调系统的物理实现和组件化。
- 部署图(Deployment Diagram)
- 描述系统的物理部署,包括硬件和软件的分布。
- 强调系统的物理配置。
- 包图(Package Diagram)
- 描述系统的逻辑结构,包括包和类的组织。
- 强调系统的模块化和组织结构。
- 交互概览图(Interaction Overview Diagram)
- 结合不同类型的交互图,提供对复杂交互过程的整体视图。
- 强调交互的组织和概览。
三、各个类之间的关系
1.关联(Association)
举例:
++学生和课程: 一个学生可以注册多个课程,一个课程可以有多个学生注册。++
++汽车与制造商: 一辆汽车由一个制造商制造,但一个制造商可以制造多种型号的汽车。++
++书籍与作者: 一本书可以有一个或多个作者,一个作者可以写多本书。++
++医生与病人: 一个医生可以治疗多个病人,一个病人可以由多个医生治疗。++
图形最简单的 就一条实线
多重性:它可以是一对一(One-to-One)、一对多(One-to-Many)、多对多(Many-to-Many)的关系。
2.聚合(Aggregation)
举例:
++汽车与轮胎:一辆汽车由多个轮胎组成,但轮胎脱离汽车后仍可独立存在。++
++公司与部门:一个公司包含多个部门,但部门在公司解散后仍可作为一个独立的实体存在。++
++学生与学校:一个学校由多个学生组成,学生可以上过多个学校,小学初中高中大学,学校倒闭,学生不会丢掉性命,嘻嘻。++
++乐队与音乐家::一个乐队由多个音乐家组成,但音乐家离开乐队后仍可独立作为艺术家存在。++
图形是一条带有菱形的实线,菱形指向整体(指大的)
部分独立于整体存在,整体销毁不会影响部分,部分可以单独存在。
3.组合(Composition)
举例:
++人类和心脏类:心死的时候没有一个人类是无辜的。++
++电脑与CPU:死电脑,看我干烧你。电脑包含一个中央处理器,CPU是电脑的核心部件,不能独立于电脑存在。++
++机器与零件:没有零件就没有机器。机器由多个零件组成,零件是机器的组成部分,不能独立于机器存在。++
++汽车与引擎:汽车包含一个引擎,引擎是汽车不可或缺的部分,不能独立于汽车存在。++
图形:一条带有实心菱形的实线,菱形指向整体(指大的)
整体类包含多个部分类,A类和B类首先是聚合关系,A类对象和B类对象的生命周期是一致的。整体被销毁时,部分也被销毁。 部分无法单独存在。
4.泛化(Generalization)
举例:
++动物和鸟类:鸟类是动物的一种,因此鸟类继承了动物的属性和行为,如呼吸和进食,同时鸟类还有自己特有的属性,如飞行。++
++交通工具和汽车:汽车是一种交通工具,因此汽车继承了交通工具的属性和行为,如移动和停止,同时汽车还有自己特有的属性,如品牌和型号。++
++书籍和小说:小说是一种书籍,因此小说继承了书籍的属性和行为,如作者和标题,同时小说还有自己特有的属性,如情节和角色。++
图形:一条带有空心箭头的实线,箭头指向父类
A类是B类中的一种,A类继承B类
5.实现(Realization)
举例:
++门锁和可锁定接口:门锁类实现了可锁定接口,意味着门锁具有可锁定接口定义的所有行为,如锁定和解锁。++
++打印机和打印接口:激光打印机类实现了打印接口,表示激光打印机能够执行打印操作。++
++音频播放器和播放控制接口:MP3播放器类实现了播放控制接口,意味着MP3播放器具有播放、暂停和停止等控制功能。++
图形:一条带有空心箭头的虚线,箭头指向接口
实现关系表明一个类具体化了一个接口的规范,确保类提供了接口所要求的所有行为。
6.依赖(Dependency)
举例:
++咖啡制作与咖啡机:咖啡制作过程依赖于咖啡机的功能,如果咖啡机发生变化(如升级或维修),可能会影响咖啡的制作方式。++
++用户界面与数据模型:用户界面显示数据模型中的数据,如果数据模型发生变化,用户界面可能需要更新以反映这些变化。++
++餐厅订单与厨房:餐厅订单的准备依赖于厨房的工作,厨房的效率直接影响订单的完成时间。++
图形:一条带有箭头的虚线,箭头指向依赖的方向
A类对象需要调用B类对象的方法
7.友元(Friend)
举例:
++银行账户和账单打印:银行账户类管理账户的余额和交易记录,而账单打印类需要访问这些私有信息来生成账户的月度账单。在C++中,可以将账单打印声明为银行账户的友元类,使其能够访问银行账户的私有成员。++
++图形和绘图工具:图形类包含绘制自身的逻辑,而绘图工具类需要访问图形的内部数据来执行绘制操作。在C++中,可以将绘图工具声明为图形的友元类,使其能够直接访问图形的私有数据。++
图形:在UML中没有标准表示,但有时用带有"友元"标签的虚线表示。
友元(Friend)关系是一种特殊的类间关系,它允许一个类访问另一个类的私有(private)和保护(protected)成员。
其次我想说明的是,UML图一般注重的是系统整体的规划,不是具体的实现。
8.包含关系(Include)
举例:
++保存文档和备份文档:当用户执行保存操作时,除了将文档保存到指定位置外,系统还会自动进行备份。++
++取款和检查余额: 在银行账户管理系统中,用户进行取款操作时,系统首先需要检查账户余额是否充足,再根据用户需求取钱。++
图形:一条带有"<<include>>"标签的虚线
一个用例的执行必然涉及到另一个用例的执行。
9.扩展关系(Extend)
举例:
++查看商品和添加商品到购物车:不是每次查看都会添加++
++取款和打印取款凭证:不是每一次都会打印++
++提交试卷和评分:不是每次都评分,看老师,也看老师心情++
图形:一条带有"<<extend>>"标签的虚线
扩展用例是基础用例的可选扩展,它为基本用例添加了新的行为,但不是基础用例执行的必要部分。不是每次都需要执行。
补充:
降低因为依赖关系导致的耦合度:接口分离原则
A类依赖B类, B类实现C接口,A类依赖C接口
接口和接口之间的关系:泛化关系
类和接口之间的关系:实现关系
四、考试秘籍
"三长一短选最短,三短一长选最长,长短不一就选C,参差不齐就选B,如果一样就选D。"
知道吗?朋友。我只能帮你到这里了。再见。
祝你考试顺利,考的全会,蒙的全对!