软考考点之UML各种图识别

本文详细介绍了UML的各种图表类型,包括用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图和部署图。阐述了每种图的用途、特点及它们之间的差异,帮助读者全面理解UML在软件工程中的应用。

UML有哪些图:

2、如何识别:

1、用例图(UseCase Diagrams): 

    用例图主要回答了两个问题:1、是谁用软件。2、软件的功能。从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能。

用例:对系统提供的功能、服务的一种描述。

包含关系指用例可以简单地包含其他用例具有的行为,并把它所包含的用例行为作为自身行为的一部分。在UML中,包含关系是通过带箭头的虚线段加<<include>>字样来表示,箭头由基础用例(Base) 指向被包含用例(Inclusion) 。 

扩展关系在一定条件下,把新的行为加入到已有的用例中,获得的新用例叫做扩展用例(Extension) ,原有的用例叫做基础用例(Base) ,从扩展用例到基础用例的关系就是扩展关系。一个基础用例可以拥有一个或者多个扩展用例,这些扩展用例可以一起使用。

泛化关系用例的泛化指的是一个父用例可以被特化形成多个子用例,而父用例和子用例之间的关系就是泛化关系。在用例的泛化关系中,子用例继承了父用例所有的结构、行为和关系,子用例是父用例的一种特殊形式。子用例还可以添加、覆盖、改变继承的行为。在UML中,用例的泛化关系通过一个带有空心三角箭头的直线从子用例指向父用例来表示。

2、类图(Class Diagrams):重点看图里有没有泛化、聚合的符号

    用户根据用例图抽象成类,描述类的内部结构和类与类之间的关系,是一种静态结构图。 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。各种关系的强弱顺序: 泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

3、对象图(Object Diagrams):相对于类图,更深层次了一步。从名称来看就是UML中的对象概念。

    描述的是参与交互的各个对象在交互过程中某一时刻的状态。对象图可以被看作是类图在某一时刻的实例。

4、状态图(Statechart Diagrams):主体是对象及其状态转变

    是一种由状态、变迁、事件和活动组成的状态机,用来描述类的对象所有可能的状态以及时间发生时状态的转移条件。

5、活动图(Activity Diagrams):

 是状态图的一种特殊情况,这些状态大都处于活动状态。本质是一种流程图,它描述了活动到活动的控制流。    

交互图强调的是对象到对象的控制流,而活动图则强调的是从活动到活动的控制流。

活动图是一种表述过程基理、业务过程以及工作流的技术。

它可以用来对业务过程、工作流建模,也可以对用例实现甚至是程序实现来建模。

5.1 带泳道的活动图

      泳道表明每个活动是由哪些人或哪些部门负责完成。

 

5.2 带对象流的活动图

    用活动图描述某个对象时,可以把涉及到的对象放置在活动图中,并用一个依赖将其连接到进行创建、修改和撤销的动作状态或者活动状态上,对象的这种使用方法就构成了对象流。对象流用带有箭头的虚线表示。

如2016年上半年

第41题:如下所示的UML图是(41),图中(Ⅰ)表示(42),(Ⅱ)表示(43)。

A. 分叉
B. 分支
C. 合并汇合
D. 流

答:还得补充下知识,活动图中什么是分叉,分支,合并汇合,流???



 

6、序列图-时序图(Sequence Diagrams):有消息及变化  

    交互图的一种,描述了对象之间消息发送的先后顺序,强调时间顺序。

    序列图的主要用途是把用例表达的需求,转化为进一步、更加正式层次的精细表达。用例常常被细化为一个或者更多的序列图。同时序列图更有效地描述如何分配各个类的职责以及各类具有相应职责的原因

消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。 

7、协作图(Collaboration Diagrams):描述对象的组织关系

    交互图的一种,描述了收发消息的对象的组织关系,强调对象之间的合作关系。时序图按照时间顺序布图,而协作图按照空间结构布图

 

8、构件图(Component Diagrams)又叫组件图:只有依赖关系的图

    构件图是用来表示系统中构件与构件之间,类或接口与构件之间的关系图。其中,构件图之间的关系表现为依赖关系,定义的类或接口与类之间的关系表现为依赖关系或实现关系。

构件图 = 构件(Component) + 接口(Interface) + 关系(Relationship) + 端口(Port) + 连接器(Connector)

 

组件的命名:

  组件的名称有两种:简单名和路径名。并依据目标操作系统可以添加相应的扩展名,例如javadll

表示方式:组件用一个左侧带有突出两个小矩形的矩形来表示。

接口分提供接口和请求接口(近年软件考点)

  • 把构件实现的接口称为提供接口(供接口),这意味着构件的提供接口是给其它构件提供服务的。实现接口的构件支持由该接口所拥有的特征,包括接口拥有的约束。
  • 构件使用的接口被称为请求接口(需接口),即构件向其它构件请求服务时要遵循的接口

