软件工程(三):软件设计
三、软件设计
目录
- 三、软件设计
- 一、软件工程开发方法与软件设计
- (一)功能分解法——传统开发方法,面向过程
- (二)结构化方法——传统开发方法,面向过程
- (三)面向对象方法
- (四)面向对象的几个基本概念
- (五)软件设计的原则
- 二、体系结构设计——软件整体的架构
- (一)软件体系结构要素
- (二)体系结构风格
- 三、类/数据建模设计——变量的设计
- (一)DFD——结构化方法数据流图
- (二)CRC卡片分拣法——面向对象方法
- 四、行为建模与设计——函数的设计
- (一)状态图
- (二)顺序图
- (三)协作图
- (四)活动图
- 五、物理建模与设计
一、软件工程开发方法与软件设计
(一)功能分解法——传统开发方法,面向过程
将功能自顶向下逐级分解直至能够被明确定义,设计子功能的数据结构以及它们之间的接口
优缺点:直接反应用户的需求,容易开始工作;但是对需求变化的适应性很差,局部的错误和修改牵动全局(父节点对子孙节点的影响)
(二)结构化方法——传统开发方法,面向过程
设计一系列功能以解决问题,根据事情发生发展的顺序来设计,并寻找适当的方法存储数据,立足于步骤
1、结构化分析
使用数据流图(DFD)的方式分析问题域中数据是如何移动的
2、结构化设计
使用功能分解法将大系统分解成若干个模块
3、结构化编程
缺点:结构化方法以功能分解和数据流为核心,但是系统功能和数据表示极有可能发生变化,这样对应的分析和设计就得重新来过,效率降低。不是直接映射问题域,与事物相关的数据和操作不是围绕这些事物来组织的,而是分散在数据流和加工中,这样的分析模型难以和设计模型相对应
(三)面向对象方法
任何系统都是由能够完成一组相关任务的对象构成,一个对象直接映射问题域的一个实际事物,分析模型和程序良好对应,对象之间通过调用方法来相互访问对方的数据,立足于问题相关的实体。
考虑的是对象的行为
1、面向对象分析(OOA)
分析和理解问题域,找出类和对象,描述对象,分析内部构成
2、面向对象设计(OOD)
将OOA细化,描述对象之间的交互,强调各对象之间如何协作,补充一些如数据存储,操作细节等
3、面向对象编程
编写代码
(四)面向对象的几个基本概念
对象、类、继承、多态、消息在这里不多赘述,大家自行百度
(五)软件设计的原则
抽象:关注事物中与问题相关部分而忽略其他无关部分的一种思考方法
封装:每个软件单元对其他所有单元都隐藏自己的设计决策,各个单元的特性通过其外部可见的接口来描述
模块化:在逻辑和物理上将整个系统分解成多个更小的部分,其实质是“分而治之”,即将一个复杂问题分解成若干个简单问题,然后逐个解决,系统分解的目标是高内聚低耦合(不赘述)
层次化:不同的层级做不同的事
复用:利用某些已开发的、对建立新系统有用的软件元素来生成新的软件系统,其好处在于提高生产效率,提高软件质量
二、体系结构设计——软件整体的架构
软件体系结构包括构成系统的构件、构件之间的交互、构件的组合模式以及在这些模式中的约束
(一)软件体系结构要素
软件体系结构=构件+连接件+约束
1、构件:系统中发挥一定功能、作用的软件体的抽象
特点:可分离、可替换、可配置、可复用
由接口和实现两部分组成,接口是与外部环境交互的通道,实现是构件自身功能的实现
2、连接件,是个抽象的概念
由机制(过程调用、消息发送、数据传输、同步还是异步)和协议(建立在物理层面的规约,规定通信的格式)构成
3、约束
不同层次的构件负责不同的职责
(二)体系结构风格
1、数据流风格(管道过滤器风格)
由管道和过滤器组成,管道负责传输数据,过滤器负责接受上个管道加工数据并输出到下一个管道,过滤器之间相互独立
2、以数据为中心的风格(仓库)
数据存储位于这种体系结构的中心,其他构建会经常访问该数据存储——剪贴板
3、调用和返回体系结构风格
该风格是结构化程序设计的典型风格,构件包括主程序和子程序,连接器是调用返回机制
4、面向对象体系结构风格
构件是类,连接件是函数调用和消息传递
5、层次体系结构风格
客户机/服务器(C/S):客户机负责用户交互、业务逻辑、与服务器通讯;服务器负责与客户机的接口、业务逻辑和数据管理。客户机为完成特定工作向服务器发出请求,服务器处理客户请求并返回结果
三层客户机/服务器结构:在客户端与数据库服务器之间加了中间层,业务逻辑层,负责原客户端和服务器端的业务处理工作
浏览器/服务器(B/S)其实是四层C/S风格,将原客户机拆解成浏览器和web服务器(不需要下载客户端,相当于网页的形式,系统维护的成本低)
三、类/数据建模设计——变量的设计
(一)DFD——结构化方法数据流图
描绘数据在系统中各逻辑功能模块之间的流动和处理过程。
包括数据流(数据传播的路径;用连线表示)、加工(对数据流进行某些操作;用圆圈表示,标注序号和操作)、数据存储(数据库文件;用两条横线表示,还有其他表示方法)、外部实体(系统外环境中的人,或者其他软件;用矩形表示)
环境关联DFD图(顶层DFD图):描述了系统与外部环境之间的数据输入输出关系
系统内部DFD图(0层、1层…):将顶层DFD图中的系统分解成若干个子系统,并描述子系统之间的接口和活动得到0层DFD图(加工的序号为1,2,3…),对0层的某一个子系统继续分解得到1层DFD(加工序号为1.1,1.2,1.n,2.1…)、2层DFD(加工的序号为1.1.1,1.1.2,1.2.1,…)…
注意事项:数据流一定要经过加工才能流入流出,不能直接在外部实体、数据存储中直接流通;加工一定要有流入流出;数据流不能连续流过两个加工
(二)CRC卡片分拣法——面向对象方法
1、通过名词过滤识别并筛选出候选类
2、通过动词识别并筛选出类的功能职能
3、识别交互协作关系
四、行为建模与设计——函数的设计
(一)状态图
描述对象的所有可能状态以及因其他事件的发生而引起的状态之间的转移,不适合描述多个对象之间的行为协作,需要和其他技术组合使用
(二)顺序图
1.在顺序图顶端绘制矩形框,定义参与交互的类实例(对象)名;
2.在每个对象下面绘制竖直虚线,表示该对象的生命线;
3.在对象间添加箭头表示各种类型的消息,跟踪对象间的控制流;
4.生命线加竖直矩形定义对象激活期,表明对象正在执行某操作;
5.根据需要添加框的组合与关联,表示复杂的控制结构
(三)协作图
主要用于描述一组有相互合作的对象之间的交互和链接,不像顺序图那样有严格的时间维度
(四)活动图
和状态图长得十分类似,但是状态图是描述单个对象的,而活动图是描述一个用例的
守护条件:约束转移的判断,守护条件为真时转移才可以开始
决策:用菱形表示,表示触发事件引起转移
同步棒:并行转移在合并前必须都被执行了,也可以用于并发跳转
也可用泳道来提升可读性
缺点:难以描述动作与对象之间的关系
五、物理建模与设计
组件图
未完待续,感谢阅读~
未经允许禁止转载
软件工程(三):软件设计相关推荐
- 【软件工程】软件设计概述
软件设计是一个过程,通过这个过程,创建一个软件工件的规范,目的是实现目标,使用一组原始组件并受到约束.[1]软件设计可以指"所有涉及概念化.框架化.实现.调试的活动,最终修改复杂系统&quo ...
- 用python和flask框架写MongoDB数据库网页(通院大三软件设计)运营商信息管理系统(1)环境配置
两周的软件设计结束,也该做个总结了,可谓是折磨,所幸结果是极好的.老师会建议用java,但是事实是班里最后用java做出web的全是买的代做,价格500-1000不等.我应该会多分几篇文章把它写完.会 ...
- 软件工程(软件计划)
软件工程是软件设计的灵魂,学习好软件工程,对于我们以后的学习非常重要. 软件工程是应用计算机科学,数学及管理科学等原理开发软件的工程,借鉴传统工程的原则.方法,以提高质 ...
- 软件设计与体系结构(第二版)部分习题
第一章:软件工程与软件设计 1.叙述软件工程中可修改性,有效性,可靠性,可理解性,可维护性,可重用性,可适应性,可移植性和可追踪性等概念的含义,并指明这些概念的重要性 可修改性(modifiabili ...
- 软件设计与体系结构思维导图
软件设计与体系结构思维导图 第一章 软件工程与软件设计 第二章 统一建模语言UML 目录版 详细版 第三章 软件设计基础 目录版 详细版 第四章 面向对象的软件设计方法 目录版 详细版 第六章 用户界 ...
- 《软件工程》第三章——软件设计综述
1. 软件设计的任务与目标 任务和目标:以软件需求规格设计说明书为依据,根据其提出的系统目标,进行数据设 计(数据结构),系统结构设计(软件系统的体系结构),过程设计(吧结构转换为软件的过程性描述), ...
- 软件设计的火花——Brooks新作及《人月神话》三十五周年讨论会纪要
应UMLChina之邀,本人于6月20日参加了"Brooks新作及<人月神话>三十五周年讨论会",会上由Brooks的<The Design of Design& ...
- 《大话软件工程—需求分析与软件设计》,给出了分析与设计过程中需要的理论、方法、工具和标准
□ 做好一款软件从哪里开始呢?→ 客户需求的调研: □ 一款软件的价值高低由哪个环节决定呢?→ 软件的分析与设计: □ 软件顺利完成开发靠什么?→ 高效的项目管理: □ 软件开发的主要角色?→ 客户. ...
- 软件工程学习笔记——第六章 软件设计方法
目录 第一章 概述 第二章 过程和活动 第三章 软件过程模型 第四章 问题定义和可行性研究方法 第五章 需求分析方法-1 第五章 需求分析方法-2 第六章 软件设计方法 第七章 软件实施与测试方法 第 ...
最新文章
- qwidget多个窗口同步_【好人BUG】本机多组控制 一台电脑使用一个帐号登录多个(省钱) !...
- python之os模块
- LRU和LFU的区别
- 邮政计算机网络,邮政计算机网络论文(共2018字).doc
- ceph 数据库_Facebook打开了动画库,Ceph在Red Hat找到了新家,等等
- php判断post是否xss,PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】...
- 4核处理器_买电脑选4核、6核还是8核,从业是十年的专家终于讲清楚了差异
- c语言中如何确保一个程序是单例的_c++单例模式
- c java python go 哪种编程语言接近编程的本质_一图看懂编程语言迁移模式:终点站是Python、Go、JS...
- 【紫书】(UVa12096) The SetStack Computer
- nginx安装http2.0协议
- c语言中指,C语言程序设计中指教学要点分析.doc
- Java实现登录验证码功能
- OFDM子载波频率 知乎_频谱中射频干扰信号流化、分析与回放
- 淘宝七天自动确认收货,怎么设计?RabbitMQ延迟队列,消息延迟推送delayed_message入门教程!
- 51单片机 数码管中断操作
- C语言字符意思 char,c语言中char* 代表什么
- 從turtle海龜動畫學習Python-高中彈性課程1
- php如何删除文件夹里的图片,php如何删除文件夹
- Setup Factory导入注册表时丢失部分语句