软件设计基础
8-软件设计基础
什么是软件设计?
是关于软件对象的设计,是一种设计活动,具有设计的普遍特性。(设计活动)
软件设计既指软件对象实现的规格说明,也指这个规格说明产生的过程。(规格说明and其过程)
软件设计的核心思想:
分解和抽象。(分而治之是软件设计解决复杂性难题的主要思路。)
分解:横向上将系统分割为几个相对简单的子系统以及各子系统之间的关系。分解之后每次只需关注经过抽象的相对简
单的子系统以及相互之间的关系,从而降低了复杂度。
抽象:在纵向上聚焦各子系统的接口,抽象出接口隐藏实现,接口和实现相对,是各子系统之间交流的契约。
软件工程设计的三个层次
①高层设计:基于反映软件高层抽象的构件层次,描述系统的高层结构、关注点和设计决策。
②中层设计:关注组成构件的模块的划分、导入/导出、过程之间调用关系或者类之间的协作。
③低层设计:深入模块和类的内部,关注实现细节,如具体的数据结构、算法、类型、控制结构等。
、
软件设计的四个主要活动
分析设计出发点、建立候选方案、生成最终方案、评价
软件设计的方法:
结构化设计:采用自下向上和逐步求精的思路,按照功能对系统进行分解。
面向对象设计:数据抽象和职责驱动,利用封装继承多态等方法,提高软件可拓展性和复用性。
数据结构为中心设计:首先描述的是输入输出的数据结构和基于这些数据结构的控制逻辑。
基于构件的设计:重点在于构建的提供、开发和集成,以提高系统的复用性。(公开积福)
形式化方法设计:通过数学方法对复杂系统建模,通过数学模型验证系统的相关属性。
软件设计的模型
静态模型:通过快照的方式对系统的状态而不是行为。
举例:实体关系图,类图,对象图,构件图,部署图
动态模型:描述系统的行为和状态转移。
举例:数据流图,结构图,交互图(顺序图和通信图),状态图,活动图等
常见的设计视觉:
组合视角:关注功能分解和子系统的构造。
逻辑视角:关注静态结构,类型和实现的复用。
信息视角:关注持久化信息。
接口视角:关注服务的定义、服务的访问。
依赖视角:关注互联、分享、参数化。
工程设计与艺术设计
工程设计:保持以用户为中心,为其建造有用的软件产品,注重效用和坚固性。
艺术设计:除了效用和坚固,还要考虑软件产品的美感。
理性主义更看重设计的工程性,感性注意在重视工程性的同时,也强调艺术性。
软件设计的演化性

设计分离了使用和实现,设计过程根据外部表现进行初步设计,目的是保证设计与需求规格相符合,称为需求分配,之后再强调实现的内部结构是否具有坚固性和美感,称为质量反思。质量反思会发现外部表象需要调整,之后这两个步骤迭代。
软件设计的决策
从问题域到解空间的转换是一个跳跃性的过程,需要发挥设计师的创造性,设计师跳跃性地建立解决方案的过程被称为决策。
决策的依据:设计师自身从业经验、类似系统的设计、参考模型、设计约定、设计原理、现有体系结构风格。
决策的演化性:不同设计决策有顺序性,前一个决策会影响后一个决策,且决策不可逆。
决策的概念完整性:所有设计师所做的决策要保持一致。
软件设计的约束满足
①约束随着设计过程的深入和逐渐发现,不是在一开始就完全明确。
②在不同的设计时间点,约束会发生变化。
软件设计的多样性
不同的软件设计师解决同一个问题会产生不同的软件设计方案,且这些方案都是合理的。