交流伺服系统设计指南_交流设计

交流伺服系统设计指南

软件设计至关重要。 它是应用程序的基础。 就像蓝图一样,它为所有背景的聚会提供了一个通用平台。 它有助于理解,协作和发展。

设计不应仅视为开发的要素。 它不应该仅仅存在于开发人员的脑海中,否则团队将发现它几乎无法增长,因为知识很难获得。 而且,当员工离职时,公司会损失更多的价值。

应用程序代码应通过将领域模型有效地转换为清晰的抽象来描述设计。 这些应该经过良好的编码,良好的命名和良好的定义。 但这还不够。

设计不仅应存在于代码中。 尽管使用该层来表达设计对于开发团队来说可能已经足够,但是拒绝了其他对应用程序设计感兴趣的人。 他们要么无法物理检索代码,要么没有软件开发背景,要么就没有时间自己弄清楚设计。

有时,在编写大量代码之前,需要在多团队组织中讨论和完善高级设计。 在这种情况下,很明显,即使代码表达了设计,也不应仅将其包含在代码中。 为此,设计建模已成为一个单独的过程。

表达系统设计

设计不仅涉及类以及它们之间的关系。 这也与合作和行为有关。 关于用例,状态和活动。

交流设计的主要形式如下。 由于UML的普及性, UML被用作参考,但是没有人会受其符号或术语的约束,因为重点应该放在有效的沟通上。

结构体

概述图

使用一组描述部署策略,程序包,模块和组件的图来描述系统结构概述。

最高级别的概述之一是部署,按照应用程序使用的基础结构实体进行描述。 UML描述了实现该目的的部署图 ,该部署图由节点组成,例如Web服务器,应用程序服务器,数据库服务器和客户端。

系统中部署的组件具有外部依赖性。 这些应记录在案。 UML为此目的规定了程序包图 ,它描述了程序包合并和导入关系。

详细图表

在较低的层次上,通过展示类及其之间的关系来描述系统的结构。

类图

类图描述了系统的类,包括它们的属性,操作(或方法)以及它们之间的关系。

关系可以具有多种类型,例如,依赖性,关联性,组成,继承。 应该清楚地表达它们,以便开发人员团队可以手动设计系统,也可以使用根据类图生成类的工具来设计系统。

在UML中 ,类成员可以具有以下类型的可见性:

  • 公开 :+
  • 私人的 :–
  • 受保护的 :#
  • 派生 :/,该属性是根据另一个元素的属性计算得出的
  • 包装方式 :〜

在UML中 ,定义了以下关系:

图1

  • 关联 :表示一系列链接,可以是单向或双向的; 关联可以被命名;
  • 继承/泛化 :一类是另一类的专门形式
  • 实现/实现 :一个类实现一个接口
  • 依赖性 :两个元素之间的单向关系,当对一个元素的更改导致需要更改另一个元素时发生
  • 集合 :“具有”关联,只能是双向的; 在聚合关系中,聚合组件可以存在于容器外部
  • 组成 :更强大的聚集关系,其中聚集的组件不能“存在”于容器外部,例如汽车的引擎

类结构图

这种类型的图显示了类的内部结构。 它们可以包括其协作者如何与之交互以及如何与之交互。

在UML中 , 复合结构图包括内部零件,端口和连接器。 端口促进了班级内部以及与外界的交流。 连接器位于零件和端口之间。

斐波那契系统的复合结构图如下所示:

图2

互动互动

一个系统内发生的交互与其结构一样重要,甚至更多。 实际上,行为是用户所体验的,因此对其进行精确描述和早期建模可以使参与该项目的每个人都省去很多麻烦。

用例

用户与系统进行交互以满足目标。 实现目标所需的一组交互作用形成一个用例 。

与一组用户故事相反,表示这些交互对于以紧凑形式可视化需求非常重要。 UML定义了用例图 ,其中涉及不同的参与者和系统。

互动概述

在更高的层次上,可以用模块之间的交互来描述系统,通常是为了建模控制流。 就此而言, UML定义了交互概述图和活动图 。 交互概述图可以描述由多个交互组成的控制流,而活动图的详细程度较低,描述了实际条件,逻辑和动作。

详细互动

消息序列图捕获了协作类之间的操作顺序。 在UML中 ,它们称为序列图。 这些类型的图不仅描述了类如何交互,而且还包括时间元素,建立了交互的顺序或顺序:

图3

水平箭头显示两个协作者之间交换的消息。 垂直线(也称为生命线)捕获了两个类之间可能发生的所有通信。

在具有复杂约束和条件的环境中,系统状态可能难以可视化。 最直观地讲,该系统可以表示为状态机,其节点数量与状态一样多,并且条件会在附加到标记过渡的箭头的状态之间进行切换。 为了提高可读性,应抽象出复杂的条件并以简洁的方式表达。

