- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
演示文档–软件体系结构–第二章–软件体系结构风格–应用实例
October 12, 2004 October 12, 2004 CPSC 410 G. Murphy 体系结构风格 一个体系结构风格包括: 一套 部件类型(component types) (例如,进程,处理过程) 它们在运行时完成特定的功能 一个显示部件间运行时关系拓扑结构 一套语义约束 (semantic constraints),例如,是什么是 一套连接(connectors) (例如,数据流,socket等) :它们是部件之间通信的中介 体系结构风格提供了一套我们可以借鉴来进行体系结构设计的框架 体系结构风格分类 体系结构设计案例: KWIC系统 KWIC Key Word In Context:上下文关键字 上下文关键字索引系统 : 接收多个字符行line组成的有序序列 每个行包含一系列的词组word 每个词包含一系列的字母character 输入的每一行被“循环移位”(circular shifting)并复制输出: 将每行的第一词从行首去掉 将它连接到行末 输出是每个输入行及它们的各个循环移位的结果(按字母顺序排列) KWIC系统输入输出举例 输入: bar sock car dog town fog 输出: bar sock car dog dog car fog town sock bar town fog 设计考虑 算法上的可能选项:我们可以执行“行移位”… 在每一行被读入后立即进行本行的移位 在所有行都被读入后才进行各行的移位 当执行“字母排序”的部件要求提供新的移位行时 数据表示上的可能选项:循环移位数据可以… 用另外的内存进行存放 不另外存放(只保存循环移位所需的数据,例如每个词的) 附加特性: 是否对一些在行首的虚词,不进行循环移位? (例如“a”, “an”, “and”, 等). 使系统变成一个交互式系统 例如: 允许删除某些输入, 或在中断处理后再重新启动? 性能: 空间和时间 重复: 各个部件应该设计成一个多么独立的功能模块? 使用调用返回风格(Call-Return) 目标: 使系统达到可修改modifiability和可扩展scalability 子风格: 主程序-子程序 程序的层次分解,每个子程序从其父部件获得控制权限 面向对象 下面是第一个体系结构设计方案:主程序-子程序风格+共享数据方案 “输入”模块:读取字符行,并存放在 Text array(一个一维字符数组)中, 并将每一行在Text array中的起始位置(一个下标)作为原字符行索引记录下来 “循环移位”模块: 对每一行,记录每个词的起始位置(一个下标), 并将其作为移位后字符行的索引记录到Word index中(一系列下标) 不用另外的存贮位置 “字母排序”模块: 从Text array(原字符行首字符)和Word index(移位后首字符)中读取数据, 创建一个按字母排序的索引(一系列下标) 这一设计方案的效果 算法上的改变(灵活性): 可以轻微改变,因为数据结构已经限制了算法上可能的改变 “你确定了数据结构,我就可以知道你的算法” – Fred Brooks的名言 数据结构上的改变(灵活性) : 不可能, 因为Text Array等数据存储部件的结构已经对其它处理部件完全可见 附加属性的实现可能(可扩展性): 是否很方便地进行改变,以实现对一些在行首的虚词,不进行循环移位? 中等, 需要对现有的部件进行修改 是否很方便地进行改变,使系统实现交互性? 中等, 需要对“字母排序”部件单独进行修改 性能: 空间: 性能很好, 因为数据是共享的 时间: 性能很差, 因为这种体系结构下无法进行并发(必须等所有输入在“Input”部件都完成后,才可以进行后面的处理,如“循环移位”部件) 重用: 很差, 因为这个系统中每个部件都依赖我们所设计的特定数据结构 抽象数据类型/面向对象子风格方案 面向对象风格的系统可以较易达到可修改性,因为对环境(其它对象)而言,对象内部秘密被封装了起来 这样,修改一个对象的内部特征(属性、私有/保护方法),不会影响其它类的代码 对对象的访问只能通过类方法 (一种受约束的过程调用) 而对其它风格的部件,没有这种约束 对象: Line storage对象: 它的外部可见操作是读取或写入指定位置的字符、词和行 Circular shifter对象: 成员函数SHIFT(l,w,c)返回在第l个移位中第w个词的第c个字符 Alphabetizer对象: 成员函数iTH(i)在一个已按字母顺序排列好的序列中返回第i行 这一设计方案的效果 算法上的改变: 容易实现, 数据访问是通过定义好的接口进行(可以不改变接口的情况下,改变内部算法的实现) 例如: “按字母排序”
文档评论(0)