表示方式:与男女符号♂、♀一致。注:因为爱神丘比特的弓箭袋状如“♂”,女神维纳爱美,常持小镜子形似“♀”

  • 需接口用“棒棒糖”式的图形表示,即由一个封闭的圆形与一条直线组成。
  • 供接口用“插座”式的图形表示,即由一个半圆与一条直线组成。

 

9、部署图(Deployment Diagrams):

    描述了系统运行时进行处理的结点以及在结点上活动的构件的配置。强调了物理设备以及之间的连接关系。

部署模型的目的:

描述一个具体应用的主要部署结构,通过对各种硬件,在硬件中的软件以及各种连接协议的显示,可以很好的描述系统是如何部署的;平衡系统运行时的计算资源分布;可以通过连接描述组织的硬件网络结构或者是嵌入式系统等具有多种硬件和软件相关的系统运行模型。

 

二、图的差异比较

  1.序列图(时序图)VS协作图

       序列图和协作图都是交互图。二者在语义上等价,可以相互转化。但是侧重点不同:序列图侧重时间顺序,协作图侧重对象间的关系。

共同点:时序图与协作图均显示了对象间的交互。

不同点:时序图强调交互的时间次序。

           协作图强调交互的空间结构。

    2.状态图VS活动图

      状态图和活动图都是行为图。状态图侧重从行为的结果来描述,活动图侧重从行为的动作来描述。状态图描述了一个具体对象的可能状态以及他们之间的转换。在实际的项目中,活动图并不是必须的,需要满足以下条件:1、出现并行过程&行为;2、描述算法;3、跨越多个用例的活动图。

    3.活动图VS交互图

  二者都涉及到对象和他们之间传递的关系。区别在于交互图观察的是传送消息的对象,而活动图观察的是对象之间传递的消息。看似语义相同,但是他们是从不同的角度来观察整个系统的

三、UML与软件工程

  UML图是软件工程的组成部分,软件工程从宏观的角度保证了软件开发的各个过程的质量。而UML作为一种建模语言,更加有效的实现了软件工程的要求。

  如下图,在软件的各个开发阶段需要的UML图。

下表是UML使用人员图示:

