《软件方法》2023版第1章(09)基本共识上的沟通,SysML

DDD领域驱动设计批评文集

做强化自测题获得“软件方法建模师”称号

《软件方法》各章合集


1.3 UML

1.3.2 使用UML的理由

1.3.2.5 基本共识上的沟通

符号标准并不是随便哪个人拍脑袋定下来,然后毫无道理地强迫大家接受。符号背后往往隐含着我们对某个学科的一些基本共识。

如图1-13,最上一行的积分符号“∫”,幼儿园小朋友也能画出这样的形状,但其所代表的知识可能需要上到大学才能理解。如果要懂得为什么是这样一个符号,还需要了解数学史中莱布尼茨、傅立叶等人的贡献。图1-13中间一行的五线谱小豆芽和横线,最下一行的小人圈圈和框框,也是如此。

图片

图1-13 符号背后隐含基本共识

这意味着,学习符号标准并非硬生生把形状记住后照葫芦画瓢就行,还要学习背后的一些建模知识。但是,开发团队成员咬咬牙,花费一些精力跨过这个门槛是值得的,因为一旦有了基本共识,会大大提高沟通的效率和深度。在严谨建模思维的追问之下,有意无意遮掩的脓包也会被强制露出——这也是一些“高手”潜意识里不愿意直面UML的深层原因。

★花絮:面对一个棋局,下一步怎么走?在业余棋手看来到处都是正确答案,在职业棋手眼里,值得讨论的选项只有两三种,因为职业棋手针对一些东西形成了共识,大大减少了思考中的浪费。

★花絮:有的开发人员的“十年工作经验”实际上是“一年工作经验用了十年”,一直在热热闹闹的民工层次徘徊,没有积累和成长。

不过要注意一点:使用UML沟通仅限于软件组织内部,UML模型不是用来和涉众沟通的!这个道理以及和涉众沟通的技能将在第7章详细叙述。

1.3.3 SysML

SysML是系统工程建模的一种表示法标准。它是由INCOSE(国际系统工程协会)和OMG(对象管理组织)以UML为基础,进行系统工程方面的扩展后推出的。其目的和UML类似:统一系统工程的建模语言。

UML是信息系统的建模语言。“信息系统”的意思是该系统只负责处理信息:信息流进来,经过系统的处理,变成信息流出去,但是,信息系统不能处理物质流、能量流。

SysML相当于把“UML”扩展到各种类型的系统,这些系统可以处理各种各样的物质流、能量流。因此,SysML和UML不冲突,也不存在取代的关系。

我用刘慈欣的小说《流浪地球》举个例子。

太阳即将在400年内发生氦闪变成红巨星,人类社会怎么办?

众多科学家经过大量研究,得到一个解决方案:给地球装上发动机,驱动地球飞向比邻星(正好三体舰队也迎面飞来,嘭!)。

******

小说《流浪地球》原文:

地球发动机安装在亚洲和美洲大陆上,因为只有这两个大陆完整坚实的版块结构才能承受发动机对地球巨大的推力。地球发动机共有一万二千台,分布在亚洲和美洲大陆的各个平原上。

……

在六千米处,我们见到了进料口,一车车的大石块倒进那闪着幽幽红光的大洞中,一点声音都没传出来。

……

“重元素聚变是一门很深的学问,现在给你们还讲不明白。你们只需要知道,地球发动机是人类建造的力量最大的机器,比如我们所在在华北794号,全功率运行时能向大地产生一百五十亿吨的推力。”

******

“地球发动机”是一个巨大的系统,横跨多个学科,能源、材料、建筑、物流、人员管理……。

其中用来描述和处理信息的信息系统可能只占其中的一小部分,UML不适合描述“地球发动机”,SysML可以。

通过SysML不断把“地球发动机”分解成各个Block,Block又分为小Block,可能会得到其中一个Block叫“发动机中控系统”,这是一个信息系统。该系统其中一个功能可能是:根据接收到的测量参数值(可能有上万个),计算地球发动机下一步的最佳行动。我用SysML的块定义图画了图1-14,只是简单展示,我也不知道地球发动机应该分成哪些Block。

图片

图1-14 地球发动机的分解

图1-14中的“发动机中控系统”这个信息系统,就适合用UML来建模。

听起来SysML描述的系统比UML描述的信息系统大,是不是意味着SysML更复杂?

