KWIC索引系统功能
1.接受一些行 2.每行有若干词 3.每个词由若干字符组成 4.每行都可以循环移位:重复地把第一个词删除,然后接到行末 5.KWIC把所有行的各种移位情况按照字母表顺序输出
KWIC功能性需求
输入 -> 循环移位 -> 排序输出
KWIC非功能性需求
1.可修改性 a.算法的变化 b.数据表示方式的变化 c.系统功能的可扩展性
2.性能(时间和空间复杂性)
3.系统构件的可复用性
系统功能分解 - 主程序-子过程风格(面向过程编程)
1.分为四个基本功能:输入、移位、排序、输出 2.主程序按次序调用这四个模块 3.通过共享的数据存储和无约束的读-写协议在模块之间进行数据交换
优点: 模块之间的数据共享 不同的计算功能被隔离在不同的模块中
缺点: 对数据存储格式的变化将会影响几乎所有模块 对处理流程的改变与系统功能的增强很难适应,依赖于控制模块内部的调用次序 这种分解也henna支持有效复用
系统功能分解 - 面向对象
采取面向对象的思想,数据和作用在数据上的读写操作被封装为object,主程序调用这些object,形成控制流程。 a.数据不再被构件直接共享而是被封装在了object中 b.每个对象提供了一个接口,允许其他对象通过该接口调用该对象内封装的数据操作。
Input object(负责从输入文件中读取数据并将其存储在LineStorage对象中)
LineStorage object(存储和处理字符、单词、行)
CircularShifter object(负责对LineStorage对 象中存储的数据进行循环移位)
Alphabetizer object(负责对循环移位后得到的数据进行排序)
Output object(负责打印输出排序后的数据)
Master control object(主控制对象:负责控制其他各对象中方法的调用次序)
优点: 某一构件的算法与数据结构的修改不会影响其他构件 构件之间依赖性降低,提高了复用度
缺点: 不是特别适合功能的扩展 为了增加新功能,要么修改已有的模块,要么就加入新的模块。
面向过程和面向对象对比
系统功能分解 - 使用管道-过滤器风格
四个过滤器:输入、移位、排序、输出 每个过滤器处理数据,然后将结果送至下一个过滤器 控制机制是分布式的:只要有数据传入,过滤器即开始工作 过滤器之间的数据共享被严格限制在管道传输
优点: 过程流非常直观 容易修改 过滤器的功能相互隔离 新功能容易加入
缺点: 无法支持交互式系统,局限性较大。 空间复杂性高