【系统架构设计师】六、UML建模与架构文档化

在20世纪70年代,陆续出现了面向对象的建模方法,UML(统一建模语言)的出现,以融合了多种面向对象建模方法,简介的图形和符号,直观的表示和强大的表示能力,得到了工业界与学术界认可。它使用统一的表示法,使不同知识背景的领域专家、系统分析和开发人员以及用户可以方面地交流。

6.1 UML现状和发展

6.1.1 UML起源

  • 1995年,Gray Booch和Jances Rumbaugh将他们面向对象建模方法统一为Unified Mathod V0.8;
  • 1996年,Ivar Jacobson加入其中,共同将该方法统一为二义性较少的UML 0.9(这三位杰出的方法学家被称为“三友(Three Amigos)”);
  • 1997年1月,伙伴组织向OMG提交了最初的提案UML 1.0;
  • 1997年9月,提出了最终提案UML 1.1;OMG特许成立UML修订任务组(Revision Task Forces,RTF);
  • 1997年11月,UML 1.1被OMG正式采纳为对象建模标准;
  • RTF提交了第一个主要产品编辑版本UML1.2:改编了规范,使之与其他OMG规范更为一致;
  • RTF提交了第二个主要产品技术版本UML1.3:修正和改善了UML1.1的遗留问题,并矫正了已发现的小错误;
  • 1996年6月,RTF提交UML1.3最终报告并或批准;

6.1.2 UML体系结构演变

UML是用元模型来描述的,元模型是4层元模型体系结构模式中的一层。此模式的其他层次分别是元-元模型层、模型层和用户对象层。其中元模型层是由元-元模型层导出,UML的元-元模型层在OMG MOF的元-元模型中定义,而UML元模型中的元类是MOF元-元类的实例。

在元模型层,UML元模型又被分解为三个逻辑子包:基础包、行为元素包和模型管理包。

  • 其中基础包由核心、扩展机制和数据类型三个子包构成,它是描述模型静态结构的语言底层结构,支持类图、对象图、构件图和部署图等结构图;
  • 行为元素包是描述模型动态行为的语言上层结构,支持不同的行为图,包括用例图、顺序图、协作图、状态图和活动图;
  • 模型管理包则定义了对模型元素进行分组和管理的语义,它描述了几种分组结构,包括包、模型、子系统。
    行为元素包和模型管理包都依赖基础包。

UML 1.3是建模语言规范第一个成熟的发布,解决了UML1.1的遗留问题,也为UML2.0确立了路标。

6.1.3 UML的应用和未来

UML是在多种面向对象建模方法的基础上发展起来的建模语言,主要用于软件密集型系统的建模。OMG的采纳和大公司的支持把它推上了实际上的工业标准地位。它被广泛地用于应用领域和多种类型的系统建模,如管理信息系统、通信和控制系统、嵌入式实时系统、分布式系统和系统软件等。近几年还被运用于软件再生工程、质量管理、过程管理和配置管理等方面。还被应用于非软件系统,例如硬件设计、业务处理流程、企业或事业单位的结构与行为建模。

6.2 UML基础

6.2.1 概述

