软件建模概述 UML模型图

软件建模

什么是软件建模

将想法通过模型可视化地表达出来,方便记忆和进一步分析,方便团队/同事交流,口语交流容易失真。

软件建模体现了软件设计的思想,在需求和实现之间架起了一座桥梁,通过模型指导软件系统的具体实现。

模型并不是软件系统的一个完备表示,而是所研究系统的一种抽象。

抽象
指导
软件系统
软件模型

如何进行软件建模

软件建模原则

1、选择正确的模型,模型要与现实相联系

2、从不同的视角,使用不同的模型去表示一个系统

3、模型是抽象的,是选取系统某个最显著的特征并进行简化表示,因此需要通过不同的视角采用不同模型表示:

  • **外部视角:**对系统上下文或环境进行建模
  • **交互视角:**对系统及其环境或者系统的构件之间的交互进行建模,建立用例模型
  • **结构化视角:**对系统的组织或者系统所处理的数据的结构进行建模,建立静态模型
  • **行为视角:**对系统的动态行为以及系统如何响应事件进行建模,建立动态模型

软件建模方法

在不同的领域和场景下有不同的软件建模方法,其各自的建模思想和采用的建模工具也不尽相同,如:

  • 结构化方法(Structured Method)
  • 面向对象方法(Object Oriented Method)
  • 基于构件方法(Component Based Method)
  • 面向服务方法(Service Oriented Method)
  • 面向切面方法(Aspect Oriented Method)
  • 模型驱动方法(Model Driven Method)
  • 形式化方法(Formal Method)

本章仅介绍最常用,对开发人员普遍适用的面向对象建模。

软件建模工具

随着面向对象技术的不断发展和应用,形成了面向对象的建模标准,即**UML(Unified Modeling Language)**统一建模语言。UML是面向对象开发中一种通用的图形化建模语言,具有如下特点:

  • **面向对象:**支持面向对象的主要概念,提供了一批基本的模型元素的表示图形和方法,能简洁明了地表达面向对象的各种概念
  • **可视化、表示能力强:**通过UML的模型图能够清晰地表示系统的逻辑模型和实现模型,可用于各种复杂系统的建模
  • **独立于过程:**是系统建模语言,独立于开发过程
  • **独立于程序语言:**用UML建立的软件系统模型可以用Java、C++、Smalltalk等任何一种面向对象的程序设计来实现
  • **易于掌握使用:**UML图形结构清晰,建模简洁明了,容易掌握使用

UML内容组成

UML由三部分组成:

  • **事物:**是UML中重要的组成部分,是UML模型中最基本的面向对象的构造块。它们在模型中属于最静态的部分,代表概念上或物理上的元素。
  • **关系:**把事物紧密联系在一起。
  • **图:**是很多有相互相关的事物的组。
UML
事物
关系
静态
用例图
类图
对象图
部署图
动态
顺序图
合作图
状态图
活动图
结构事物
用例
接口
协作
活动类
组件
节点
行为事物
交互
状态机
组织事物
辅助事物
注释
关联
依赖
泛化
实现
1.1.5

9种UML模型图

用途
用例图
Use-Case Diagram
用于描述角色以及角色与用例之间的连接关系(如:泛化、关联和依赖);说明的是谁要使用系统,以及他们
使用该系统可以做些什么,是一种静态模型
类图
Class Diagram
用于描述系统中的类,以及各个类之间的关系(如:泛化、实现、依赖、关联、聚合、组合)。是一种静态模型
对象图
Object Diagram
与类图极为相似,它是类图的实例,对象图显示类的多个对象实例,而不是实际的类,它描述的不是类之间的关系,
而是对象之间的关系,是一种静态模型
状态图
State Diagram
用于描述类的对象所有可能的状态,以及事件发生时状态的转移条件,是对类图行为上的补充,是一种动态模型
活动图
Activity Diagram
用于描述用例要求所进行的活动,以及活动间的约束关系,有利于识别并进行活动,是一种动态模型
顺序图
Sequence Diagram
也叫序列图或时序图,用于描述参与者与系统对象之间有序的交互过程,强调消息是如何在对象之间被发送和
接收的,是一种动态模型
合作图
Communication Diagram
也叫协作图,与顺序图相似。用于描述对象间动态合作关系。可以看成是类图和顺序图的交集,重点描述对象之间
的相互通信关系。如果强调时间和顺序,则使用时序图;如果强调上下级关系,则选择合作图。是一种动态模型
组件图
Component Diagram
也叫构件图,用于描述代码构件的结构以及各种构件之间的依赖关系,是一种静态模型
部署图
Deployment Diagram
用于描述系统的物理部署。例如计算机和设备,以及它们之间是如何连接件的。是一种静态模型

