--- title: "02-uml" created: 2026-01-13 tags: - 博客 --- # uml ## 题型 4种题型 选择10题 1分一题 10 填空10题 2分一题 30 判断10题 1分一题 40 简答 3题 5分一道 55 画图 3题 15分一道 100 ## 选填判 ### 前置概念 软件工程的概念是在1968年被首次提出的 在UML出现之前 James Rumbaugh 和 Gady Booch的合并OMT 和Booch工作成果被成为UM0,8 UML全称为:Unified Modeling Language 1977年 UML1.1规范被OMG全体成员通过,正式被采纳为规范 UML2,0规范是在2005年通过的 **UML主要应用与 基于对象的面向对象的方法** 这些题看看就好 留个映像即可 ![[image-d570f271.png]] ![[image-87fdd6c6.png]] ![[image-c050426b.png]] ![[image-df6cd047.png]] ### 构造块 构造块是UML的基本建模元素 分为 事物、关系、图 事物里分为 构造事物(结构事物)、行为事物(动作事物)、分组事物(组织事物)、注释事物 关系分为:关联、依赖、泛化、实现 图:十个 #### 事物 事物里分为 构造事物(结构事物)、行为事物(动作事物)、分组事物(组织事物)、注释事物 ![[image-949da0f0.png]] 结构事物分为 类、接口 协作、用例、组件、节点 行为事物分为 交互 状态机 活动 分组事物 主要是 包(可拓展出系统、层) 注释事物 主要是 注解 可以简单理解成 UML中静态的元素为结构事物 动态的元素为行为事物 对系统进行分层管理的 是分组事物 也就是包结构 注释事物显而易见就是注释 解释说明 ![[image-3f2584a3.png]] ![[image-c6c0797a.png]] (这题很可能考 出现两次) #### 关系 四大关系:关联、依赖、泛化、实现 关联: 强关联:聚合 组合(强) 普通关联:单项关联 双向关联 (树和树叶是组合关系 树叶如果离开了树本身就没意义了 而教室和桌子 属于是聚合关系 桌子离开这个教室仍有意义) 依赖: 分为包含和拓展 在包图里还涉及到导入 泛化: 在类图和用例图里面有 可以简单理解为继承多态这种关系 表示一般事物与特殊事物之间的关系 实现: 接口实现 最弱的关系:依赖 最强的关系:组合 #### 图 一共有10种图 用例图:大概理解为 表示系统中角色所能执行的操作(用例)的图 这些操作之间存在泛化(继承)、依赖(分为包含和扩展)的关系 类图:系统中有哪些类 它们之间的关系是什么 用类图来表示 与sql建表语句对应 这里也存在泛化关系(用户分为普通、vip……) 另外还有依赖、关联(聚合、组合【更强】)(单项、双向)、实现(接口实现) 对象图:没啥用 不用管 包图:即系统所需的依赖包间的关系 顺序图:丰富用例的表达 纵向为时间 横向为对象 (对象间的消息传递 与时间关系较大) 通信图:与顺序图孪生 可以相互转化 通信图强调交互 顺序图强调时间 状态机图:类中对象的状态变化 只涉及单个对象 不涉及其他对象 强调同一对象在不同时期的状态 活动图:表达系统中的业务流程 如执行登录操作后 在系统中经过的流程 组件图:组件与组件间的关系 部署图:系统如何部署 组成元素:节点(设备节点、服务器节点)、连接 ![[image-4dd6f20f.png]] 一些加深理解的小问题: 区别结构图和行为图:(理解为静态动态) 结构图有:类图、对象图、包图、组件图、部署图 行为图有:用例图、顺序图、通信图、状态机图、活动图 涉及到泛化的有:用例图、类图 对用例进行丰富描述的图(丰富用例的表达):顺序图 活动图也可以表示业务相关流程 状态机图表示一定的范围(同一对象在不同时期的) 而顺序图(从一个对象到另外一个对象) ![[image-62d579bb.png]] 顺序图和通信图孪生兄弟 表达的语义相同 主要元素相同 对象责任相同 组成元素不太同(通信图少了生命线 消息的创建和销毁) 适用范围: 强调时间的先后顺序:顺序图 强调对象的交互:通信图 用的更多的是顺序图 就这俩是交互图 ![[image-184d6c83.png]] 什么图里有泳道:活动图 (让每个活动不会出现跨越的情况 ) 泳道作用:分区并发 ![[image-17bd04a7.png]] ### 通用机制与4+1架构 uml通用机制:规格说明、修饰、通用划分、uml扩展机制 通用划分里分为:类型-实例 接口-实现 扩展机制分为:构造型、标记值、约束(使用{ }) ![[image-08e2e651.png]] ![[image-0e4dfd3f.png]] 4+1架构分为五个视图:逻辑视图、开发视图、进程视图、物理视图、场景视图 其中场景视图是核心视图 开发视图用于描述软件的各个模块的组织方式 场景视图将四个视图结合为一个整体 记住这两句话 可能考开发视图和场景视图的区别 下面把每个图的重点内容整理出来 ### 用例图 ![[image-9e970bd4.png]] ![[image-dced97ec.png]] 用于表示 系统中 各个用户能执行哪些操作 ”操作“用书上的话来说就是用例 ”用户“是参与者 也就是表示 参与者与用例之间的关系 主要元素有:参与者 用例 关系 主要关系有:关联 依赖 泛化 怎么理解呢 用户可以泛化出普通用户、vip用户 用例(操作)自然存在继承多态也就是泛化 这是泛化 关联就更好理解了 既然是用例图 表示用户与用例之间的关系 用户能执行哪些用例 这里自然存在关联关系 但是关联关系仅存在与参与者与用例之间 用例与用例之间是不存在关联关系的 主要考点在于依赖 依赖分为两种 一个是包含 另一个是拓展 拓展是对基用例的拓展 作用是增强基用例 箭头: 包含(《include》):基用例指向被包含的用例 扩展(《extend》):扩展用例指向基用例 因为都是依赖关系, 所以都是虚线加箭头 四大关系占了仨 没有实现关系 实现关系出现的比较少 一般都是对应接口 **一些注意点:** 参与者: 参与者不一定是人 也可以是子系统等与系统有关的事物 (其实本质就是调用关系 如果子系统或其他系统需要调用本系统的用例 它就可以被称为参与者 ) 参与者位于系统边界外 并不是系统的一部分 (系统即程序 用户怎么可能是系统的一部分) 参与者并非某一特定对象 而是某类对象 (用户肯定不止一个咯) 箭头: 参与者指向用例 表示启动关系 基用例指向包含用例 表示包含关系 (我包含了你 所以我指向你) 扩展用例指向基用例 表示扩展关系 (我由你扩展而来 所以我指向你) 关联关系 不存在于用例与用例之间 包含关系还有一个注意点就是 基用例执行了 包含用例也一定执行 (加入购物车一定要先浏览吧 那我加入了购物车 就意味着一定也执行了一次浏览商品) ### 类图 ![[image-821a3850.png]] ![[image-6f8b0d98.png]] 系统中有哪些类和接口 他们之间的关系如何 与建表sql有很大关联 主要元素:类、接口、协作、关系 主要关系:关联、依赖、泛化、实现 四大关系都占了 类与类之间肯定是有继承多态的关系的 person类、教师类、学生类 所以四大关系中的泛化这里肯定是有的 类和类之间 如果按设计角度来说 为了解耦 是最好不要出现依赖关系的 但是理论上是可以存在依赖关系的 类里面涉及到接口 嗯 接口对应实现 类图里面有实现关系 重点是 关联关系 因为分库分表设计 表与表 类与类之间自然需要研究这些比较精细复杂的关系 最常见的就是什么一对多多对多 外键…… 前面有提到 关联 分为: 普通关联:单项关联 双向关联 强关联:聚合 组合(强) 其实考点应该主要就在关联关系上面 一些注意点: 这个主要是画图题 上面的一些细节 类中属性的符号表示: public + private - protected # 对于一对多联系 一的一端画1 多的一端画 1..n (或者 1..\* 0..\* 0..n 都行) 面向对象的设计原则 (有个映像即可): 开闭原则、里氏替换原则、依赖倒置原则、接口分离原则、单一职责原则 里氏替换原则:子类可以完全替换父类 类图属于静态图 接口有两种表示方式: ![[image-672c27cf.png]] 在UML中 当接口使用小圆圈表示时,该接口与其他类的实现关系可以简化为一条实线段 A:B A是对象 B是类 ### 对象图 ![[image-8deb6efe.png]] ![[image-2f8531ac.png]] 类new对象 与类图比较类似 其实就是去除了类里面复杂的关联关系的多重性 (链没有多重性) 记住两句话 对象图是类图的实例 链是关联关系的实例 每个对象图只是系统的静态设计视图或静态交互视图的图形表示 (√) (不是很理解 记吧) ### 包图 ![[image-8b1d883d.png]] 与组织(分组)事物关系较大 系统的结构其实都是由包来组织构建的 系统需要用到哪些依赖 依赖与依赖之间的关系 文件之间的关系 由包图来组织维护 这里就不可避免涉及到 命名空间类似的概念 即 同一个文件不能出现在两个包中 同一个包里不能有两个同名文件 在包元素之间 存在的关系 只有依赖关系 B包依赖于A包 其实就是 B里面import了A 在B里可以访问A的public元素 包内元素的可见性表示同一个包内的其他元素对该元素的访问权限 (×) (包内的元素无论是什么可见性都能使用 可见性只是对于其他引用它的包而言) 包中可见性修饰为public的元素表示这些元素可以被项目中的所有包无条件的访问(×) (你首先得引入吧) ### 顺序图 顺序图的组成元素: ![[image-68e8845f.png]] 组成元素:对象 生命线 激活(控制焦点) 消息 横向是对象 纵向是时间 ![[image-26aa7850.png]] ![[image-95c45257.png]] 顺序图的关键就是 时间 体现在生命线 顺序图中的所有对象在程序一开始运行的时候,其生命线都必须存在(×) (只有激活了才) 消息是以时间顺序排列的 顺序图中对象的生命线一定会贯穿整个交互过程 (×) (单个对象不一定贯穿 可能一半就没用了) 所有对象的生命线一定会被一个销毁标记所结束 (×) (只有最后一个有销毁标记) 激活表示在这一时间段内对象正在完成某项任务 (√) 顺序图可以表示消息发送的事件顺序,却无法量化地表示出消息发送的具体时间(√) (不知道具体哪时发的 但知顺序) 消息: (考难点其实就是同步异步) 每条消息一定关联着至少两个不同的对象,即消息的发送者和接收者 (×) (可以自发 发送接收都是自己) 信号就是调用类的操作(×) (1.传递消息、2.调用类) 阻塞和超时消息: 阻塞消息主要在同步中 需要等另一个完成才能继续 这种暂停等待称为阻塞 若一个消息发送后接收者无法在指定时间内接收,则发送者放弃该消息,这种叫做超时消息 返回消息:用虚线加箭头 与依赖相似 从左边参与者发出的话 一般不会出现返回消息 从右往左才可能出现返回 同步信息与异步消息: ![[image-68c28f7a.png]] ### 通信图 ![[image-1f8f9c8e.png]] 与顺序图通常一起出现 两者可以转换 他们表达的语义相同 主要元素相同 对象责任相同 只有组成元素不太同(通信图少了生命线 消息的创建和销毁) 另外要注意区分的是 顺序图 强调时间的先后顺序 而通信图舍弃了时间的概念 重视交互 只有顺序图和通信图 是 交互图 另外通信图里是用对象来讨论的 所以会用到对象图里面的一些概念 比如“链“ 通信图里出现时间(生命线)概念的判断题 直接打错就行 ### 状态机图 ![[image-9f351d06.png]] 主要考画图 注意点: 表示一定的范围(同一对象在不同时期的变化) 研究的是单个对象 A[B]/C 第一个参数为触发器事件 括号中为监护条件 斜杠后为效果列表 ![[image-376b7c27.png]] 是行为图(动态) 研究的是对象 而不是类 一个状态机图只能有一个初态 (×) (复合 也就是嵌套的话 可以有多个) 历史状态就是状态机中该状态的前一状态(×) (最后一个子状态) ![[image-2bede278.png]] (可能考 留个心眼) ### 活动图 ![[image-b6880129.png]] 即某个操作在系统中要经过哪些模块 在这些模块中的执行流程是怎么样的 所以涉及业务逻辑 活动图中的元素:动作和活动节点 开始与终止 控制流 判断节点 合并节点 泳道 分叉结合节点 对象流 扩展区域 分叉节点和结合节点一般成对出现 判断节点和合并节点对应 但不一定成对出现 用于连接动作或节点 表示活动进行方向的元素是 控制流 一个导入流两个导出流 重点:泳道 对元素按照负责对象分组 一个活动不能属于多个泳道 开始标记只有一个 结束标记可以是0到多个 ### 组件图 组件图的组成元素: 组件、接口、端口、组件的内部结构 ![[image-f1068c6b.png]] 接口有两种表示法 圆圈表示法: ![[image-0b546149.png]] 球窝表示法: ![[image-ec51e6d8.png]] 含义相同 仅表示不同 组件与组件间表现为依赖关系 接口与实现类间为实现关系 ![[image-2d7434a4.png]] (这题可能考) 组件比类的抽象层次要高 类应该从属于某个组件 接口是组件图中语义最小的元素 ### 部署图 系统应该如何部署 一个系统对应一个部署图 如果系统可以单机部署 则可以无需设计部署图 ![[image-3cf12bd1.png]] 出现两次 应该会考 涉及到什么语义完全相同…… 只有顺序图和通信图语义完全相同 其他提到这个概念直接打错 ### RUP RUP是统一软件开发过程 有四个阶段:起始阶段 细化阶段 构建阶段 转化阶段 九个工作流 ![[image-b9fdab73.png]] ![[复习笔记_Sheet1-b1703bca.png]] ## 简答 ### 简述面向对象技术的概念。 面向对象技术以类和对象作为核心,并存在着很多与之相关的原则。 (1)对象:对象是面向对象技术的基本单位,表示现实世界中的实体。每个对象有自己的属性(数据)和方法(操作),属性定义了对象的状态,而方法定义了对象可以执行的操作。 (2)类:对象是存在某个时空的具体实体,而类则是拥有共同的结构、行为、语义的一组对象的抽象。 (3)抽象:抽象就是揭示一个事物区别于其它事物的本质特征,去除从某一个角度看来不重要的细节的行为。 (4)封装:即对其客户隐藏对象的属性和实现细节,仅对外公开接口,并控制在程序中属性的读和修改的访问级别。 (5)泛化:泛化是类元的一般描述和具体描述之间的关系,具体描述建立在一般描述的基础上,并对其进行了扩展。 (6)多态:多态是在同一接口下表现多种行为的能力,是面向对象技术的根本特征。 ### 用例之间的3种关系是什么?各使用在什么场景? (1)用例之间的泛化关系 将特化的用例与一般的用例联系起来,子用例继承了父用例的属性、操作和行为序列。 场景:适用于描述不同用例之间的继承关系,当某些用例具有共同的功能和行为时,可以通过泛化关系来进行抽象,避免冗余的描述。 (2)用例之间的包含关系:一个用例(基用例)可以包含其他用例(包含用例)具体的行为。基用例一定会要求 场景:适用于一个用例的行为是另一个用例的一部分,并且每次执行时都需要执行该部分功能。包含用例执行。 (3)用例之间的扩展关系:指一个用例(扩展用例)对另一个用例(基用例)行为的增强。 场景:适用于某个用例的行为在特定条件下才会发生扩展。扩展用例通常是可选的,只有在特定条件满足时才会触发。 (泛化和依赖 依赖又分为包含和扩展) ### 顺序图中的消息按其并发性可以分为哪两种?这两种消息的发送和接收过程怎样表现? 同步消息:同步消息指的是发送方在发送消息后,必须等待接收方处理完消息并返回响应之后,才能继续执行后续操作。 表现形式:同步消息使用带有实心箭头的直线表示,并在消息线上注明消息名称。 异步消息:异步消息指的是发送方在发送消息后,无需等待接收方的响应,可以立即继续执行后续操作。 表现形式:异步消息使用带半个箭头的直线表示,并在消息线上注明消息名称。 ## 画图 ### 类图 设计一个在线书店系统,本系统中将用户分为两个类:管理员、顾客,该系统需满足的核心功能如下: (1)图书浏览:顾客可以浏览图书列表,查看图书详情; (2)购物车管理:顾客可以添加图书到购物车,修改购物车中的图书数量,或从购物车中移除图书; (3)订单处理:顾客可以提交订单,查看订单历史; (4)图书管理:管理员可以添加、删除和编辑图书信息。 试根据上述说明,分析出该系统所包括的类,绘制出类图。 ![[image-0786d65b.png]] ### 活动图 在图书借阅系统中,关于管理员删除读者信息的流程如下: (1)查找读者信息:管理员需要登陆系统,输入待删除读者姓名; (2)判断读者是否存在:输入待删除读者姓名后,先由业务逻辑组件进行判断。如果读者存在,业务逻辑组件进行下一步操作。如果读者不存在,则显示出错信息; (3)判断读者是否能够删除:确定读者信息存在后,业务逻辑组件对进行“删除读者”,如果读者消息可以被删除,流程流转至数据库,并显示删除成功信息。如果读者信息不可以被删除,则显示出错信息。 试根据上述说明,绘制该系统相应的活动图。 ![[image-ec6ca30b.png]] ### 状态图 现有一款全自动洗衣机,具体功能如下: (1)开机时,会进入“待机”状态,可以设置洗衣模式以及水量,触发启动按钮后,会进入“工作中”状态; (2)进入“工作中”状态后,有“加水”、“清洗”、“排水”、“甩干”四个功能。洗衣机会从“加水”开始执行,依次进行“清洗”和“排水”操作,排水完成后,根据清洗次数是否达标,执行“加水”或“甩干”操作; (3)洗衣机在“工作中”时,无论在进行什么操作,当按下暂停键时,会进入“暂停状态”,再按一次暂停键将继续工作。 试根据上述说明,绘制该系统相应的状态机图。 ![[image-e149d860.png]]