UML通过图形化的表示机制从多个侧面对系统的分析和设计模型进行刻画。它共定义了10种视图,并将其分为了4类:

  • 用例图(use case diagram)
    定义1:用例是对一个活动者(actor)使用系统的一项功能时锁进行的交互过程的一个文字描述序列;
    定义2:用例是系统、子系统或类和外部的参与者(actor)交互的动作序列的说明,包括可选的动作序列和会出现异常的动作序列。
    编写用例涉及到的元素:
    • 参与者:图标(Icom)形式、标签(Label)形式、修饰(Decoration)形式
      在这里插入图片描述
    • 用例间关系:用例与参与者的关联(association)、用例之间的泛化(generalization)、包含(include)、扩展(extend)等关系
      在这里插入图片描述
    • 用例图:显示一组用例、参与者以及它们之间关系的图
      在这里插入图片描述
    • 用例的描述:采用自然语言描述参与者与系统进行交互时双方的行为,不追求形式化的语言表达。
      在这里插入图片描述
  • 静态图
    • 类图(class diagram):
      类是具有相似结构、行为和关系的一组对象的抽象。在UML中类表示为划分为三个格子的长方形。
      一般来说,类之间的关系有关联、聚集、组合、泛化和依赖等。
      在这里插入图片描述
      • 关联(association):模型元素间的一种语义,它们是对共同的结构特性、行为特型、关系和语义的链(link)的描述。
      • 聚集(aggregation):是一种特殊的关联。聚集表示类之间整体与部分的关系。在系统需求描述中的“包含”、“组成”、“分为…部分”等通常意味着存在聚集关系。
      • 组合(composition):是一种也是的聚集。表示的也是类之间的整体与部分的关系,但组合关系中整体与部分具有同样的生存期。
      • 泛化(generalization):定义了一般和特殊元素之间关系。从面向对象程序设计语言角度来说,类与类之间的泛化关系就是平常所说的类与类之间的继承关系。
      • 依赖(dependency):如果元素(类)X定义修改会影响到元素(类)Y的定义,则我们认为元素(类)Y依赖与元素(类)X。
    • 对象图(object diagram):
    • 包图(package diagram):
  • 行为图
    • 交互图(interactive diagram):用来描述对象之间以及对象与参与者之间的动态协作关系以及协作过程中行为次序的图形文档。交互图包括顺序图和协作图两种形式:顺序图着重描述对象按照时间顺序的消息交换,协作图着重描述系统程序如何协同工作。
      • 顺序图(sequence diagram,也称时序图):
        定义:顺序图时显示对象之间交互的图,这些对象是按时间顺序排列的。
        顺序图中显示的是参与交互的对象及对象之间消息交互的顺序。
        在这里插入图片描述
      • 协作图(collaboration diagram):
        定义:协作图是用于描述系统的行为是如何由系统的成分协作实现的图,协作图中包括的建模元素有对象、消息、链等。
    • 状态图(statechart diagram):
      状态图主要用于描述一个对象在其生存期间的动态行为,表现一个对象所经历的状态序列,引起状态转移的事件(event),以及因状态转移而伴随的动作(action)。
      一般可以用状态机地一个对象的生命周期建模,状态图是用来显示状态机的,重点在于描述状态之间的控制流。
      在这里插入图片描述
    • 活动图(active diagram):
      活动图可以用于描述系统的工作流程和并发行为,活动图其实可以看作状态图的特殊形式,活动图中一个活动结束后将立即进入下一个活动(在状态图中状态的转移可能需要事件的触发)。
      活动图的几个概念:
      • 活动(activity):表示的是某个流程中的任务执行,可以表示某算法过程中语句的执行;
      • 泳道(swimlane):活动图中的区域划分,根据每个活动的职责对所有活动进行划分,每个泳道代表一个责任区。
      • 分支(branch):在活动图中,对于同一个触发事件,可以根据不同的警戒条件转向不同的活动,每个可能的转移就是一个分支。
      • 分叉(fork)和汇合(join):如果要表示系统或对象中的并发行为,可以使用分叉合汇合。分叉表示两个或多个控制流经过分叉后,这些控制流并发进行;汇合正好与分叉相反。
      • 对象流:活动图中对象流表示活动和对象之间的关系,如一个活动创建对象(作为活动输出)或使用对象(作为活动的输入)等。
        在这里插入图片描述
  • 实现图
    • 构件图(component diagram):
      构建是系统中遵从一组接口且提供其实现的物理的、可替换的部分。构建图则显示一组构建以及它们之间的相互关系,包含编译、链接和执行时构件之间的依赖关系。
      在这里插入图片描述
    • 部署图(deployment diagram):
      部署图也称为配置图、实施图,它可以用来显示系统中计算节点的拓扑结构和通信路径与结点上运行的软构建等。一个系统模型只有一个部署图,部署图常用于帮助理解分布式系统。
      在这里插入图片描述

6.3 基于UML的软件开发过程

6.3.1 开发过程