UML4+1视图

架构设计4+1视图的作用与关系

用例视图:使用用例图来描述

逻辑视图:描述系统的结构组成,使用类图、对象图

行为视图:用于系统运行时的交互过程,使用时序图、合作图、状态图、活动图

实现视图:也叫开发视图,使用组件图

部署视图:使用部署图

常见UML模型图

UML模型在软件开发流程中的应用

软件开发过程中,不同阶段需要用到不同的UML图,选择使用哪些图,需要深刻理解该图的主要用途,以及它表达的优势。

软件开发流程:

需求分析
概要设计
详细设计
编码阶段
测试

需求分析阶段:

​ 常用模型图:用例图

​ 对外部的参与者(Actor)以及它们所需要的系统功能建模,表示客户的需求

概要设计阶段:

​ 常用模型图:类图、对象图、合作图、状态图、时序图、活动图

​ 描述系统的静态结构,描述系统的动态特征

详细设计阶段:

​ 常用模型图:类图、对象图、合作图、状态图、时序图、活动图

​ 在详细设计阶段,把概要设计的结果扩展成技术解决方案,分析阶段的领域问题被嵌入在这个技术基础结构中

编码阶段:

​ 把设计阶段的类转换成某种面向对象程序设计语言的代码

测试阶段:

​ 常用模型图:类图、组件图、部署图

​ 不同的测试阶段使用不同的UML图,如:单元测试使用类图和类的规格说明;集成测试阶段典型的使用组件图、部署图

静态图

用例图

用例图关键元素

描述用例图首先要确定参与者,即角色(Actors),Actors表示提供或接收系统信息的人或系统,他们是与系统有交互作用的人或事物,代表一个系统的使用者或外部通信的目标。

用例是系统中的一个功能单元,被描述为角色与系统的一次交互。用例需要从角色希望系统提供的功能中提取,而不是以系统自身的角度来提取,满足参与者的需求的用例才是好用例。

用例间的常见关系有包含(Include)、扩展(Extend)、泛化(Generalization)。用例也可以叫Use,表示本用例会用到被包含的其他用例,被包含的用例是可以被重用的;扩展用例是可选的,在特定场景下可以补充基础用例,降低基础用例的复杂性。 泛化体现了父子关系,表明存在派生和继承。

类图

类图中的关系,箭头指向较小的部分

1、实现(Realization):

​ 是一种类与接口的关系,表示类是接口所有特征和行为的视线。例如:借阅者能查找书籍。

2、依赖(Dependency):

​ 是一种使用的关系(非持久,局部变量),有单向依赖和双向依赖。但尽量避免使用双向依赖。

3、泛化(Generalization):

​ 是一种继承关系,指定了子类继承父类的所有特征和行为。

4、关联(Association):

​ 是一种拥有的关系(持久的,全局变量),它使一个类知道另一个类的属性和方法。例如:借阅者的节约记录或预约记录。聚合和组合属于特殊的关联关系。

5、聚合(Aggregation):

​ 是整体与个体的关系,可以理解成把个体聚集在一起。个体可以独立分离,聚合为整体可以有更多功能。

