KWIC作为一个早年间在ACM的Paper提出的一个问题,被全世界各个大学的软件设计课程奉为课堂讲义或者作业的经典。(From Wiki,FYI,D. L. Parnas uses a KWIC Index as an example on how to perform modular design in his paper "On the Criteria To Be Used in Decomposing Systems into Modules" - Available as ACM Classic Paper)

问题陈述:KWIC(Key Word In Context),Parnas (1972)
      KWIC索引系统接受一些行,每行有若干字,每个字由若干字符组成;每行都可以循环移位,亦即重复地把第一个字删除,然后接到行末; KWIC把所有行的各种移位情况按照字母表顺序输出
 
目的:考察不同的体系结构对变化的适应能力(modifiability)
评价准则
处理算法的改变:例如,行的移位可在每行读入后、在所有行读入后、或当排序要求一组移位的行时執行;
数据表示的改变:例如,行、字、字符可以不同的方式存储;类似地,循环移位后的行可以显式或隐式存储(索引和偏移量);
系统功能的增强:例如,限制以某些“修饰词”(a, an, and等)打头的移位结果;支持交互,允许用户从原始输入表中删除一些行等;
效率:时间和空间;
复用:构件被复用的潜力。

Solution 1
Main Program/Subroutine with Shared Data
Elements of Main/Subroutine Architectural style are:

  • Components: Functions
  • Interactions: Function calls
  • Pattern: Main function controls the calling sequence

This is the primary organization of many software systems. This style reflects structural/procedural programming language (e.g. C programming language) in which these system are written.

 
 
Decompose the overall processing into a sequence of processing steps.
Read lines; Make shifts; Alphabetize; Print results
Each step transforms the data completely.
每一步完全转换数据
Intermediate data stored in shared memory.
Arrays of characters with indexes
带索引的字符数组
Relies on sequential processing
串行处理
 
Solution 1Modularization
Module 1: Input
Reads data lines and stores them in core.
Storage format: 4 chars/machine word; array of pointers to start of each line.
Module 2: Circular Shift
Called after Input is done.
Reads line storage to produce new array of pairs: (index of 1st char of each circular shift, index of original line)
Module 3: Alphabetize
Called after Circular Shift.
Reads the two arrays and produces new index.

Module 4: Output
Called after alphabetization and prints nicely formatted output of shifts
Reads arrays produced by Modules 1 & 3
Module 5: Master Control
Handles sequencing of the first 4 modules
Handles errors
 
Properties of Solution 1
Batch sequential processing.
Uses shared data to get good performance.
用共享数据获得性能
Processing phases handled by control module.
So has some characteristics of main program – subroutine organization.
Depends critically on single thread of control.
Shared data structures exposed as inter-module knowledge.
共享数据的结构是所有模块必须知道的
Design of these structures must be worked out before work can begin on those modules.
数据结构的设计必须在其他模块设计开始之前进行
 
方案优缺点:
+系统自然分解,符合人的处理习惯
+数据共享,处理效率高
+
–难以适应数据存储格式和整体处理算法的变化——爲什麽?
–系统构件难以支持复用——爲什麽?
 
仔细参考:

