UML

UML整体类型

随着软件带来的价值增加,寻找自动化软件生产技术,来提高软件质量,减少成本和提高开发效率。自动化生产软件技术包含有组件化,可视化编程,模式和框架。

同时,也在寻找管理复杂系统的技术。特别是,需要解决反复出现的体系结构问题,例如物理分布、并发性、安全性、负载平衡和容错。统一建模语言(UML)被设计用来解决这些需求。

统一建模语言(UML)是一种通用的可视化建模语言,旨在提供一种标准的方法来可视化系统的设计。

UML是开发面向对象软件和软件开发过程中非常重要的组成部分。使用UML可以帮助项目团队进行交流,探索潜在的设计,并验证软件的体系结构设计。

UML为许多类型的图提供了一种标准符号,这些图可以大致分为三大类:行为图、交互图和结构图。

类图

类图是一种静态结构图,通过显示系统的类、它们的属性、操作(或方法)以及类之间的关系来描述系统的结构。

类符号

一个class包含三部分:

  1. class名
  • 类的名称出现在第一个分区中。
  1. class属性
  • 属性显示在第二个分区中。
  • 属性类型显示在冒号之后。
  • 属性映射到代码中的成员变量(数据成员)。
  1. class操作
  • 操作显示在第三个分区中。它们是类提供的服务。
  • 方法的返回数据类型显示在方法名末尾的冒号之后。
  • 方法参数数据类型显示在参数名称后面的冒号后面。
  • 操作映射到代码中的类方法。

关系

实例化层次关系

关联

一个类的对象和另一个类的对象存在连接,一个类的属性指向另一个类(或多个)实例。

例如:汽车和司机,一辆车对应一个特定的司机,一个司机可以驾驶多辆车。

聚合

聚合关系是更加具体的一种关联关系,它是"has a"的关联关系。它是一种代表部分整体关系的关联。表示类的整体和部分之间的关系,成员对象是整体对象的一部分,但成员对象可以独立于整体对象而存在。

组合

组合关系是一种更强的聚合关系,其中聚合控制其聚合元素的生命周期。整体与部分的关系,但整体与部分不能分离。组合关系表示类的整体和部分之间的关系,整体和部分具有一致的生命周期。一旦整体对象不存在,部分对象也就不存在了,它们都将在同一生命中死去。

聚合关系与组合关系对比

组合关系

  1. 表示整体部分的关系,如发动机是汽车的一部分。

  2. 当容器被销毁时,容器内的内容也会被销毁,如大学和它包含的院系。

聚合关系

  1. 表示整体与部分的关系,如软件与数据库的关系,软件包含数据库,数据库也可以被其他软件使用。

  2. 当容器被销毁时,容器内的内容通常不会被销毁,如教授有学生;当教授离开大学时,学生们并没有随教授一起离开。

因此,聚合关系通常是"目录"包含,以区别于组合的"物理"包含。

汽车有一个发动机,发动机是汽车的一部分。发动机不能作为单独的部件存在,不能从汽车上分离出来。

一个池塘有0个或多个鸭子,而一个鸭子至多有一个池塘(一次)。鸭子可以独立于池塘而存在,例如它可以生活在湖泊附近。当我们摧毁一个池塘时,我们通常不会杀死所有的鸭子。

类层次关系

继承

继承,用于描述父类和子类之间的关系。

在继承关系中,子类继承父类的所有函数,父类拥有所有的属性、方法和子类。子类除了包含与父类相同的特性,还包含自己的特性。

Student类和Professor类继承了Person类。

实现

实现(Implementation)主要用于指定interface与实现class之间的关系。

interface(包括abstract class)是方法的集合。类中的方法实现接口声明的所有方法。

如:汽车和船都是交通工具,交通工具只是一种移动工具的抽象概念,船和船实现了具体的移动功能。

通用层次关系

依赖

依赖关系可以是一种较弱的绑定形式,表明一个类依赖于另一个类,因为它在某个时间点使用了另一个类。如果独立类是依赖类的方法的参数变量或局部变量,则一个类依赖于另一个类。有时两个类之间的关系非常弱。它们根本不是用成员变量实现的。相反,它们可以作为成员函数参数实现的。

依赖关系是一个"使用"关系。一个特定事物的改变可能会影响其他使用它的事物,并且当需要表明一个事物使用另一个事物时使用依赖项。这辆车依靠汽油。如果没有汽油,汽车将无法行驶。

类图例子

组件图

组件和模块的区别