6、组合(Composition):

​ 是整体与局部的关系,整体的对象负责代表局部的对象的生命周期,可以理解成整体是由局部组成的。没有局部就无法组成整体。(强依赖关系,局部是必要的)

动态图

动态图用于描述系统的对象交互、活动流程、状态变迁等行为动态模型,通常在完成静态图建模之后进行相应的动态图建模。

动态模型是描述系统的功能是如何完成的,用时序图、活动图、状态图从不同的角度来描述对象和对象之间的交互。

时序图

**时序图是强调消息时间顺序的交互图。**描述了不同对象之间协助完成预期行为的动态过程。顺序图具有直观、形象的优点。对呈现、理解不同对象间的交互关系时序具有较大的帮助。

时序图的主要绘图元素

  • 时序图将交互关系表示为一个二维图
  • 纵向是时间轴,时间沿竖线向下延伸
  • 横向代表了在协作中各独立对象的类元角色
  • 类元角色生命线表示
  • 消息用从一个对象的生命线到另一个对象生命线的箭头表示

设计考虑:

​ 为了突出关键设计步骤和设计意图,只关注主要交互流程,忽略无关异常分支

活动图

活动图用于对目标对象计算流程和工作流程建模

  • 一张活动图本质是一个流程图,它显示系统从一个活动到另一个活动的流程迁移
  • 在完成用例建模后,通过活动图表示用例的活动步骤,用于描述用例模型,有助于用例的动态行为建模
  • 也可以用于通用的流程图建模场景

四种基本建模元素

  • 活动Activity:表示一个执行步骤
  • 活动流Activity line:不同活动间的控制流或数据流
  • 控制符Control node:分支控制符decision/merge,并发控制符fork/join
  • 泳道Swimming line:用于表达不同的活动分组

活动图一般有开始和结束标志

泳道图是一种特殊的活动图,侧重“活动”属于哪个“对象”,同一对象的活动写在一条“泳道(Lane)”里面。

状态图

状态图描述了系统元素的状态条件和响应,它反映了类的对象可能具有的状态,以及状态变化的事件。

并不是所有的类都有相应的状态图,状态图仅用于具有下列特点的类:

具有若干个确定的状态,类的行为在这些状态会收到影响变为其他状态,另外也可为系统描述整体状态图。

状态图可用于类、用例或者整个系统。

主要概念:

  • 状态(State):状态描述了一个类对象生命周期中的一个时间段。体现一个类在当前时间所处的状态。
  • 事件(Event):事件是发生在时间和空间上的值得注意的事情,而这个事情可以引发状态变迁。事件可以分为:信号事件、调用事件、改变事件、时间事件等。
  • 转换(Transition):事件发生后类的状态变迁的过程。转换要有引起转换的触发器事件、监护条件、转换的动作和转换的目标状态。

设计考虑:

​ 为了维护状态的原子性,对于预约书借出过程,分解为两步:首先迁移到可借状态,然后再迁移到借出状态。

顺序图、活动图、状态图对比

顺序图、活动图、状态图都是描述事物的动态行为,其区别对比如下:

类别建模对象核心建模元素建模时机适用场景
顺序图多个不同对象的交互过程Role-Message在类图完成之后进行描述复杂的多对象间交互。并发、
分支过多的场景会影响可理解性,不宜太复杂
活动图(特定对象或不同对象的)
不同活动之间的流动
Activity-Control Flow在用例图或类图完成之后进行描述涉及到复杂的活动步骤的用例。
特别是并发、分支等场景。
状态图(特定对象的)不同状态变迁State-Transition在用例图或类图完成之后进行涉及到复杂的状态变化的场景,也适用于
并发场景,如网络连接的会话状态等。

Tips:

  • 顺序图强调多个不同对象之间交互的先后顺序
  • 活动图强调复杂流程中活动单元的分支处理
  • 状态图强调特定对象在不同事件发生后的状态变化

