UML核心概念与关系全解析
一、习题知识梳理
1、UML的4种事物分类
结构事物:模型的静态骨架(类、组件、节点等)。
行为事物:模型的动态部分(交互、状态机、活动)。
分组事物:用于组织模型(包)。
注释事物:用于说明和约束(注释)。
2、用例图
核心概念:系统功能的抽象,通过场景(Scenario)来描述具体的交互步骤。
3、泛化关系:
描述了一般事物与特殊事物之间的继承关系,即 “is-a” 关系。接口和实现类之间是实现关系,类之间的静态连接是关联关系。
4、UML4种核心关系
泛化:空心三角实线,指向父类 / 接口。
依赖:虚线箭头,指向被依赖者。
关联:实线,类之间的结构化连接。
实现:空心三角虚线,指向接口。
5、做题时涉及到的概念
关联关系它描述了类之间的结构化联系,是最常见的类间关系。
接口和实现该接口的类之间的关系是实现关系
对象图属于结构图(静态图),用于展示某一时刻类的实例(对象)及它们之间的链接。类图、组件图、顺序图均为 UML 标准结构图 / 行为图。
组合结构图是 UML 2.0 新增的图,用于描述复杂元素(如类 / 组件)的内部内部结构及协作关系。类图、交互概览图、时序图均为 UML 2.0 规范内的图种。
UML 的扩展机制包括构造型、标记值、约束。构造块是 UML 的核心组成元素(如类、关系),并非扩展机制。
标记值用于为元素添加特性信息(如版本、作者、属性)。构造型扩展语义,约束限定规则,注释是独立元素。
UML 由构造块(事物、关系、图)、公共机制和规则三部分组成。
行为图(如序列图、状态机图)专注于描述系统随时间的动态行为和对象交互,即模型的动态部分。(行为图的定义)
关系的作用:用于建立元素之间的语义联系。
UML 是一种图形化的建模语言,其符号仅表达语义,不依赖于绘制的大小和位置。(UML的语义规则)
UML 中的约束(Constraint)通常使用花括号 { } 内的文本来表示,例如 {只读}、{长度 > 0}。(约束的表示法)
6、UML的扩展机制:
构造型(<<>>):扩展元素语义。
标记值({tag=value}):添加元数据属性。
约束({ }):限定语义规则。
7、UML 4+1 视图模型
逻辑视图:系统功能设计(类图、对象图)。
开发视图:代码与组件组织(组件图)。
进程视图:并发与通信(序列图、通信图)。
物理视图:硬件部署(部署图)。
用例视图:需求驱动。
二、软件工程及其面向方法
1、软件危机
进度、成本、质量
2、软件工程目标
进度控制、成本控制、质量控制
3、面向对象概念
一种运用一系列面向对象的指导软件构造的概念和原则(如类、对象、抽象、封装、继承、多态等)来构造软件系统的开发方法。
4、面向过程------步骤化
分析出实现需求所需要的步骤,通过函数(方法)一步一步实现这些步骤,接着依次调用。
5、面向对象------行为化
把整个需求按照特点、功能划分,将存在共性的部分封装成类 (类实例化后是对象),创建对象不是为了完成某一个步骤,而 是描述某个事物在解决问题的步骤中的行为。
6、面向对象-------对象
◼自治性:独立处理问题
◼ 封闭性:外部对象只能发送消息对其施加影响,无法直接对对象修改
◼ 通信性:与其他对象通信
◼ 被动性:存在和状态转换由外界驱动,接收到外界消息后才进行某种转换
7、面向对象-------类
◼拥有共同的结构、行为和语义的一组对象,一组对象的公共属 性和公共行为。类也具有属性、操作和标识符。
◼面向对象程序中的构造单位,面向对象程序设计语言的基本成分
8、面向对象------抽象
◼去除不重要的细节,揭示一个事物的本质特征。
◼抽象取决于使用者的目的,同一实体在不同场景中可有不同抽象。
9、面相对象-------封装
◼ 隐藏对象的属性和实现细节,仅对外公开接口,并控制在程序中属性的 读和修改的访问级别。 ◼ 封装强调两个概念,封闭和独立。
10、面向对象--------泛化
◼ 一般描述和具体描述之间的关系,具体描述在一般描述基础上对其进行了扩展。
◼ 实现泛化关系的机制为继承。一个子类继承一个父类,就实现两者之间的泛化关系。
11、面向对象-------多态
◼ 多态是在同一接口下表现多种行为的能力。
◼ 多态允许不同类的对象对同一消息做出不同响应。
◼ 当一个对象接收到进行某项操作的消息时,多态机制将根据对象所属的类,动态地选用该类中定义的操作。
三、统一建模语言UML
1、UML特点
UML用来捕获系统静态结构(对象间的属性和方法,对象 间的关系)和动态行为(对象在不同时间、状态下的变 化以及对象间的相互通信)的信息。
UML是独立于过程的,它适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以各种开发工具。
UML不是一种程序设计语言,可以使用代码生成器将UML模型转换为多种程序设计语言代码,或者使用逆向工程将程序代码转换为UML。
四、初识UML
1、构造块
构造块指的是UML的基本建模元素,是现实世界中的概念的抽象描述方法。
2、事物
对模型中关键元素的抽象体现
事物的分类:结构事物(UML模型的静态部分)、行为事物(是UML模型的动态部分,即静态元素之间产生的时间和空间上的行为动作)、分组事物(是UML模型的组织部分,是用来组织系统设计的事物。)、注释事物(是UML模型的解释部分,用来描述、说明和标注模型的元素。)
3、关系
事务和事务间联系的方式
关系的分类:关联关系(指一种对象和另一种对象之间存在联系)、依赖关系(如一个元素的某些特性随另一个独立元素的特性的改变而改变)、泛化关系(描述特殊到一般的关系)、实现关系(描述特殊到一般的关系)
4、图
相关的事务及其关系的聚合表现
结构图:捕获事物与事物之间的静态关系。
行为图:捕获事物的交互过程的动态行为。
5、通用机制
规格说明:UML的规格说明用来对系统的细节进行描述,确定系统的更多性质
修饰:对规格说明的基本符号添加一些独特性的修饰(对类名添加斜体修饰表明这是一个抽象类;公有性(public)的操作,保护性(protected)的操作,私有性(private)的操作)
扩展机制:为了扩充描述能力定义的通用性扩展
UML的三种扩展机制:构造型、标记值、约束。
6、4+1架构
在“4+1”视图模型中,软件开发者从五个不同视角描述软件体系结构的一组视图模型。
逻辑视图:
➢将系统功能进行分解,负责反映出系统内部是如何组织和协
作来实现功能的。
➢ 通过揭示类、对象、类与对象之间的静态关系,以及对象之
间如何交互的动态行为来展示各个对象如何实现系统功能.
➢ 逻辑视图主要对应UML的类图。
开发视图:
➢ 面向开发人员,描述软件的各个模块的组织方式,主要考虑软 件编程时的需求,例如模块编写是否容易,是否可以重用,哪 些成熟的框架可以应用。
➢ 由于其描述了静态的软件组织结构,一般对应UML中的组件图。
进程视图:
➢ 描述系统的运行特性,关注进程、线程、对象、并发、同步、通信等运行时概念。
➢ 为逻辑视图中类的具体操作指定进程或线程,并对运行时单元之间的交互加以规划。
➢ 在UML中运行时一般采用状态机图、交互图和活动图完成。
物理视图:
➢描述硬件配置,强调系统的安装、配置、通信、拓扑结构等问题。
➢将软件系统映射到指定的硬件设备上,保证不同的硬件环境给软件性能带来的影响最小,或让物理配置的性能和稳定性达到最高。
➢UML中的部署图基本可以实现物理视图中涉及的部分。
场景视图:
➢ 从项目需求入手,将四个视图结合为一个整体。四个视图中的元素需要协同工作以实现场景视图中给出的用例,它是距离用户需求最近的视图,是软件开发中重要的驱动要素(用例驱动)。
➢ UML中的场景视图主要指用例图。
五、类图
1、概念
通过系统中的类以及个各类之间的关系来描述系统的静态接口(类图主要包含的7种元素:类、接口、依赖关系、泛化关系、实现关系、关联关系)
2、类名
类名应来自系统问题域,从系统词汇表中提取明确而无歧义的名词或名词短语。
类名必须是合法标识符(字母、数字、下划线,不能数字开头)
命名规范:大驼峰命名法(每个单词首字母大写)
类名是唯一标识,同一作用域不能重复定义
3、属性
实例属性:每个对象自己的,用 self.xxx;类属性:所有对象共享,直接写在类里;私有属性:__xxx,外部不能直接访问;属性就是类 / 对象里的变量。
4、操作
类能做的具体动作 / 函数,对外暴露或内部私有行为。
5、职责
这个类该负责什么、不该管什么(单一职责原则核心),是业务定位,不写在 UML 图形里,是设计说明。
原则:一个类只干一件核心事
举例:
用户类职责:只管理用户信息、登录认证
订单类职责:只管订单创建、付款、状态变更
❌错误:用户类里写「计算运费、生成发票」(越权)
6、接口
是一个被命名的操作集合(不包含属性与方法;所有内容都是公有的;可支持多个接口)。
一套规范 / 契约,只声明操作,不写实现;类去「实现接口」遵守契约。
六、绘制类图
(类图中的关系:关联关系(特殊关系:聚合关系与组合关系)、泛化关系(单继承、多继承)、依赖关系、实现关系)
1、关联关系:类与类之间长期、稳定的引用关系(比如师生、订单 - 用户),是最通用的关系。
连线:实线,可标多重度(1 对 1、1 对多、多对多)
多重度举例:
1:唯一
*:多个
0..*:0 个或多个
(1)聚合(Aggregation,空心菱形)
弱整体 - 部分,生命周期独立
符号:整体端画空心菱形 + 实线
特点:
整体没了,部分还能独立存在;部分可被多个整体共享。
例子:
班级 ↋ 空心菱形→学生
班级解散,学生依然存在,可加入别的班级。
(2)组合 / 合成(Composition,实心菱形)
强整体 - 部分,生命周期绑定
符号:整体端画实心菱形 + 实线
特点:
整体销毁,部分必须一起销毁;部分专属当前整体,不能共享。
例子:
人体 ↋ 实心菱形→心脏 / 大脑
人没了,心脏就失效,不能拆给别人用。
极简口诀:空心聚合可分家,实心组合生死随
2、泛化关系:父子类继承关系,子类复用父类属性 / 方法。
符号:实线 + 空心三角箭头(箭头指向父类)。
分类
单继承:一个子类只继承一个父类(Java/C# 默认支持)
多继承:一个子类同时继承多个父类(C++ 支持,Java 用接口替代规避)
例子
动物 ←泛化← 狗、猫;
学生 ←泛化← 本科生、研究生
语义:子类是一种父类(is-a)
3、依赖关系:临时、偶然的使用关系,用完就断。
符号:虚线 + 普通箭头
例子
司机 依赖 汽车:司机开车时临时用汽车,不开车就没关系;
工具类调用、临时数据校验都属于依赖。
语义:临时用到(use-a)
4、实现关系:类实现接口的契约关系,接口定规范,类写具体代码。
符号:虚线 + 空心三角箭头(箭头指向接口)。
例子 接口:支付 → 实现类:微信支付、支付宝支付
语义:类遵守接口规范(like-a /abide-a)
七、类图的建模技术
1、面向对象的设计原则----开闭原则
软件实体(类、模块、函数等)对扩展开放,对修改关闭。
通俗来说:新增功能时,优先通过「扩展代码(新增子类 / 实现类)」实现,禁止直接修改已稳定运行的核心代码,避免引入新 bug,提升系统可维护性。
速记口诀:
扩能不加改,新加不碰旧;
抽象定规矩,多态来出头。
2、面向对象的设计原则----里氏替换原则
所有使用父类对象的地方,都可以透明地替换为子类对象,且程序逻辑完全正确。
它是继承复用的基石,要求子类严格遵守父类的行为约定,不能破坏父类的逻辑。
核心要点
子类可以扩展父类功能,但不能改变父类原有的功能
子类不能重写父类的非抽象方法,避免破坏继承体系的一致性
子类实现父类的抽象方法时,输入条件可以更宽松,输出结果可以更严格
3、面向对象的设计原则----接口分离原则
使用多个专门的小接口,比使用一个臃肿的总接口更好。
禁止让一个类依赖它不需要的接口方法,避免接口污染,降低耦合度。
核心要点
接口要单一职责,只包含某一类特定的方法
避免设计「万能接口」,防止实现类被迫实现无用的空方法
提升代码的灵活性和可维护性,修改接口时只影响相关实现类
| 原则 | 核心目标 | 解决的问题 |
|---|---|---|
| 开闭原则 | 系统可扩展、易维护 | 避免修改旧代码引入 bug |
| 里氏替换原则 | 保证继承体系的健壮性 | 避免子类破坏父类逻辑 |
| 接口分离原则 | 降低系统耦合度 | 避免接口臃肿、依赖无用方法 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)