在UML中 ,状态图使用标准化表示法表示状态。 实心圆表示初始状态。 空心圆代表最终状态。 圆角矩形表示给定的命名状态。 箭头表示与事件相关的过渡。 还提供了事件名称:

图4

建模技术

可以使用文本和图形两种基本方法来描述设计。 通常,人们倾向于对图像更感兴趣,但文本模型倾向于更具描述性。 存在混合功能,可以同时进行高级概述和可视化详细信息的功能。

执行文本建模,以形式化语言表达需求。 这些模型倾向于以牺牲总体概观为代价提供更多细节。 在某些方面,创建速度被认为比图形方法要高,因为在图形方法中,设计人员需要在鼠标和键盘之间进行切换。 格式化趋向于更快,更高质量。 同样,鉴于基于文本的格式,版本控制的使用变得更加自然。

但是,对于文本建模,理解模块往往是一项更具挑战性的任务。 更现代的工具提供了显示基于树的结构或状态机的方法来克服此问题,但这并不总是足够的。 无法解决的一个特定问题仍然是动画和仿真,如果需要,应将其视为转向图形方法的基础。

使用图形建模,用户无需使用建模工具即可学习任何东西。 设计往往不太像编程,因为用户可以将更多的内容与他们要建模的概念联系起来。 学习系统时,从高级到低级再回到高级很容易。

结论

交流设计与设计同等重要。 必须避免将设计锁定在开发人员的思想和/或代码中。 相反,应该有效地进行沟通,以便项目中的每个人都可以访问它。

翻译自: https://www.javacodegeeks.com/2016/08/communicating-design.html

交流伺服系统设计指南

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

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

相关文章

【前缀和与差分】

前缀和 前缀和的作用:快速计算数组中某一段区间内的总和 1.需要两个额外的数组,来存储原始数据的数组 和 计算过前缀的数组。其原理为前缀和的数组中每个元素用来保存前i个原数组中的和,下一个元素更新就采用s[i] s[i] - 1 a [i] 来持续更…

allergro音乐术语什么意思_rit(这是音乐术语)什么意思?

是渐慢的意思常用的音乐表情术语:速度标记largo——广板lento——慢板adagio——柔板grave——壮板andante——行板andantino——小行板moderato——中板allegretto——小快板allegro——快板vivo——快速有生气vivace——快速有生气presto——急板常用的音乐表情术…

英文连词_连词我们…讨厌