UML是独立于软件开发过程的,即UML能够在几乎任何一种软件开发过程种使用。迭代的渐进式软件开发过程包含4个阶段,即初启、细化、构建和部署。

  • 初启:初步的可行性分析和经济效益分析;
  • 细化:初步的需求分析、初步的高层设、部分的详细设计、部分的原型构造;需用使用到UML语言机制:
    • 描述用户需求的用例及用例图
    • 表示领域概念模型的类图
    • 表示业务流程处理的活动图
    • 表示系统高层结构的包图
    • 表示用例内部实现过程的交互图
  • 构建:通过一系列的迭代完成对所有用例的软件实现工作,在每次迭代中实现一部分用例,通过迭代方式可以让用户及早参与对已实现用例的实际评价,并提出改进意见;每个迭代过程由针对用例的分析、设计、编码、测试和集成5个子阶段构成;需要使用到的UML语言机制:
    • 用例和用例图
    • 类图
    • 交互图
    • 状态图
    • 活动图
    • 包图
    • 构件图
    • 部署图
  • 部署:将构建阶段获取的软件系统部署到用户实际工作环境中试运行。

6.3.2 基于UML的需求分析

利用用例及用例图表示需求;利用包图及类图表示目标软件系统的总体框架结构。
基于UML的需求分析过程大致可分为以下步骤:

  • 生成用例
  • 用活动图表示用例
  • 生成用例图
  • 建立顶层架构
    • UML包图
    • 顶层架构设计:流程处理模式、客户服务器模式等
  • 建立概念模型

6.3.3 面对对象的设计方法

面向对象的软件设计过程:

  • 设计用例实现方案
    • 提取边界类、实体类和控制类
    • 构造交互图
    • 根据交互图精华类图
  • 设计技术支撑方案
  • 设计用户界面
  • 精化设计模型

6.4 系统架构文档化

6.4.1 模型概述

软件架构用来处理软件高层次结构的设计和实施。它以精心选择的形式将若干结构元素进行装配,从而系统主要功能和性能要求,并满足其他非功能性需求,如可靠性、伸缩性、可移植性和可用性。
软件架构={元素,形式,关系/约束}
软件架构涉及到抽象、分解和组合、风格和美学。我们可以由多个视图或视角组成的模型来描述它。
为了最终处理大型的、富有挑战性的架构,该模型包含5个主要的视图:

  • 逻辑视图(logical view):设计的对象模型
  • 过程视图(process view):捕捉设计的并发和同步特征
  • 物理视图(physical view):描述了软件到硬件的映射,反映了分布式特性
  • 开发视图(development view):描述了在开发环境中软件的静态组织结构
    架构的描述,即所做的各种决定,可以围绕着这4个视图来组织,然后由一些用例(use case)或场景(scenarios)来说明,从而形成了地5个视图。
    “4+1”视图模型

6.4.2 逻辑结构

逻辑架构主要支持功能性需求,即在为用户提供服务方面系统所应该提供的功能。

6.4.3 进程架构

进程架构考虑一些非功能性的需求,如性能和可用性,它解决并发性、分布性、系统完整性、容错性的问题,以及逻辑视图的主要抽象如何于进程结构相配合在一起。

6.4.4 开发架构

开发架构关注软件开发环境下实际模块的组织。软件打包成小的程序块(程序库或子系统),它们可以由一位或几位开发人员来开发。子系统可以组织成分层结构,每个层为上一层提供良好定义的接口。

6.4.5 物理架构

物理架构主要关注系统非功能性的需求,如可用性、可靠性(容错性)、性能(吞吐量)和伸缩性。软件在计算机网络或处理节点上运行,被识别为各种元素(网络、过程、任务和对象),需要被映射至不同节点;软件至节点的映射需要高度的灵活性和对源代码产生最小的影响。

6.4.6 场景

4种视图的元素通过数据比较少的一些重要场景(更常见的事用例)进行无缝协同工作,我们为场景描述响应的脚本(对象之间和过程之间的交互序列)。在某种意义上,场景是最重要的需求抽象。

6.4.7 迭代过程

在进行文档化时,提倡一种更具有迭代性质的方法——架构先被原型化、测试、估量、分析,然后在一系列的迭代过程中被细化。
情景驱动的方法:系统大多数关键的功能以场景(或use cases)的形式被捕获。关键意味着:最重要的功能,系统存在的理由,或使用频率最高的功能,或体现了必须减轻的一些重要技术风险。

1)开发阶段
  • 基于风险和重要性为某次迭代选择一些场景。
  • 形成“稻草人式的架构”
  • 将所发现的架构元素分布到四个蓝图中
  • 实施、测试、度量该架构
  • 捕获经验教训
