交流设计

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

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

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

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

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

表达系统设计

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

交流设计的主要形式如下。 由于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/351836.shtml

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

相关文章

云顶之弈机器人法爆_LOL云顶之弈机器人出装怎么选

LOL云顶之弈有很多强力英雄,例如机器人正是当中之一。该棋子可以搭配多种阵容,因此装备选择非常重要。那么机器人怎么出装?下面就为大家带来LOL云顶之弈机器人出装推荐。LOL云顶之弈机器人出装怎么选7人口成型8人口上龙女,9人口千…

C/C++图形化编程(1)

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 信念是一把无坚不摧的利刃&#xff01…

在VS2010中使用Git【图文】

在之前的一片博客《Windows 下使用Git管理Github项目》中简单介绍了在Windows环境中使用Git管理Github项目,但是是使用命令行来进行操作的,本文将简单介绍下在VS2010中怎样使用Git,并来管理Github上的项目。 准备 安装Git命令行,…

Docker swarm 笔记

防火墙开放端口: TCP port 2377为集群管理通信TCP and UDP port 7946 为节点间通信UDP port 4789 为网络间流量创建attachable network docker network create --driveroverlay --attachable mynet-core 查看网络 docker network ls在manager1上创建swarm集群&#…

LeetCode-reverse integer复杂度

1、题目: Reverse digits of an integer. Example1: x 123, return 321Example2: x -123, return -321 Have you thought about this? Here are some good questions to ask before coding. Bonus points for you if you have already thought through this!…

juyter显示决策树图形_决策树分析细分市场

一,前言决策树就是利用图形来表述某项决策的本质,展现了各种选择和不确定因素之间的相互关系。决策树是一个利用像树一样的图形或决策模型的决策支持工具,包括随机事件结果,资源代价和实用性。它是一个算法显示的方法。决策树经常…

测试框架之GTest

gtest是google的一个C/C测试框架,由C实现,可在http://code.google.com/p/googletest/下载其源码及库文件。 gtest用法和cppunit用法差不多,个人比较习惯gtest,使用比cppunit方便些。主要通过宏TEST_F定义测试用例,通过…

idea使用junit测试_在JUnit测试中使用Builder模式

idea使用junit测试这并不是要成为技术含量很高的职位。 这篇文章的目的是为您提供一些指导,以使您的JUnit测试生活更加轻松,使您能够在几分钟内编写复杂的测试场景,并获得具有高度可读性的测试。 单元测试中有两个主要部分,需要编…

LeetCode-best time to buy and sell stock 2 数组

1、问题: Say you have an array for which the i th element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock mu…

机器人酷跑闯关_机器人酷跑游戏下载-机器人酷跑手机版下载-地之图下载

机器人酷跑是一款机器人跑酷为游戏题材的动作冒险类游戏。在游戏中你将变成一个小机器人,你需要在各个平台上不断的进行跳跃,躲避各种障碍物以及陷阱,让你可以安全的到达终点。感兴趣的话就赶紧下载游戏玩玩吧!机器人酷跑游戏简介…

Visual Studio属性配置中使用宏

在学习C语言的时候,我们曾经遇到过一个宏的概念。宏的作用机理本质上是宏的展开,C语言中的宏的用法也有很多种(水其实很深...),不过从感觉上来讲,人们大致上会在以下的场景中,利用宏来解决一些窘…

CodeForces - 500A-New Year Transportation(模拟)

New Year is coming in Line World! In this world, there are n cells numbered by integers from 1 to n, as a 1  n board. People live in cells. However, it was hard to move between distinct cells, because of the difficulty of escaping the cell. People wanted…

LeetCode-best time to buy and sell stock 1 数组

1.问题 Say you have an array for which the i th element is the price of a given stock on day i. If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit. …

linq 清除一条数据中的某个字段值_B端通用批量数据导入方案设计

点击上方蓝色字体,关注我B端通用批量数据导入方案设计文 | 3548字估计阅读 | 9分钟引题B端产品经常遇到大量数据录入的需求。如春季招聘完成后,给新招的120个员工建立员工档案,并创建员工帐号。如果逐条将大量的数据录入系统,将花…

Google C++单元测试框架(Gtest)系列教程之一——入门

引言 本文将先介绍单元测试的相关概念,然后引入Google的开源C单元测试框架Gtest,最后通过编译、运行Gtest自带的一个测试样例,介绍如何在Unix/Linux下使用Gtest。 单元测试 说到单元测试,大家应该不会陌生。作为软件开发过程…

luoguP3185 [HNOI2007]分裂游戏 枚举 + 博弈论

每个位置的瓶子中的每个石子是一个独立的游戏 只要计算出他们的\(sg\)值即可 至于方案数&#xff0c;反正不多\(n^3\)暴力枚举即可 反正怎么暴力都能过啊 复杂度\(O(Tn^3)\) #include <cstdio> #include <cstring> #include <iostream> #include <algorit…

opencv图像前景目标提取

1、功能 论文图片处理需要用到简单的前景目标提取&#xff0c;这里采用opencv的grabCut函数&#xff1b; 前期可以采用selectROI获取矩形框&#xff08;需要添加contrib库&#xff09;&#xff0c;也可以手动设定rect&#xff1b; 添加了一个图片批处理操作&#xff0c;glob函数…

内存结构 堆 栈 全局区 常量区 代码区

转载&#xff1a;https://blog.csdn.net/levy1021/article/details/45419381

批量提交 kafka_Kafka精华问答|kafka的使用场景是什么?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。作为一种高吞吐量的分布式发布订阅消息系统&#xff0c;有着诸多特性。今天&#xff0c;就让我们一起来看看关于它的精华问答吧&#xff01;1Q&a…

Gtest在vs 2010上的配置

找了好多文章&#xff0c;发现这篇是讲得最简便、正确的&#xff01; 以下为复制&粘贴的&#xff1a; [cpp] view plaincopyVS2010 gtest简易配置 使用一个简单的控制台来演示。 1.下载google test http://code.google.com/p/googletest/downloads/detail?nameg…