<think>嗯,用户现在想了解UML的大题点及例题。之前他们问过面向对象方法的点,现在可能是在深入准备,尤其是UML部分。我需要先回忆一下中常见的UML类型和点。 首先,中的UML大题通常涉及类、用例、顺序、活动、状态等。用户可能需要知道每个的重点、符号含义以及常见题型。比如类的关系类型(继承、实现、关联、聚合、组合、依赖),用例中的参与者和用例之间的关系,顺序中的消息传递等。 接下来是例题部分。用户可能需要具体的例子来理解如何解题。比如给出一个场景,要求画出类或补充缺失的部分。例如,订单系统的类设计,或者用户登录的顺序。这些例题需要详细解析,说明每一步的思过程。 还要注意用户可能的易错点,比如混淆聚合和组合的区别,或者用例中的包含与扩展关系。在解析例题时,需要指出这些易错点,并给出解题技巧,比如如何快速识别关系类型。 另外,用户之前的问题得到了结构化的回答,分为核心点、例题解析、易错点和备策略。这次可能需要类似的结构,但专注于UML。要确保内容详细且符合试要求,比如使用正确的LaTeX格式,特别是行内公式和独立公式的区分,但UML部分可能更多是表描述,不过用户可能希望用文字详细说明。 最后,要确认回答符合用户的需求,可能他们需要的是点总结加例题分析,帮助他们在试中快速应对UML相关大题。需要确保信息准确,比如UML的符号标准,以及常见的题类型,如补充类识别设计模式对应的UML等。</think>--- ### UML大题点及例题解析 --- #### 一、核心点精要 1. **UML类型与用途** | **类型** | **核心用途** | **高频点** | |----------------|------------------------------------------|---------------------------------------------| | **类** | 描述系统静态结构(类、接口、关系) | 类关系符号(继承、关联、聚合、组合、依赖) | | **用例** | 展示系统功能与用户交互 | 参与者、用例、包含(`include`)/扩展(`extend`)关系 | | **顺序** | 描述对象间动态交互时序 | 生命线、同步消息(→)、异步消息(⇢)、返回消息 | | **活动** | 表示业务流程或算法流程 | 分支/合并、分叉/汇合、泳道划分 | | **状态** | 描述对象状态变化 | 状态迁移、事件触发条件、初始/终止状态 | | **组件** | 展示系统物理模块结构 | 组件接口、依赖关系 | 2. **类关系符号详解** - **继承(泛化)**:`◁---`(子类指向父类,如 `Dog ◁--- Animal`) - **实现**:`◁..`(类指向接口,如 `ArrayList ◁.. List`) - **关联**:`---`(双向关系,可标注角色和多重性,如 `学生 --- 课程 [1..*]`) - **聚合**:`◇---`(整体与部分可独立存在,如 `汽车 ◇--- 轮胎`) - **组合**:`◆---`(部分随整体销毁,如 `公司 ◆--- 部门`) - **依赖**:`⤙---`(临时使用,如 `订单 ⤙--- 支付服务`) 3. **用例关键概念** - **包含关系 (`include`)**:必须执行的子用例(如 `登录` ➔ `验证密码`)。 - **扩展关系 (`extend`)**:有条件触发的扩展用例(如 `支付` ➔ `使用优惠券`)。 - **泛化关系**:用例的继承(如 `普通用户登录` 和 `管理员登录` 继承自 `登录`)。 --- #### 二、典型例题与解析 **例题1(类设计)** > 设计一个“书馆管理系统”类,要求包含以下元素: > - 读者可借阅多本书籍,每本书有唯一ISBN号 > - 书籍分为普通书和参书,参书不可外借 > - 管理员负责管理书籍信息 **参设计**: ```plaintext 读者类 --- 书籍类 [借阅 0..*] 书籍类 ◁--- 普通书类 书籍类 ◁--- 参书类 管理员类 ⤙--- 书籍类 [管理] 书籍类 { -ISBN: String +借阅状态: boolean } 参书类 { +是否可借: boolean = false } ``` **解析**: - 使用继承区分普通书和参书,通过属性控制借阅权限。 - 读者与书籍的关联关系通过多重性 `0..*` 表示多对多。 - 管理员与书籍为依赖关系(操作临时调用)。 --- **例题2(顺序补充)** > 补充用户在线支付流程的顺序(缺失消息): > 1. 用户提交订单 > 2. 支付系统验证余额 > 3. 支付成功后通知订单系统 **缺失部分**: ```plaintext 用户 -> 订单系统: 提交订单() 订单系统 -> 支付系统: 发起支付() [支付系统] -> 支付系统: 验证余额() 支付系统 --> 订单系统: 支付成功() 订单系统 -> 用户: 显示结果() ``` **解析**: - 同步消息用实线箭头(→),返回消息用虚线箭头(⇢)。 - 自调用消息(如 `验证余额`)需标注在对象生命线内部。 --- **例题3(状态设计)** > 设计“订单状态”迁移,包含状态:`未支付`、`已支付`、`已发货`、`已取消`,事件包括:支付、发货、超时。 **状态设计**: ```plaintext [*] --> 未支付 未支付 --> 已支付: 支付() 未支付 --> 已取消: 超时() 已支付 --> 已发货: 发货() 已发货 --> [*] 已取消 --> [*] ``` **解析**: - 初始状态(`[*]`)指向 `未支付`,终止状态为 `[*]`。 - 状态迁移需明确触发事件(如 `支付()`)。 --- #### 三、高频易错点 1. **聚合 vs 组合** - **聚合**:空心菱形,部分可独立存在(如 `汽车 ◇--- 轮胎`)。 - **组合**:实心菱形,部分随整体销毁(如 `公司 ◆--- 部门`)。 2. **同步消息与异步消息** - **同步消息**:实线箭头(→),等待返回(如方法调用)。 - **异步消息**:半开箭头(⇢),不等待返回(如事件通知)。 3. **用例中的包含与扩展** - **包含**:必须执行的子流程(如 `登录` ➔ `验证密码`)。 - **扩展**:有条件触发的附加流程(如 `支付` ➔ `使用优惠券`)。 --- #### 四、解题技巧 1. **类关系速判** - 若部分对象生命周期依赖整体 → **组合**(如 `窗口 ◆--- 窗体`)。 - 若关系为临时使用 → **依赖**(如 `报表生成器 ⤙--- 数据库`)。 2. **顺序时间轴** - 垂直方向为时间轴,下方消息发生时间晚于上方。 - 生命线末端的 `×` 表示对象销毁。 3. **活动与状态区分** - **活动**:关注流程步骤(如订单处理流程)。 - **状态**:关注对象状态变化(如订单状态迁移)。 --- **示例:类符号速查表** | **关系** | **符号** | **示例** | |----------------|---------------|------------------------------| | 继承(泛化) | `◁---` | `Dog ◁--- Animal` | | 实现 | `◁..` | `List ◁.. ArrayList` | | 关联 | `---` | `学生 --- 课程 [0..*]` | | 聚合 | `◇---` | `汽车 ◇--- 轮胎` | | 组合 | `◆---` | `公司 ◆--- 部门` | | 依赖 | `⤙---` | `订单 ⤙--- 支付服务` | 通过针对性练习和符号记忆,可快速攻克UML大题!
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值