2)循环阶段
  • 下一个迭代过程开始进行
  • 重新评估风险
  • 扩展考虑的场景选择板
  • 选择能减轻风险或提高结构覆盖的额外的少量场景
  • 在原先的架构中描述这些场景
  • 发现额外的架构元素,或必要的重要架构变更
  • 更新4个主要视图(逻辑、进程、开发和物理视图)
  • 根据变更修订现有的场景
  • 升级实现工具(架构原型)来支持新的、扩展了的场景集合
  • 测试
  • 评审5个视图来检测简洁性、可重用性和通用性的潜在问题
  • 更新设计准则和基本原理
  • 终止循环

为了实际的系统,初始的架构原型需要进行演进。较好的情况是经过两次或三次迭代之后,结构变得稳定:主要抽象都已被找到;子系统和过程都已经完成,以及所有的接口都已经实现。
接下来则是软件设计的范畴,这个阶段可能也会用到相似的方法和过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/4194.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【实用技能】在 SQL Server 中使用 LIMIT 子句的替代方案

在数据库管理中,有效限制查询结果对于优化性能和确保检索相关数据至关重要。许多 SQL 数据库系统(例如 MySQL 和 PostgreSQL)都使用LIMIT子句来指定查询返回的记录数。但是,SQL Server 不支持该LIMIT子句,而是选择诸如…

Apache-Hive数据库使用学习

前期准备 Hadoop-分布式部署(服务全部在线) Mysql-node1节点部署(确认安装正常) apache-hive -node1节点部署(需要与MySQL元数据联动存储) 参考博客: Hadoop Hadoop集群搭建-完全分布式_hadoop完…

Webserver(3.2)锁

目录 互斥量死锁未解锁重复加锁多个锁 读写锁案例 互斥量 接上一章&#xff0c;卖票存在线程安全问题。 #include<stdio.h> #include<pthread.h> #include<unistd.h> int tickets1000;//局部变量就是每个人卖100张&#xff0c;全局变量就是一起卖100张&…

105. UE5 GAS RPG 搭建主菜单

在这一篇&#xff0c;我们将实现对打开游戏显示的主菜单进行搭建&#xff0c;主菜单将显示游戏主角&#xff0c;游戏名称和进入游戏和退出游戏两个按钮。 搭建菜单场景 我们将主菜单设置为一个单独的场景&#xff0c;前面可以显示对应的UI控件&#xff0c;用于玩家操作&#…

语义分割——U-Net

U-Net是继FCN之后又一个经典的语义分割网络模型&#xff0c;并且也是很多后续语义分割模型的“祖宗”。这个网络模型是2015年提出来的&#xff0c;它具有一个非常对称的结构&#xff0c;很像字母“U”&#xff0c;所以被称作U-Net。U-Net被广泛应用于医学影像领域&#xff0c;如…

AI之硬件对比:据传英伟达Nvidia2025年将推出RTX 5090-32GB/RTX 5080-24GB、华为2025年推出910C/910D

AI之硬件对比&#xff1a;据传英伟达Nvidia2025年将推出RTX 5090-32GB/RTX 5080-24GB、华为2025年推出910C/910D 目录 Nvidia的显卡 Nvidia的5090/5080/4090/4080&#xff1a;据传传英伟达Nvidia RTX 5090后续推出32GB版且RTX 5080后续或推出24GB版 RTX 5090相较于RTX 4090&…

Android无限层扩展多级recyclerview列表+实时搜索弹窗

业务逻辑&#xff1a; 点击选择&#xff0c;弹出弹窗&#xff0c;列表数据由后台提供&#xff0c;不限层级&#xff0c;可叠加无限层子级&#xff1b; 点击item展开收起&#xff0c;点击尾部icon单选选中&#xff0c;点击[确定]为最终选中&#xff0c;收起弹窗&#xff1b; 搜索…

SpringBoot+ClickHouse集成

前面已经完成ClickHouse的搭建&#xff0c;创建账号&#xff0c;创建数据库&#xff0c;保存数据库等&#xff0c;接下来就是在SpringBoot项目中集成ClickHouse。 一&#xff0c;引入依赖 <!-- SpringBoot集成ClickHouse --> <dependency><groupId>com.baom…

