面向对象(二)——UML基础

一、UML定义

UML统一建模语言(Unified Modeling Language)的缩写。

它的标准定义是:一种用于给面向对象软件进行可视化、详述、构造和文档化的图形化语言。

  • 特点:不是程序设计语言,而是用于描述、可视化、构造和文档化软件系统的语言。

  • 组成要素

    1. 基本构造块:事物、关系

    2. :将构造块组织成可视化表示

    3. 公用机制:贯穿整个语言的规则和公共机制

二、事物

UML 中的事物是构成模型的基本元素,分为 4 大类。

1. 结构事物

定义 :UML模型中的"名词",是模型的静态部分,描述概念或物理元素。

包括 :类、接口、协作、用例、主动类、构件、制品、结点

2. 行为事物

定义 :UML模型的动态部分 ,是模型中的"动词",描述跨越时间和空间的行为。

包括:交互、状态机、活动

3. 分组事物

定义 :UML模型的组织部分 ,是由模型分解成的"盒子"。 是最主要的分组事物。

特点

  • 把元素组织成组的机制

  • 结构事物、行为事物、其他分组事物都可放入包内

  • 包是概念上的(仅在开发时存在),不同于构件(运行时存在)

4. 注释事物

定义 :UML模型的解释部分,用来描述、说明和标注模型的任何元素。

特点:依附于一个元素或一组元素之上,对其进行约束或解释的简单符号

三、关系

UML 主要有 4 种核心关系,依赖、关联、泛化和实现。

1. 依赖(Dependency)

定义 :一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义。

例子

  • OrderService 依赖 OrderDAO:OrderService调用OrderDAO的save()方法,如果OrderDAO改了,OrderService也要改

  • 人 依赖 手机:人需要手机打电话,但手机不是人的一部分,只是临时使用

2. 关联(Association)

1.普通关联

定义 :一种结构关系,描述对象之间的连接(一组链接)。

例子

  • 学生 和 课程:一个学生可以选多门课,一门课可以有多个学生

  • 人 和 身份证:一个人对应一张身份证(1对1)

2.聚集(Aggregation)(弱包含)

  • 描述整体和部分的结构关系

  • 整体和部分生命周期不一致 :整体消失,部分仍然存在

例子

  • 公司 和 部门:公司倒闭了,部门可以换个公司继续存在

3. 组合(Composition)(强包含)

整体和部分的生命周期一致 :整体消失,部分也消失,部分不可以脱离整体存在。

例子

  • 订单 和 订单项:订单删除后,订单项一定跟着删除

  • 房子 和 房间:房子拆了,房间也就不存在了

关系 生命周期 例子
聚集(弱包含) 不一致 公司 → 部门
组合(强包含) 一致 订单 → 订单项

3. 泛化(Generalization)

定义 :特殊/一般关系,子元素的对象可替代父元素的对象,子元素共享父元素的结构和行为。

例子

  • 猫 泛化 动物:猫继承动物的属性和方法(年龄、名字、吃东西)

  • 学生 泛化 人:学生自动拥有人的姓名、年龄属性

4. 实现(Realization)

定义:一个类元指定了由另一个类元保证执行的契约。使用场景:

  • 接口 和 实现它们的类或构件

  • 用例 和 实现它们的协作

例子

  • ArrayList 实现 List 接口:ArrayList 必须实现 add()、get()、size() 等方法

  • MySQLDriver 实现 JDBC 接口:MySQLDriver必须实现connect()、execute()等方

四、UML中的图

UML 2.0定义了13种图 ,分为结构图(静态)行为图(动态)

1.结构图(静态视图)

1.类图

2.对象图

3.构件图

构件之间的组织和依赖关系,关注静态实现视图。

4.部署图

描述物理节点与构件的配置

2.行为图(动态视图)

1.用例图

包含关系(《include》):一个用例包含另一个用例。

扩展关系(《extend》):一个用例执行的时候,可能会发生一些特殊的情况或可选的情况,这种情况解释这个用例的扩展用例。

泛化关系:父类与子类的关系。

2.顺序图

3.活动图

4.状态图

五、UML五种视图

从不同角度描述同一系统:

相关推荐
LinXunFeng3 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
闪闪发亮的小星星7 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq8 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
阿米亚波8 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
自传.8 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding
.千余8 天前
【C++】模板进阶全解:非类型参数|全特化|偏特化|分离编译完全指南
开发语言·c++·笔记·学习·其他
自传.8 天前
尚硅谷 Vibe Coding|第二章 AI编程工具生态 学习笔记
笔记·学习·ai编程·尚硅谷·vibe coding
秋波。未央8 天前
Java Agent 开发 · Day 1 学习笔记(含作业完整标准答案)
java·笔记·学习
中屹指纹浏览器8 天前
2026指纹浏览器字体指纹、字体渲染偏差检测与全维度虚拟字体池搭建方案
经验分享·笔记