小结

  • 软件建模是构建正确可信软件系统的基础,是对软件系统的抽象,指导软件系统的实现。
  • 软件建模是通过不同的视角,采用不同的模型去抽象描述一个系统(抽象,不是完整性描述),包括 外部视角、交互视角、结构化视角和行为视角
  • UML(Unified Modeling Language)是面向对象开发中一种通用的图形化建模语言,可视化、表达能力强,独立于过程和程序设计语言,易于掌握和使用。
  • UML包括4种事物、4种关系、9种图。各个元素不是孤立的,是相互有机结合来表示一个软件系统。
  • UML的9种模型又可以分为静态图动态图两大类,静态图描述了系统以及各对象的组织形式,动态图描述了系统以及对象之间的交互活动过程。
  • UML模型贯穿在软件开发流程各个环节。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT-4竟已经学会说谎——聪明又危险的AI

时间回到2023年3月,OpenAI正式发表GPT-4的最新模型,除了展示聊天机器人如何完成各种任务,还在官网发了一份90多页报告,提及各项特性与可能存在的风险。同时,OpenAI为了检测它可能带来的“潜在的威胁”,而让…

前 Twitter CEO 炮轰 Web 3,马斯克也来“掺和一脚”

前 Twitter CEO 的 Jack Dorsey 今日又登上了外网头条,但与上个月宣布辞任时的祝福不同,这次 Jack Dorsey 引起了很大的争议:他连续发推批评 Web 3 及加密风投,引得许多加密行业人士不满并反驳。 “你们并不拥有 Web 3&#xff0…

马斯克特斯拉内部邮件火了:痛恨开会,少说黑话

金磊 羿阁 发自 凹非寺量子位 | 公众号 QbitAI 马斯克给员工的一封内部邮件火了。 鼓励员工拒绝开会、公司规定不合理可以不遵守……俨然一个为员工着想的好老板。 一开始人们还奇怪马斯克的画风怎么变这么快,后来才发现原来这是他6年前写的。 对象也不是推特员工&a…

对csdn inscode产品对工作3年内的程序员的体验改进与思考

前言: inscode 的初衷就 在线IDE运行环境 ai辅助 ,能够通过云原生运行项目,帮助用户实现分享和学习创意。 InsCode支持AI编程,代码提问 、添加注释、优化代码应有尽有 inscode slogan 让你的灵感立刻落地 编程可以很有趣 InsCode 是一个无需…

20+ Prompt工具网站汇总;我用AI工具开了一家「无人公司」;如何10分钟上线一个AI导航网站;第一部AIGC中英双语图文辞典 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『MidJourney Prompt工具网站』加速生成与优化,持续更新中 ShowMeAI知识星球 | 资源标签:找工具 这是一个总结…

百度正式推出“文心一言”

我是卢松松,点点上面的头像,欢迎关注我哦! 备受瞩目的中国版ChatGPT,百度“文心一言”今日正式发布了。由百度老大李彦宏亲自主持,亲自讲解。可见“文心一言”已经在百度得到了举足轻重的地位。 也是从3月16日起&am…

百度语音接口调用详解

1.获取的API Key及Secret Key 1.1 在控制台中选择语音 1.2 进入到如下界面进行创建应用(“接口选择”这一项不用填写) 1.3 创建应用之后在“应用列表”中查看对应应用的AppID、API Key、Secret Key的值。 2.调用接口 2.1 pycharm中新建一个python文件(voice1.py),…

API网关|JD|pinduoduoAPI接入

API网关是什么 在日常工作中,不同的场合下,我们可能听说过很多次网关这个名称,这里说的网关特指API网关(API Gataway)。字面意思是指将所有API的调用统一接入API网关层,由网关层负责接入和输出。 那么在什…

主控全志R58-百度小度在家智能音箱拆解