【基于轻量型架构的WEB开发】课程 12.5 数据回写 Java EE企业级应用开发教程 Spring+SpringMVC+MyBatis

12.5 数据回写 12.5.1 普通字符串的回写 接下来通过HttpServletResponse输出数据的案例&#xff0c;演示普通字符串的回写&#xff0c;案例具体实现步骤如下。 1 创建一个数据回写类DataController&#xff0c;在DataController类中定义 showDataByResponse()方法&#xff…

Java实现JWT登录认证

文章目录 什么是JWT?为什么需要令牌?如何实现?添加依赖&#xff1a;JwtUtils.java&#xff08;生成、解析Token的工具类&#xff09;jwt配置&#xff1a;登录业务逻辑&#xff1a;其他关联代码&#xff1a;测试&#xff1a; 什么是JWT? JWT&#xff08;Json Web Token&…

光伏无人机踏勘,照亮光伏未来!

光伏电站选址地分散在各地&#xff0c;想要精准获取该地的地形特点与屋顶面积等信息&#xff0c;传统的人工踏勘耗时耗力且精度无法保证&#xff0c;难以满足现代光伏项目的规模快发发展需求。光伏无人机踏勘&#xff0c;照亮光伏未来&#xff01; 在光伏无人机智能踏勘设计系统…

Vue全栈开发旅游网项目(7)-搜索界面开发及其接口联调

1.搜索界面开发 1.1 模糊查询 文件地址&#xff1a;pycharm- class SightListView(ListView):paginate_by 5def get_queryset(self):#is_validTrue&#xff1a;表中is_valid列&#xff0c;有值则被查询出来query Q(is_validTrue)#1.获得热门景点is_hot self.request.GET.…

『 Linux 』网络传输层 - TCP(二)

文章目录 TCP六个标志位TCP的连接三次握手 四次挥手为什么是三次握手和四次挥手 重传机制 TCP六个标志位 在TCP协议报文的报头中存在一个用于标志TCP报文类型的标志位(不考虑保留标志位),这些标志位以比特位选项的方式存在,即对应标志位为0则表示为假,对应标志位为1则为真; SYN…

Django学习-项目部署

WSGI定义&#xff1a; uWSGI定义&#xff1a; 安装uWSGI&#xff1a; 配置uWSGI&#xff1a; uWSGI常见问题汇总&#xff1a; 安装nginx&#xff1a; 配置&#xff1a; 启动/停止dnginx 修改uWSGI配置&#xff1a; 常见问题解决方法&#xff1a; nginx静态文件配置&#xff…

迅为RK3588开发板Android多屏显示之多屏同显和多屏异显

迅为RK3588开发板是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像…

QML项目实战:自定义Button

目录 一.添加模块 ​1.QtQuick.Controls 2.1 2.QtGraphicalEffects 1.12 二.自定义Button 1.颜色背景设置 2.设置渐变色背景 3.文本设置 4.点击设置 5.阴影设置 三.效果 1.当enabled为true 2.按钮被点击时 3.当enabled为false 四.代码 一.添加模块 1.QtQuick.Con…

基于C#实现Windows后台窗口操作与图像处理技术分析

在Windows编程中&#xff0c;操作后台窗口是一项复杂而有用的技术。它可以用来自动化用户界面测试、应用程序机器人等场景。本文将深入探讨如何在C#中绑定后台窗口、获取后台窗口界面图片&#xff0c;以及在图片中寻找指定图标并获取坐标。本技术文章结合最先进的资料与实践经验…

数据库基础(1) . 关系型数据库

1.数据库 database 1.1.数据持久化 数据持久化&#xff08;Data Persistence&#xff09;指的是将程序中的数据保存到某种持久化的存储介质&#xff08;如硬盘、SSD、磁带等&#xff09;上的过程&#xff0c;使得即使在程序终止后&#xff0c;数据依然可以被保留下来并在下次…

Python学习的自我理解和想法(27)

学的是b站的课程&#xff08;千锋教育&#xff09;&#xff0c;跟老师写程序&#xff0c;不是自创的代码&#xff01; 今天是学Python的第27天&#xff0c;学的内容是python操作pptx和pdf&#xff0c;但是这节博客只会介绍如何新建pptx和加密pdf。开学了&#xff0c;时间不多&…