其实恰好相反。在对UML和SysML都有所掌握之后,您会发现使用SysML比使用UML更容易。

使用SysML建模时,更多的是“描述”,而在使用UML建模时,除了“描述”之外,更重要的是“构思”。

像上面说的“根据接收到的测量参数值(可能有上万个),计算地球发动机下一步的最佳行动”,这个事情人也可以做到,因为计算的方法就是人指定的嘛,只不过人算得慢而且容易出错,所以用信息系统来做。

也就是说,我们需要把人脑总结出来的各种知识转移到信息系统中,并用它来取代人脑来做计算。信息系统的一切,包括规则如何表达,数据如何组织,各个部分的耦合、内聚等等,都需要我们一个一个构思。

非信息系统的建模并没有“取代人脑”的压力。当然,不是说非信息系统就没有难度。

像《流浪地球》原文提到的“重元素聚变”,我用SysML画了一张活动图,如图1-15。可以看到,这个过程处理的是物质和能量,原料和催化剂进来,变成能量出去。

图片

图1-15 重元素聚变过程

打问号的地方,例如聚变过程的各个步骤应该怎么进行,催化剂是哪些,这些难题都需要各个学科的科学家去攻克。不管是SysML还是UML都是搞不定这个的。

科学家们研究出成果之后,可以用SysML来描述和帮助验证,涉及到人脑思考的地方,可以用UML来帮助构造信息系统取代人脑思考。

目前正式的SysML最新版本是1.6。2023年7月,OMG通过了SysML V2的β版本。

从目前的信息看,SysML V2有很大的变革,特别是大刀阔斧地清理术语。UML虽然把各种建模“方言”统一成“普通话”,但仍然做了一些妥协,留有各种冗余的尾巴。衍生自UML的SysML也不可避免存在冗余的问题。如果SysML大胆迈出这一步,把非必要的术语全部清理(和领域驱动设计圈子热衷造词形成鲜明对比),也许能促进UML做出类似变革。

OMG的SysML规范:https://www.omgsysml.org

1.4 应用UML的建模工作流

(待续……)

10月23-27晚8点-软件需求设计方法学全程实例剖析网课(1级)

[3级]类的精细建模高阶+10月30-11月1日晚8点网络公开课

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

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

相关文章

使用 Kubernetes 简化平台工程

平台工程在现代应用程序开发和部署中发挥的作用至关重要。随着软件应用程序变得越来越复杂和分散,对稳健且可扩展的基础设施的需求变得越来越重要。这就是平台工程的作用所在,它是支持整个软件开发生命周期的支柱。让我们深入探讨平台工程在创建和维护应…

【SA8295P 源码分析】105 - QNX MISC分区读写、切换A/B启动槽、读取开机次数命令 swdl_utils 介绍 及 祼分区读写 代码实现

【SA8295P 源码分析】105 - QNX MISC分区读写、切换A/B启动槽、读取开机次数命令 swdl_utils 介绍 及 祼分区读写 代码实现 一、切换 A/B 槽启动分区二、读取开机次数三、写 MISC 信息四、Dump Misc 信息五、misc 祼分区读写 代码实现系列文章汇总见:《【SA8295P 源码分析】00…

收集Stream流