*本文转自我爱音频网 作为一个还处于萌芽阶段的产品,近期智能音箱迎来了一种新的形态演化阶段,市面上不断出现像亚马逊Echo Show、京东叮咚Play等搭载触摸显示屏的智能音箱,屏幕的加入,让音箱的交互逐渐变得更加变得可视化&#…

拥有自我意识的AI:AutoGPT | 得物技术

1.引言 ChatGPT在当下已经风靡一时,作为自然语言处理模型的佼佼者,ChatGPT的优势在于其能够生成流畅、连贯的对话,同时还能够理解上下文并根据上下文进行回答。针对不同的应用场景可以进行快速定制,例如,在客服、教育…

移动端IM产品RainbowChat[专业版] iOS端 v6.0版已发布!

关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持UDP 、TCP 、WebSocket 三种协议,支持iOS、Android、H5、标准Java平台,服务端基于Netty编写。 工程开源地址是&…

Android与IOS的相爱相杀之客户端测试

一、Android Android 是google公司主导的一个开放的手机操作系统,不过目前已经超过了手机的局限,而定位于移动设备的操作系统。目前用于手机,平板,智能电视,智能导航,智能手环,智能眼镜以及智能家居设备 底层以Linux内核工作为基础,由C语言开…

[iPhone高级] 基于XMPP的IOS聊天客户端程序(IOS端三)

前两篇介绍了如何通过XMPP来发送消息和接收消息,这一篇我们主要介绍如何来美化我们的聊天程序,看一下最终效果呢,当然源程序也会在最后放出 好了,我们来看一下我们写的程序 这里我们自定义了TableViewCell 一行是显示发布日期,一行是显示发送的消息,还有一个是背景 -(id…

写综述如何降低查重率?

经过好几个月的打磨,论文终于写完了,你以为这就完事了?MO!下面就来到了很重要的一步——查重。很多小伙伴写完后还蛮开心的,可是看到这查重率,很多人是欲哭无泪。辛辛苦苦写的综述怎可重复率那么高!重复率过…

多智能体强化学习-G2ANet

Multi-Agent Game Abstraction via Graph Attention Neural Network 论文地址 代码地址 摘要 本文通过一个完整的图来建模智能体之间的关系,并创新性地提出一种基于两阶段注意力网络(G2ANet)的游戏抽象机制,表明两个智能体之间…

chatgpt赋能python:Python画轨迹图:认识、用法与优势

Python画轨迹图: 认识、用法与优势 Python的数据可视化能力十分强大。画图工具虽然千千万,但其中,轨迹图是同时准确又美观的图形表现。本文将向读者介绍Python画轨迹图的好处、如何使用以及如何在项目合适的地方使用轨迹图。 了解Python轨迹图 为了更…

爬取古诗文网的推荐古诗

爬取古诗文网的推荐古诗 思路分析完整代码结果展示 思路分析 本次的主要目的是练习使用正则表达式提取网页中的数据。 该网站的推荐古诗文一共有10页,页码可以在URL中进行控制,比如说,下面的URL指的是第一页。 https://www.gushiwen.org/def…

Python程序写诗【训练1分钟】古诗生成

原创AI程序写诗:训练 一分钟,诗词一秒成! 先看看写出来什么诗~ 文章目录 来看看程序语料下载地址关于程序的一些基础更多诗词创作山水田园宫廷别塞战争抒情春节 来看看程序 from gensim.models import Word2Vec # 词向量 from random impor…

最全中华古诗词数据库,收录30多万诗词

诗词诗人数据库 mysql文件 收录13136个诗人 305131个诗词,还有诗词赏析和注解等,需要的同学可以下载 可以搜索微信小程序 诗词成语大全 看数据效果 下载地址 人们习惯用史料来描述文学史的高峰状态,而在当今大数据时代,我们或可尝…

Python爬取古诗词

一、需求 爬取网址:https://www.gushiwen.org/ 需求: (1)获取侧边栏【类型】信息; (2)获取每个类型中古诗文详情页信息; (3)提取详情页数据:古诗…