软件体系结构经典问题——KWIC的分析和解决的更多相关文章

  1. Linux运维之道(大量经典案例、问题分析,运维案头书,红帽推荐)

    Linux运维之道(大量经典案例.问题分析,运维案头书,红帽推荐) 丁明一 编   ISBN 978-7-121-21877-4 2014年1月出版 定价:69.00元 448页 16开 编辑推荐 1 ...

  2. 软件体系结构-分层、代理、MVC、管道与过滤器

    什么是软件架构? 程序或计算系统的软件体系结构是系统的一个或多个结构,包括软件元素.这些元素的外部可见属性以及它们之间的关系. ——Software Engineering Institute(SEI ...

  3. DSSA特定领域软件体系结构

    一.何为DSSA 特定领域软件架构(Domain Specific Software Architecture,DSSA)是一种有效实现特定领域软件重用的手段.简单地说,DSSA就是在一个特定应用领域 ...

  4. C/S和B/S两种软件体系结构

    目前两种流行的软件体系结构就是C/S和B/S体系结构,下面对两种体系结构进行一下总结: 1.C/S(客户端/服务器模式): 客户端和服务器都是独立的计算机,客户端是面向最终用户的应用程序或一些接口设备 ...

  5. EYES组——软件体系结构上机规划

    EYES组——软件体系结构上机规划 考勤助手 第九周: 需求分析的详细撰写,并在此基础上探讨与完善,讨论软件的体系结构风格,画出初步的UML类图. 第十周: 选择合适的软件构架风格(3层C/S架构风格 ...

  6. 软件体系结构C2风格

    首先C2风格是最常用的一种软件体系结构风格.(下图为一个C2风格的架构图) C2是一种基于构件和消息的架构风格,可用于创建灵活的.可伸缩的软件系统.一个C2构架可以看成是按照一定规则由连接件连接的许多 ...

  7. Samp免流软件以及地铁跑酷的自校验分析

    [文章标题]:Samp免流软件以及地铁跑酷的自校验分析 [文章作者]: Ericky [作者博客]: http://blog.csdn.net/hk9259 [下载地址]: 自行百度 [保护方式]: ...

  8. 分布式软件体系结构风格(C/S,B/S)

    分布式软件体系结构风格 1.  三层C/S结构 2.  三层B/S结构 了解很多其它软件体系结构 三层C/S结构(3-Tier C/S Architecture) §第1层:用户界面GUI-表示层-- ...

  9. 启动Tomcat一闪而过——分析及解决过程

    启动Tomcat一闪而过--分析及解决过程 嗯,昨天将有关JDK的知识稍微整理了一下,现在稍微整理一下有关Tomcat的! 1:Tomcat是什么? Tomcat是当今世界上使用最为广泛的.开源免费的 ...

随机推荐

  1. C# XmlReader/XmlWriter 类

    XmlReader用于读取Xml文件,XmlWriter用于将数据写到Xml文件.其实,在印象当中,XML很多的操作类都支持直接Save.Read也支持接受XmlReader与XmlWriter类的示 ...

  2. jquery倒计时(仿团购)转至 http://justcoding.iteye.com/blog/2210962

    倒计时一般是用来表示未来某一时刻距现在时刻还剩多少时间.倒计时在WEB上应用非常广泛,如考试系统倒计时,团购网站中的优惠活动倒计时等等.今天,我们来使用jQuery实现一个简单的倒计时功能.

  3. 2D丛林逃生

    游戏介绍: 游戏地图采用二维数组:     每一个小块(Piece)类         上面有一个类型(StuffType)用于判断该小块上面站着的是什么 怪物,玩家,血瓶等等     怪物AI:   ...

  4. pyqt最小化学习

    # -*- coding: cp936 -*- #!/usr/bin/env python # -*- coding:utf-8 -*- from PyQt4 import QtCore, QtGui ...

  5. 使用cx_Freeze 将python3代码打包成.exe程序

    在这里分享一下如何在py3下使用cx_Freeze打包pyqt5的程序 首先吐槽下,深深鄙视一下百度,各种百度各种没有,之前我在py2.7下使用pyqt4开发过一个小软件,用的是py2exe进行打包的 ...

  6. 用CSS/CSS3 实现 水平居中和垂直居中的完整攻略

    水平居中:行内元素解决方案 只需要把行内元素包裹在一个属性display为block的父层元素中,并且把父层元素添加如下属性即可:   .parent { text-align:center; } 水 ...

  7. 初步swift语言学习笔记9(OC与Swift杂)

    笔者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/34440159 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  8. SQLLoader3(数据文件没有分隔符时的导入)

    数据文件:D:\oracletest\ldr_tab_fiile.dat1.数据文件字段中间以制表符TAB隔开:7369 SMITH CLERK7499 ALLEN SALESMAN7521 WARD ...

  9. Microsoft Visual C++ 不支持long long

    Microsoft Visual C++ 不支持long long 在C/C++中,64为整型一直是一种没有确定规范的数据类型.现今主流的编译器中,对64为整型的支持也是标准不一,形态各异.一般来说, ...

  10. Javascript的性能瓶颈

    Javascript是单线程的,它的性能瓶颈在于频繁的DOM操作, 因为每次操作都会使浏览器重新绘制一次. 其实纯JS的执行的速度是很快的,可以把元素都攒到一块,一次性放到页面中. 或者,定义一个延时 ...