Stream流的收集操作 收集Stream流的含义:就是把Stream流操作后的结果数据 转回 到 集合 或者 数组 中去。Stream流:方便操作 集合 / 数组 的 手段。集合 / 数组:才是开发中的 目的 。 Stream流的收集方法 R collect(Collector co…

[Python进阶] 操纵键盘:PyAutoGUI

6.5 操纵键盘:PyAutoGUI 6.5.1 keyDown、keyUp 按下或弹起某个按键。在按下时不会释放。 参数: key(str): 要按下的键。有效的名称列在KEYBOARD_KEYS。 logScreenshot:是否要截图并保存在当前文件夹下。 import pyautoguipyautogui.keyDown(f) # 模拟…

SpringAOP是什么?为什么要有SpringAOP?

SpringAOP是什么?为什么要有SpringAOP? 原文:SpringAOP是什么?为什么要有SpringAOP? 一、有SpringAOP之前 简单的开发场景,只需要写简单的业务逻辑,比如CRUD 但是在执行具体的逻辑之前&…

Golang安装和配置指南:从零开始的高效开发之旅

Golang(又称Go)是一种快速、可靠且高效的编程语言,由Google开发并在开源社区广泛应用。Golang的设计目标是通过简洁的语法和强大的并发模型提供高效的开发体验。在本文中,我们将指导您如何安装和配置Golang,以便开始您…

Python中兔子递归函数的例子

本文将详细介绍Python中兔子递归函数的例子,展示递归函数的基本实现方法及其原理。 一、递归函数的概念 递归函数是指在函数内部调用自身的函数。通过递归函数,可以将复杂问题分解成简单的子问题来解决。 这种过程是有限的,当子问题足够小…

【大数据Hive】hive select 语法使用详解

目录 一、前言 二、Hive select 完整语法树 三、Hive select 操作演示 3.1 数据准备 3.1.1 创建一张表 3.1.2 将数据load加载到t_usa_covid19表 3.1.3 再创建一张分区表 3.1.4 使用动态分区插入数据 3.2 select 常用语法 3.2.1 查询所有字段或者指定字段 3.2.2 查询…

kafka安装和使用的入门教程

这篇文章简单介绍如何在ubuntu上安装kafka,并使用kafka完成消息的发送和接收。 一、安装kafka 访问kafka官网Apache Kafka,然后点击快速开始 紧接着,点击Download 最后点击下载链接下载安装包 如果下载缓慢,博主已经把安装包上传…

使用匿名函数在Golang中的好处

发挥Golang中无名代码块的潜力 匿名函数,也被称为lambda函数或闭包,是Golang中的一个强大功能,提供了许多好处。这些无名代码块为开发人员在设计和构建其代码时提供了更大的灵活性和模块化。在本节中,我们将探讨使用匿名函数可以…

《Python基础教程》专栏总结篇

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:为什么Java代码可以实现…

国外的跨境物流有什么学习的地方

国外的跨境物流的学习点可以从以下几个方面入手: 跨境物流的技术与流程:学习国外跨境物流的技术和流程,了解国外先进的物流设备和仓储管理系统。 国际贸易政策和法规:熟悉国际贸易政策和法规,包括出口清关流程、运输协…

python - 内存池的机制

内存池是一中用于管理内存分配的机制,它可以提高内存分配和释放的小路,内存池通常由一块预先分配好的内存区域和一个空闲列表组成,当需要内存分配内存时,内存会重空闲列表中取出来医疗空闲的内存,当释放内存时&#xf…

头部品牌集体扑街!2023年9月京东平板电视TOP10品牌排行榜出炉

鲸参谋监测的京东平台9月份平板电视市场最新销售数据已出炉! 根据鲸参谋平台的数据显示,9月份,京东平台大家电品类——平板电视的整体销售呈现下滑。具体地,9月平板电视的销量为62万,环比降低约18%,同比降低…

oracle 同一张表同时insert多条数据 mysql 同一张表同时insert多条数据

oracle 同一张表同时insert多条数据 在Oracle数据库中,你可以使用INSERT ALL语句同时向同一张表插入多条数据。INSERT ALL语句允许你一次执行多个插入操作,可以提高插入的效率和速度。 以下是使用INSERT ALL语句插入多条数据的示例: INSERT…

线程安全问题 的小案例

package Thread_api_test;public class ThreadSafety {//模拟线程安全问题public static void main(String[] args) {//1:创建一个账户对象 代表两个人的共享账户Account accnew Account("ICBC",10000);//创建两个线程 分别两个人 再去同一个账户里取钱10000new Draw…

【Python机器学习】零基础掌握HDBSCAN聚类

如何在大量数据中识别出有用的模式或群体? 在我们日常生活和工作中,数据无处不在。但,在大量数据中找到有用的信息却并非易事。特别是对于那些不具备数据科学背景的人来说,这一任务更加艰巨。那么有没有一种方法,不仅高效还易于理解,能帮助我们从复杂的数据中提取有用的…

细说晶振元件HC49U的功能、应用及性能特点 | 百能云芯

在电子领域,晶振(Crystal Oscillator)是一种重要的元件,用于产生稳定的时钟信号。HC49U是一种常见的晶振型号,具有广泛的应用范围。云芯将带您深入探讨HC49U晶振的功能、应用领域,以及其性能特点&#xff0…

postman接口测试

HTTP的接口测试工具有很多,可以进行http请求的方式也有很多,但是可以直接拿来就用,而且功能还支持的不错的,我使用过的来讲,还是postman比较上手。 优点: 1、支持用例管理 2、支持get、post、文件上传、响…