更新时间:2024-10-29 18:44:02
封面
版权信息
前言
第1章 软件设计基础原则
1.1 什么是软件设计
1.1.1 设计是一种“规划”
1.1.2 软件的材料载体与广义的软件设计内涵
1.1.3 狭义的软件设计内涵
1.2 为什么要进行软件设计
1.3 复杂度控制的关键之一:设计分层
1.3.1 分层抽象方法
1.3.2 软件设计的分层
1.3.3 设计层次验证
1.3.4 软件设计分层要点
1.3.5 产品设计与工程设计
1.4 复杂度控制的关键之二:关注点分离
1.4.1 分离设计主题
1.4.2 多视点方法
1.5 软件设计的目标与衡量标准
1.5.1 根本标准:功能、质量、审美
1.5.2 设计目标和衡量标准应用示例
1.5.3 功能是设计方案的必备特征
1.5.4 质量是工程设计的重点
1.5.5 审美是超越合格达到优秀的路径
1.5.6 软件设计的结果是一种折中与妥协
1.6 外部表现与内部结构
1.6.1 软件设计的重点是坚固、优雅的内部结构
1.6.2 外部表现和内部结构的区分示例
1.6.3 抽象、分解与层次结构
1.6.4 常见的设计对象及其外部表现和内部结构
1.6.5 设计整个系统时区分外部表现和内部结构
1.6.6 设计模块时区分外部表现和内部结构
1.6.7 设计类时区分外部表现和内部结构
1.6.8 设计数据结构时区分外部表现和内部结构
1.6.9 设计代码时区分外部表现和内部结构
1.7 逻辑设计与物理设计
1.7.1 载体介质及其匹配
1.7.2 区分逻辑设计与物理设计
1.7.3 设计数据类型时逻辑设计与物理设计的失配
1.7.4 设计数据结构时逻辑设计与物理设计的失配
1.7.5 设计面向对象机制时逻辑设计与物理设计的失配
1.7.6 设计模块时逻辑设计与物理设计的失配
1.7.7 设计质量时逻辑设计与物理设计的失配
1.8 软件设计是持续决策的过程
1.8.1 设计结果与设计过程
1.8.2 决策的要素
1.8.3 设计是一个跳跃性过程,验证设计是一个推理过程
1.8.4 选择一个可行答案,没有唯一正确答案
1.8.5 设计决策有顺序影响,而且影响不可逆
1.8.6 设计约束:是友非敌
1.9 工程与艺术
1.9.1 工程设计与艺术设计
1.9.2 理性主义与经验主义
1.9.3 设计兼具科学性与艺术性
1.10 总结
第2章 程序设计
2.1 如何保证程序正确性
2.1.1 像设计硬件一样设计软件吗
2.1.2 测试不能保证正确性
2.1.3 用程序设计方法实现正确性
2.2 结构化编程与功能正确性
2.2.1 使用简单结构——三种控制结构
2.2.2 使用块结构组织复杂代码
2.2.3 兼顾正确性与复杂度控制:函数/方法
2.3 数据抽象、类型与数据操作正确性
2.3.1 类型
2.3.2 结构化类型:强正确性保证
2.3.3 非结构化类型:弱正确性保证
2.3.4 复杂抽象数据类型(数据结构)及其质量
2.4 程序契约与正确性
2.4.1 前置条件与后置条件
2.4.2 不变量
2.4.3 程序契约的局限性
2.5 面向对象编程与可复用性
2.5.1 可复用性需要的出现
2.5.2 面向对象编程与可复用性
2.5.3 类和对象
2.5.4 封装
2.5.5 继承
2.5.6 多态
2.6 软件构造与更多代码质量
2.6.1 什么是软件构造
2.6.2 软件构造技术与代码质量
2.6.3 软件构造技术示例
2.7 总结
第3章 复杂软件设计
3.1 控制更高的复杂度需要模块
3.1.1 模块
3.1.2 模块分解质量与模块化、信息隐藏
3.2 模块化
3.2.1 模块分割的质量考虑
3.2.2 理想中的模块分割——完全独立
3.2.3 现实中的模块分割——低耦合、高内聚
3.2.4 代码组织及联系方式分析
3.3 (结构化)函数/方法之间的耦合
3.3.1 内容耦合
3.3.2 公共耦合
3.3.3 控制耦合
3.3.4 印记耦合
3.3.5 数据耦合