"本讲义主要涵盖了软件工程中的软件设计部分,包括设计的基本原理、模块化设计、结构化设计和面向对象设计,并涉及到案例分析。由南京师范大学计算机科学与技术学院的窦万峰进行讲解。内容包括软件设计的定义、阶段、任务,模块化设计的原理,软件结构与体系结构的区别,数据流的类型及其区分,数据流映射的步骤,结构化程序设计的工具,JSD方法的详细步骤,面向对象设计的过程,设计模式的概念、作用及常见类型,设计的精化方法,编码风格的选择,以及如何设计人机界面。此外,还讨论了软件设计的三类活动,软件结构设计过程,软件设计的质量原则,以及概要设计说明书的构成。"
在软件工程中,软件设计是至关重要的一个环节,它旨在构建一个系统如何实现的模型,根据需求分析的结果生成软件设计模型和表示。设计阶段包括总体设计和详细设计,前者关注模块划分、体系结构和接口设计,后者则涉及模块内部的具体实现和算法选择。软件设计遵循“设计先于编码”的原则,以减少后期改动的风险。
模块化设计是将复杂系统分解为独立、可管理的模块,便于理解和维护。模块化设计的基本原理包括高内聚和低耦合,即模块内部元素应紧密关联,而模块间的关系应尽可能简单。软件结构是指软件的整体布局,包括模块的组织和连接方式,而软件体系结构则更侧重于高层次的组件和它们的交互模式。
数据流有输入流、输出流和内部流三种类型,区分它们主要依据数据的来源和去向。数据流映射的步骤包括识别数据流、确定处理和存储、分配模块以及设计接口。
结构化程序设计是一种早期的编程范式,强调程序的清晰性和可读性,常用工具有结构化流程图和PDL(伪码)。JSD(Jackson System Development)方法是由Jackson提出的,通过数据结构来驱动程序设计,其步骤包括理解数据、定义处理过程和构建程序结构。
面向对象设计(OOD)基于类和对象的概念,强调封装、继承和多态性,过程包括识别对象、定义类、建立类间关系以及设计接口。设计模式是经过验证的解决方案模板,可以解决常见的设计问题,如工厂模式、单例模式和观察者模式等,它们提高了代码的重用性和可维护性。
设计的精化是通过迭代和完善来提升设计质量,编码风格则影响代码的可读性和一致性,人机界面设计要考虑用户的易用性和效率。软件设计的每个步骤都应复审,以确保语义正确性和适应性,同时,设计文档如概要设计说明书能清晰地记录设计决策,方便后续的开发和维护。