0%

模块设计

  • 保持规模的大小适中
  • 尽可能减少调用的深度
  • 扇入和扇出数量要适中
  • 单入口,单出口
  • 模块的作用域应该在模块内,作用域小于控制域
  • 功能应该是可预测的

高内聚低耦合

聚合类型

  • 功能内聚 模块内的所有元素共同作用完成单一功能,各个部分协同工作,缺一不可
  • 顺序内聚 处理元素相关,而且必须顺序执行
  • 通信内聚 一个模块的所有成分都操作同一数据集或生成同一数据集
  • 过程内聚 一个模块完成多个任务,这些任务按指定的次序执行
  • 顺时内聚(时间内聚) 所包含的任务必须在同一时间间隔内执行
  • 逻辑内聚 模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能逻辑
  • 偶然内聚 一个模块内的各处理元素之间没有任何联系
阅读全文 »

软件过程模型

瀑布模型(需求明确)

线性顺序,以文档为驱动,项目的阶段评审和文档控制为手段对开发过程作为指导。适用于软件需求明确,客户必须能够完整、正确、清晰的表达需求

瀑布模型

V模型

瀑布模型的变体,描述了质量保证活动和沟通、建模相关活动及早期构建相关的活动之间的关系

V模型

阅读全文 »

算法策略

分治法

特征:把一个问题拆分成多个小规模的相同子问题,一般可用递归解决

经典问题:斐波那契数列、归并排序、快速排序、矩阵乘法、二分搜索、大整数乘法、汉诺塔

贪心法

特征:局部最优,但整体不见得最优。每步有明确的、既定的策略。

经典问题:背包问题(如装箱)、多机调度、找零钱问题、最小生成树问题

部分背包可以得到最优解,0-1背包不一定是最优解、迪杰斯特拉算法

动态规划法(用于求解最优解)

特征:划分子问题,使用数组存储子问题,利用查询子问题结果构造最终问题结果。使用最优子结构+递归式。与分治法不同的是,动态规划算法经分解得到的子问题往往不是独立的。若用分治法解决的话,则相同的子问题会被求解多次

经典问题:斐波那契数列、矩阵乘法、背包问题、LCS最长公共子序列

回溯法

特征:系统地搜索一个问题的所有解或任一解,是一种选优搜索法,按选优条件先前搜索,以达到目标。但当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。这种走不通就退回再走的技术就是回溯法

深度优先算法

经典问题:N皇后问题、迷宫、背包问题

分支界限法

类似于回溯法,但是目标不同,分支界限法以广度优先或以最小耗费优先的方式搜索解空间树

广度优先算法

软件生存周期

软件生存周期

设备管理

IO管理软件

  • 硬件:完成具体的I/O操作
  • 中断处理程序:I/O完成后唤醒设备驱动程序
  • 设备驱动程序:设置寄存器,检查设备状态
  • 设备无关程序:设备名解析、阻塞进程、分配缓冲区
  • 用户级I/O层:发出I/O调用