英文连词最近,我写了与实现相关的名称,并提供了一些示例,这些示例由于方法名称与主体之间的紧密关系而导致方法名称不正确。 有一会儿,我们有以下代码: boolean isComplexOrUnreadableWithTests() { return (complex…

Ubuntu系统手动安装英伟达驱动程序

屏蔽开源驱动nouveau 安装过程会询问是否屏蔽,手动屏蔽也有多种操作方式, sudo gedit /etc/modprobe.d/blacklist.conf 加参数到最底下回车另起一行内容为 blacklist nouveau options nouveau modeset0 保存再终端更新内核命令 sudo update-initr…

workbench拓扑优化教程_workbenchds拓扑优化分析.ppt

workbenchds拓扑优化分析形状优化基础 指定Shape Optimization 将执行形状或拓扑优化 Shape Optimization是一个优化问题,其结构能量在减少结构体积的基础上的最小化 另一种观点就是Shape Optimization尽量得到关于体积比率的最好刚度. Shape Optimization尽可能的找寻可以在对…

maven 父maven_Maven神秘化

maven 父maven由于我的Android开发的背景下,我比较习惯到Gradle ,而不是Maven的 。 尽管我知道Gradle基于Maven,但我从未调查过幕后发生的事情。 在过去的一周中,我一直在尝试了解细节并找出Maven的不同组成部分。 什么是Maven M…

【WebRTC---序篇】(一)为什么要使用WebRTC

1.1.1自研直播客户端架构 一个最简单的直播客户端至少应该包括音视频采集模块,音视频编码模块,网络传输模块,音视频解码模块和音视频渲染模块五大部分。如下图所示 1.1.2拆分音视频模块 在实际开发中,音频和视频处理完全是独立的。如下图所示,经过细分后,音频采集与视频…

python实现lenet_吴裕雄 python 神经网络TensorFlow实现LeNet模型处理手写数字识别MNIST数据集...

importtensorflow as tftf.reset_default_graph()#配置神经网络的参数INPUT_NODE 784OUTPUT_NODE 10IMAGE_SIZE 28NUM_CHANNELS 1NUM_LABELS 10#第一层卷积层的尺寸和深度CONV1_DEEP 32CONV1_SIZE 5#第二层卷积层的尺寸和深度CONV2_DEEP 64CONV2_SIZE 5#全连接层的节点个数F…

DFS(深度搜索最简单的应用)

全排列数字 #include<iostream>using namespace std;const int N 10;int n 3; //最终输出 int path[N]; //记录当前使用过的数 int st[N];void dfs(int u) {if (u n){for (int i 0; i < n; i)printf("%d ", path[i]);puts("");return;}for (…

lucene学习笔记_学习Lucene

lucene学习笔记我目前正在与一个团队合作&#xff0c;开始一个基于Lucene的新项目。 虽然大多数时候我会争论使用Solr还是Elasticsearch而不是简单的Lucene&#xff0c;但这是一个有意识的决定。 在这篇文章中&#xff0c;我正在整理一些学习Lucene的资源–希望您对他们有所帮助…

websocket没准备好如何解决_那些很重要,但是不常用的技术,websocket

目录1. 为什么会有websocket2. websocket协议格式3. 协议具体实现一、为什么需要 WebSocket&#xff1f;初次接触 WebSocket 的人&#xff0c;都会问同样的问题&#xff1a;我们已经有了 HTTP 协议&#xff0c;为什么还需要另一个协议&#xff1f;它能带来什么好处&#xff1f;…

DFS深搜与BFS广搜专题

一般搜索算法的流程框架 DFS和BFS与一般搜索流程的关系 如果一般搜索算法流程4使用的是stack栈结构(先进后出&#xff0c;后进先出)那么就会越搜越深。即&#xff0c;DFS&#xff0c;DFS只保存当前一条路径&#xff0c;其目的是枚举出所有可能性。反之&#xff0c;如果流程4使…

cloud foundry_使用“另类” Cloud Foundry Gradle插件无需停机

cloud foundry我一直在尝试编写用于将应用程序部署到Cloud Foundry的gradle插件 &#xff0c;并在上一篇文章中写了有关此插件的文章 。 现在&#xff0c;我通过使用两种方法支持将无停机时间部署到Cloud Foundry中来增强此插件&#xff1a; 自动驾驶风格部署和更常用的蓝绿色风…

lisp文字上标源码_创建文本/标注样式源码 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...

本帖最后由 zhengxiansz 于 2014-4-27 11:27 编辑GU_xl你好&#xff01;请帮我看一下这个创建文本/标注样式源码。第一次输入IT1命令时没有报错的提示。如果重复输入IT1命令时就会提示该名称已被使用&#xff0c;是否重新定义&#xff1f;请问有什么方法可以解决吗&#xff1f;…

从前有座山,山里有座庙:递归之法

递归描述 递归调用是函数内部调用自身的过程&#xff0c;递归必须要有结束条件&#xff0c;否则会进入无限递归状态。无法停止。 我们称这个条件为&#xff08;递归基&#xff09; 递归原理 递归包括&#xff08;递推&#xff09;和&#xff08;回归&#xff09;&#xff0c;…

你只是看起来很努力_我的方法在这方面看起来很大吗?

你只是看起来很努力以下Java方法的大小是多少&#xff1f; public Collection getDescription() {SystemLibrary systemLib registry.get(SystemLibrary.class);Analysis analysis systemLib.getCurrentAnalysis(registry);return getDescription(analysis);}这个不起眼的方…

0xFFFFFF的问题

这个有两个结果&#xff1a;16777215和-1 如果是单纯的16 进制数&#xff0c;那么转换为10 进制数为16777215。相信这个转换结果很好理解&#xff1a;15*16^015*16^1...15*16^5。j即&#xff08;int型所能表示的最大值&#xff09; 第二种情况就是 0xFFFFFF 如果是在计算机中…

js模仿f11全屏_JS实现全屏预览F11功能的示例代码

老是不通过&#xff0c;没办法&#xff0c;只能是重新发布了&#xff0c;反正我就是杠上了&#xff0c;大大小小写过很多前端特效&#xff0c;当然也经常在网上copy或者修改人家的代码&#xff0c;我觉得也挺好的&#xff0c;为什么&#xff1f;&#xff01;因为我想这样&#…

懒惰学习_懒惰评估

懒惰学习最近&#xff0c;我正在编写log4j附加程序&#xff0c;并希望在自定义附加程序创建过程中使用logger记录一些诊断详细信息&#xff0c;但是log4j初始化仅在创建附加程序实例后才完成&#xff0c;因此在此阶段记录的消息将被忽略。 我感到需要在自定义附加程序中进行延…

leetcode(动态规划专题)

线性DP 53. 最大子数组和 思路 code int maxSubArray(vector<int>& nums) {//res:最后所有状态的最终Max结果//lat:当前f[i]状态的Maxint res INT_MIN, last 0;for (int i 0; i < nums.size(); i){//当前f[i]状态最大值(使用下面的状态转移方程得出)//f[i] …