设计的概念
- 11.1 软件工程中的设计
- 11.2 设计过程
-
- 11.2.1 软件质量
- 11.2.2 软件设计的历史发展
- 11.3 设计概念
- 11.4 设计模型
-
- 11.4.1 数据设计元素
- 11.4.2 体系结构设计元素
- 11.4.3 接口设计元素
- 11.4.4 构件级设计元素
- 11.4.5 部署级设计元素
- 小结
11.1 软件工程中的设计
- 需求模型注重描述所需要的数据、功能和行为。
- 设计模型提供了软件体系结构、数据结构、接口和构件的细节。
- 设计创建的模型是实现系统所必须的。
- 设计模型的质量可以被评估和改建。
- 设计是确立软件质量的关键步骤。
- 软件设计包括一系列原理、概念和实践,用以指导高质量的系统和产品开发。
- 软件设计的目标是创作坚固(稳定)、适用和令人愉悦的模型或表示(这里借鉴了建筑上的观念)
- 坚固是指程序应该不含任何妨碍其功能的缺陷。适用是要程序符合开发的目标。赏心悦目是要求使用程序的体验应是愉快的。
- 设计中设计师的做法
- 先是实现多样化、再进行聚合。
- 多样化是指要获取多种方案和设计的原始资料,包括目录、教科书和头脑中的构件、构件方案和知识。
- 聚合是把各种信息汇聚在一起,从其中挑选能够满足需求工程和分析模型所定义的需求的元素。进行经取舍。
- 多样化和聚合需要直觉和判断力,其质量取决于设计师的水平、设计方式、评价标准、迭代过程等。
分析模型 -> 设计模型
- 数据或类设计:将类模型转化为设计类的实现及软件实现所要求的数据结构。
- 体系结构设计:定义了软件的主要结构化元素之间的关系、用于达到系统需求的体系结构风格和模式以及影响体系结构实现方式的约束。
- 接口设计:描述了软件和协作系统之间、软件和使用者之间是如何通信的。
信息隐蔽
- 信息隐蔽的目的是将数据结构和处理过程的细节隐藏在模块接口之后,用户不需要了解模块内部的具体细节。
- 信息隐蔽原则建议:每个模块对其他所有模块都隐蔽自己的设计决策。
- 联系一下面向对象的三大特点之一:封装
功能独立
- 功能独立是希望软件设计时要使每个模块仅涉及需求的某个特定子功能,并且当从程序结构的其他部分观察时,每个模块只有一个简单的接口。
- 独立模块更容易维护
- 独立性的评估标准:内聚性和耦合性
- 内聚是模块内的相关强度,耦合性是模块间的相互依赖。
求精
- 逐步求精是一种自顶向下的设计策略。
- 求精实际上就是一个细化的过程。
- 细化过程是渐进的,逐步的,细化过快容易导致错误,而且使得难于评审。
- 抽象和细化是互补的概念。
重构
- 重构是一种重新组织的技术,可以简化构建的设计而无需改变其功能或行为。
- 重构定义:“重构是使用这样一种方式改变软件系统的过程:不改变代码的外部行为而是改进其内部结构。”
- 一种观点:好系统(代码)是重构出来的
- Eclipse中有refactor功能
面向对象的设计概念
- 类
- 对象
- 继承
- 封装
- 多态
- 消息
类设计
- 分析模型定义的分析类的抽象级相对较高
- 设计中,定义设计类可以:
- 1)通过提供设计细节精化分析类,这些设计细节将促成类的实现;
- 2)创建一组新的设计类,该设计类实现了软件的基础设施以支持业务解决方案。下面建议了五种不同类型的设计类。
- 设计类,五种不同类型的设计类:
- 用户接口类:定义人机交互(HCI)所必须的所有抽象。在很多情况下,HCI出现在隐喻的环境,而接口的设计类可能是这种隐喻元素的形象表示。
- 业务域类:通常是早期定义的分析类的精化。这些类识别实现某些业务域所必须的属性和服务。
- 过程类:实现完整管理业务域类所必须的低层业务抽象。
- 持久类:代表将在软件执行之外持续存在的数据存储。
- 系统类:实现软件管理和控制功能,使得系统能够运行并在其计算环境内与外界通信。
- 在设计模型演化时,软件团队必须为每个设计类开发一组完整的属性和操作。
- 随着每个分析类转化为设计表示,抽象级就降低。
- 分析类使用业务域的专门用语描述对象;设计类更多地表现技术细节,将作为实现的指导。
- 良好的设计类一般有四个特征:
- 完整性与充分性:设计类应该完整地封装所有的,可以合理预见会存在于类中的属性和方法。
- 原始性:和某个设计类相关的方法应该关注于实现类的某个服务。一旦服务已经被某个方法实现,类就不应该再提供另外一种完成同一事情的方法。
- 高内聚性
- 低偶合
依赖倒置
- 高层模块不应该依赖低层模块,两者都应该依赖抽象
- 抽象不应该依赖细节,细节应该依赖抽象
- 依赖倒置原则在java语言中,表现是:
- 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。
- 接口或抽象类不依赖实现类
- 实现类依赖接口或抽象类
- 有一种说法“面向接口编程”
测试设计
- 到底是先开始软件设计还是测试用例设计,这是个争论。
- 测试驱动开发提倡在编写任何其他代码之前先编写测试代码。
11.4 设计模型
设计模型可从过程和抽象两个维度观察,如图
- 部署图显示了计算环境但并没有明确地说明配置细节。
- 在后面的阶段或构件开始时,应该用实例形式重新为部署图提供这些细节,明确每个实例的部署(专用的如硬件配置)。
小结
- 软件设计包括一些列原理、概念和实践,用以指导高质量的系统和产品开发。
- 软件设计的目标是创作坚固(稳定)、适用和令人愉悦的模型或表示
- 设计模型包括数据/类设计、体系结构设计、接口设计和构件级设计
- 设计过程应遵循一些质量指导原则
- 在软件工程的历史进程中发展了一系列基本的软件设计概念
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!