面向对象(二)——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五种视图

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

相关推荐
sheeta19981 小时前
Vue 前端基础笔记
前端·vue.js·笔记
哆哆啦001 小时前
obsidian远程同步方案:infiniCloud+remotely save方案
笔记·git·obsidian
咸鱼翻身小阿橙2 小时前
Qt Quick 登录界面代码学习笔记
笔记·qt·学习
Brilliantwxx2 小时前
【C++】priority_queue以及 仿函数 的学习
开发语言·c++·笔记·学习·算法
小+不通文墨2 小时前
树莓派4b-wiringpi库的安装和使用
驱动开发·经验分享·笔记·嵌入式硬件·学习
xuhaoyu_cpp_java2 小时前
SpringMVC学习(三)
java·经验分享·笔记·学习·spring
学机械的鱼鱼2 小时前
【学习笔记】XTDrone2 目录结构说明
笔记·学习
05候补工程师3 小时前
【矩阵代数】伴随矩阵、逆矩阵与秩的逻辑关系全梳理
笔记·线性代数·考研·矩阵
Hua-Jay3 小时前
OpenCV联合C++/Qt 学习笔记(十八)----二维码检测及积分图像
c++·笔记·qt·opencv·学习