模块和组件都是封装特定功能一个集合。模块是一个逻辑组织集合,用于管理代码的逻辑,把一个复杂系统代码组装成一个个模块,使代码逻辑清晰,易于维护扩展与复用。如财务模块,人力模块。组件是一个物理上的组织集合,顾名思义,软件系统组件是系统的一个完整独立的部件。

例如,在下面的图中,我们展示了一组模块,其中每个模块嵌入了一组类:

在上图中,尽管类被分成多个模块,但它们并没有按照下面的截图进行物理分离。

例如,我们在应用服务器上部署了两个物理组件,

  1. MyWeb.war是Web层上的物理封装。
  2. MyEJB.jar是业务层上的物理封装。

软件抽象粒度层次结构

抽象的软件粒度层次如下:

想象一下,如果只是使用基本数据开发软件系统,代码是很难维护和阅读的。将小的、简单的、功能有限的、目的抽象的东西组合成更大的、更复杂的、功能更强的、目的更明确的东西。将软件系统不同层次抽象出来使开发更容易,更快,更简单和更安全。

组件图

组件图用于对系统的物理方面进行建模,组件图本质是类图一种变形。与类图不同的是,组件图关注的是系统的组件,对一个系统的静态实现视图建模。

组件图把系统分解成不同层次的子功能。每个组件是整个系统的职责明确的特定功能,并且与外部交互。

上面的例子展示了一个较大组件的内部组件:

  • 数据(帐户和检查ID)通过右侧的端口流入组件,并被转换为内部组件可以使用的格式。右边的接口被称为必需的接口,它表示组件执行其职责所需的服务。
  • 然后,数据通过各种连接传递到其他几个组件,然后在左侧的端口输出。左边的那些接口被称为提供的接口,它表示要由展示组件交付的服务。
  • 重要的是要注意,内部组件被一个大的"盒子"包围着,这个"盒子"可以是整个系统本身(在这种情况下,右上角不会有组件符号),也可以是整个系统的子系统或组件(在这种情况下,"盒子"是组件本身)。

组件图的基本概念

在UML 2中,一个组件被绘制成一个矩形,其中有垂直堆叠的可选分隔。在UML 2中,组件的高级抽象视图可以建模为:

  1. 包含组件名称的矩形
  2. 带有组件图标的矩形
  3. 带有组件文本和(或)图标的矩形

接口

下面的例子展示了两种类型的组件接口: 提供的接口:在末端有一个圆圈,表示组件提供的接口。 需要的接口: 在末端有一个半圈,表示组件需要的接口。

端口

端口在组件矩形图边缘线的正方形表示。端口通常用于帮助公开组件所需和提供的接口。

组件间关系

组件图由组件,接口,组件间的关系组成。 组件间关系有:继承,聚合,组合,实现,关联等关系。

例子

对源码建模

  1. 把源码文件作为组件
  2. 对源码文件依赖关系建模

对物理数据库建模

  1. 类操作数据库,类表示数据库的逻辑结构
  2. 把逻辑设计转为物理设计
  3. 把数据库表作为组件
  4. 建立数据库组件图

活动图

活动图表示一个工作流程。

使用场景

  1. 为用例之间/用例内部的工作流建模
  2. 为实现一个用例或操作对象的复杂工作流进行建模

序列图

使用场景

  1. 实现一个用例或一个操作之间的交互
  2. 系统的用户和系统,系统和其他系统,或是子系统之间的更高层次的交互

例子

酒店预订

用例场景建模

相关推荐
葫芦和十三1 小时前
破局与重构:关于 UGC 平台多身份账号体系的架构思考
架构·ai编程·领域驱动设计
ASDyushui1 小时前
Kubernetes 架构原理与集群环境部署
容器·架构·kubernetes
望获linux1 小时前
【实时Linux实战系列】实时系统的安全性架构
java·linux·服务器·开发语言·架构·嵌入式软件
闲猫3 小时前
WEB安全架构
安全·web安全·架构
艾特小小4 小时前
spring-cloud微服务部署-feign服务间调用
java·spring boot·spring cloud·微服务·架构
摸鱼仙人~5 小时前
Spring Boot 分层架构详解:Controller、Service、Mapper...
spring boot·后端·架构
强哥之神6 小时前
一文深入:AI 智能体系统架构设计
深度学习·语言模型·架构·llm·transformer·ai agent
森焱森6 小时前
高端伺服驱动“ARM+FPGA”架构的技术
arm开发·单片机·算法·fpga开发·架构
发发喜欢用AI7 小时前
什么是MoE?MoE 架构详解
架构