三、软件设计
目录
一、软件工程开发方法与软件设计
(一)功能分解法——传统开发方法,面向过程
将功能自顶向下逐级分解直至能够被明确定义,设计子功能的数据结构以及它们之间的接口
优缺点:直接反应用户的需求,容易开始工作;但是对需求变化的适应性很差,局部的错误和修改牵动全局(父节点对子孙节点的影响)
(二)结构化方法——传统开发方法,面向过程
设计一系列功能以解决问题,根据事情发生发展的顺序来设计,并寻找适当的方法存储数据,立足于步骤
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.根据需要添加框的组合与关联,表示复杂的控制结构
(三)协作图
主要用于描述一组有相互合作的对象之间的交互和链接,不像顺序图那样有严格的时间维度
(四)活动图
和状态图长得十分类似,但是状态图是描述单个对象的,而活动图是描述一个用例的
守护条件:约束转移的判断,守护条件为真时转移才可以开始
决策:用菱形表示,表示触发事件引起转移
同步棒:并行转移在合并前必须都被执行了,也可以用于并发跳转
也可用泳道来提升可读性
缺点:难以描述动作与对象之间的关系
五、物理建模与设计
组件图
未完待续,感谢阅读~
未经允许禁止转载