1、软软 件件 体体 系系 结结 构构第一部分第一部分天津大学计算机学院天津大学计算机学院饶国政饶国政课课 程程 内内 容容 软件危机软件危机 软件体系结构概念软件体系结构概念 软件体系结构模式软件体系结构模式 体系结构的设计模式体系结构的设计模式 基础结构模式基础结构模式 软件体系结构的其它研究领域软件体系结构的其它研究领域 第一章第一章 软件危机软件危机 软件软件 软件的发展阶段软件的发展阶段 软件危机软件危机 软件生命周期软件生命周期软件软件 软件程序、数据和相关文档的完整集合软件程序、数据和相关文档的完整集合 软件的特点:软件的特点:软件是一个逻辑实体,而非物理实体;软件是一个逻辑实体,而
2、非物理实体;软件是人类抽象思维的产物;软件是人类抽象思维的产物;开发过程没有明显的制作过程;开发过程没有明显的制作过程;生产成本随着软件的复杂程度急剧增加(指数级);生产成本随着软件的复杂程度急剧增加(指数级);容易复制、传播;容易复制、传播;维护工作复杂。维护工作复杂。软件的发展阶段软件的发展阶段 三个发展阶段三个发展阶段 程序设计阶段(程序设计阶段(5060年代中期)年代中期)程序系统阶段(程序系统阶段(60中期中期70年代中期)年代中期)软件工程阶段(软件工程阶段(70年代中期以来)年代中期以来)软件危机软件危机 软件危机的表现软件危机的表现 软件成本估计不准确软件成本估计不准确 随着软
3、件规模增长,软件开发成本往往成指随着软件规模增长,软件开发成本往往成指数级增长。数级增长。开发进度难以控制开发进度难以控制 由于软件是逻辑、智力产品,软件的开发需建立庞大由于软件是逻辑、智力产品,软件的开发需建立庞大的逻辑体系,这是与其他产品的生产不一样的。的逻辑体系,这是与其他产品的生产不一样的。在软件开发过程中,用户需求变化等各种意想不到的情在软件开发过程中,用户需求变化等各种意想不到的情况层出不穷,令软件开发过程很难保证按预定的计划实现,况层出不穷,令软件开发过程很难保证按预定的计划实现,给项目计划和论证工作带来了很大的困难。给项目计划和论证工作带来了很大的困难。盲目增加软件开发人员并不
4、能成比例地提高软件开发能盲目增加软件开发人员并不能成比例地提高软件开发能力。相反,随着人员数量的增加,人员的组织、协调、通力。相反,随着人员数量的增加,人员的组织、协调、通信、培训和管理等方面的问题将更为严重。信、培训和管理等方面的问题将更为严重。软件质量差软件质量差 软件项目即使能按预定日期完成,结果却不尽人意。软件项目即使能按预定日期完成,结果却不尽人意。19651965年至年至19701970年,美国范登堡基地发射火箭多次失败,绝大年,美国范登堡基地发射火箭多次失败,绝大部分故障是由应用程序错误造成的。部分故障是由应用程序错误造成的。在在“软件作坊软件作坊”里,由于缺乏工程化思想的指导,
5、程序里,由于缺乏工程化思想的指导,程序员几乎总是习惯性地以自己的想法去代替用户对软件的需求,员几乎总是习惯性地以自己的想法去代替用户对软件的需求,软件设计带有随意性,很多功能只是程序员的软件设计带有随意性,很多功能只是程序员的“一厢情愿一厢情愿”而已,这是造成软件不能令人满意的重要因素。而已,这是造成软件不能令人满意的重要因素。软件开发缺乏适当的文档资料软件开发缺乏适当的文档资料 文档资料对于软件开发和软件维护是至关重要的。文档资料对于软件开发和软件维护是至关重要的。软件维护困难软件维护困难 由于在软件设计和开发过程中,没有严格遵循软件开发由于在软件设计和开发过程中,没有严格遵循软件开发标准,
6、各种随意性很大,没有完整的真实反映系统状况的记标准,各种随意性很大,没有完整的真实反映系统状况的记录文档,给软件维护造成了巨大的困难。录文档,给软件维护造成了巨大的困难。特别是在软件使用过程中,原来的开发人员可能因各种特别是在软件使用过程中,原来的开发人员可能因各种原因已经离开原来的开发组织,使得软件几乎不可维护。原因已经离开原来的开发组织,使得软件几乎不可维护。有资料表明,工业界为维护软件支付的费用占全部硬件有资料表明,工业界为维护软件支付的费用占全部硬件和软件费用的和软件费用的40%-75%40%-75%。如何克服软件危机如何克服软件危机 人们面临的不光是技术问题,更重要的是管理问人们面临
7、的不光是技术问题,更重要的是管理问题。管理不善必然导致失败题。管理不善必然导致失败 。要提高软件开发效率,提高软件产品质量,必须要提高软件开发效率,提高软件产品质量,必须采用采用工程化工程化的开发方法与工业化的生产技术。的开发方法与工业化的生产技术。软件工程软件工程软件生命周期软件生命周期 软件从孕育、诞生、成长、衰亡的生存过程,称软件从孕育、诞生、成长、衰亡的生存过程,称为软件的生命周期。为软件的生命周期。六个步骤:六个步骤:制定计划:问题分析、可行性研究制定计划:问题分析、可行性研究 需求分析需求分析 软件系统设计:总体设计、详细设计软件系统设计:总体设计、详细设计 软件编码软件编码 软件
8、测试软件测试 软件维护软件维护第二章第二章 软件体系结构软件体系结构 基本概念基本概念 重要性重要性 组件与连接器组件与连接器 风格与模式风格与模式 非功能属性非功能属性第一节第一节 基本概念基本概念 定义还没有达到共识。定义还没有达到共识。以下几个有助于我们的理解以下几个有助于我们的理解 软件体系结构是一组具有一定形式的结构化元素(设软件体系结构是一组具有一定形式的结构化元素(设计元素)组成。计元素)组成。软件体系结构超越了计算过程中的算法设计和数据结软件体系结构超越了计算过程中的算法设计和数据结构。构。四视图观点:概念上的体系结构、模块体系结构、代四视图观点:概念上的体系结构、模块体系结构
9、、代码体系结构和运行体系结构。码体系结构和运行体系结构。四模式观点:概念模式、框架模式、动态模式、进程四模式观点:概念模式、框架模式、动态模式、进程模式模式 所以:所以:软件体系结构对软件系统的构造起着指导性作用。软件体系结构对软件系统的构造起着指导性作用。它回避了软件系统的功能细节,着重于讨论软件系它回避了软件系统的功能细节,着重于讨论软件系统的总体构架。统的总体构架。它关注的是系统结构及其组成组件。它关注的是系统结构及其组成组件。修正后的软件生命周期:修正后的软件生命周期:需求分析需求分析 体系结构设计体系结构设计:选择模式,选择组件,组件之间的关:选择模式,选择组件,组件之间的关系以及它
10、们之间的约束。以此为框架,为详细设计奠系以及它们之间的约束。以此为框架,为详细设计奠定基础。原为定基础。原为“总体设计总体设计”详细设计详细设计 实现实现 维护维护第二节第二节 重要性重要性 良好的体系结构设计是决定软件系统成功的重要良好的体系结构设计是决定软件系统成功的重要因素。因素。早期的教训:早期的教训:IBM OS/360(1963-1966)软件体系结构的指导意义软件体系结构的指导意义 作为软件开发的基本指导方针作为软件开发的基本指导方针 整个软件设计的开端,决定着开发工作的整体结整个软件设计的开端,决定着开发工作的整体结构,具有更大的决策性和约束性。构,具有更大的决策性和约束性。体
11、系结构给予后继开发人员一个可实现的指导和体系结构给予后继开发人员一个可实现的指导和约束。约束。软件体系结构的指导意义软件体系结构的指导意义 对软件质量保证具有重大的影响对软件质量保证具有重大的影响 支配了从开发到维护项目的团队组织结构支配了从开发到维护项目的团队组织结构 对软件的修改、变动提供了保证和约束。对软件的修改、变动提供了保证和约束。提供了软件的可重用性提供了软件的可重用性为什么体系结构没能早日引进来呢?为什么体系结构没能早日引进来呢?早期软件开发被认为是个人创造力的产物,灵活早期软件开发被认为是个人创造力的产物,灵活性很高,从而导致开发者无规可循。性很高,从而导致开发者无规可循。早期
12、软件开发的规模较小,开发通常由个人或者早期软件开发的规模较小,开发通常由个人或者小的团队来完成,团队易于沟通交流,体系结构小的团队来完成,团队易于沟通交流,体系结构的要求不迫切。的要求不迫切。软件产品提交给用户的为编译后的软件,不能看软件产品提交给用户的为编译后的软件,不能看到源代码,其他人难以分析其结构,阻碍了技术到源代码,其他人难以分析其结构,阻碍了技术的传播。的传播。第三节第三节 组件和连接器组件和连接器 现代软件系统通常采用组件(构件)的开发方法现代软件系统通常采用组件(构件)的开发方法 组件:组件:系统中的结构块,是软件功能设计和实现系统中的结构块,是软件功能设计和实现的承载体。的承
13、载体。连接器:连接器:组件之间进行连接的组件。组件之间进行连接的组件。软件体系结构的两大构成:组件、连接器软件体系结构的两大构成:组件、连接器组件组件 组件:组件:系统中的结构块,是软件功能设计和实现系统中的结构块,是软件功能设计和实现的承载体。的承载体。组件的表达形式:组件的表达形式:组件是由组件是由封装的内部数据结构及其操作封装的内部数据结构及其操作,以及,以及对外提对外提供的操作方法集合供的操作方法集合组成。例:组成。例:公安局公安局组件组件接口接口组件的特性(略)组件的特性(略)连接器连接器 连接:连接:组件之间建立和维护行为关联及信息传递组件之间建立和维护行为关联及信息传递的途径。的
14、途径。连接包含两方面:连接包含两方面:物质基础:连接发生和维持的机制;物质基础:连接发生和维持的机制;规约协议:连接能够正确地、无二义、无冲突地进行规约协议:连接能够正确地、无二义、无冲突地进行信息交换的保证。信息交换的保证。例:例:电源转接板电源转接板简单连接:两个组件直接连接简单连接:两个组件直接连接 复杂连接:专门的连接组件(连接器)复杂连接:专门的连接组件(连接器)连接器连接器A A组件组件A A组件组件B B组件组件B B组件组件 连接的特性(略):连接的特性(略):方向性、激发、响应特性方向性、激发、响应特性 连接的匹配(连接器如何工作的呢):连接的匹配(连接器如何工作的呢):修改
15、组件:修改组件:有源代码有源代码 进行包装:进行包装:常用方法常用方法 加入中介:加入中介:比较复杂或要求灵活性的比较复杂或要求灵活性的 握手:握手:经常变动的系统经常变动的系统第四节第四节 风格和模式风格和模式 软件设计人员在长期开发某种类型软件过程中摸软件设计人员在长期开发某种类型软件过程中摸索到该类软件的一些规律性的东西,经过提炼总索到该类软件的一些规律性的东西,经过提炼总结,得到了具有普遍性的构建结,得到了具有普遍性的构建模式模式或称为构建或称为构建风风格格。本课程将讨论学习应用较广泛的体系结构风格或本课程将讨论学习应用较广泛的体系结构风格或模式。模式。使用软件体系结构的风格和模式的意
16、义:使用软件体系结构的风格和模式的意义:便于设计开发者之间互相交流便于设计开发者之间互相交流 促进了设计的复用促进了设计的复用 也促进了代码的复用也促进了代码的复用 使用标准的风格和模式有利于支持互操作使用标准的风格和模式有利于支持互操作所以:所以:有利于交流和理解;有利于交流和理解;有利于提高软件设计实施的效率和质量;有利于提高软件设计实施的效率和质量;风格和模式的完善和系统化,也标志软件体系风格和模式的完善和系统化,也标志软件体系结构的成熟。结构的成熟。我们对风格、模式和框架不加区分。我们对风格、模式和框架不加区分。我们讲解侧重于我们讲解侧重于模式。模式。模式分为三个层次:模式分为三个层次
17、:系统体系结构模式(第三章)系统体系结构模式(第三章)体系结构的设计模式(第四章)体系结构的设计模式(第四章)基础结构模式(第五章)基础结构模式(第五章)系统体系结构模式系统体系结构模式体系结构的设计模式体系结构的设计模式基础结构模式基础结构模式范围最大,层次最高范围最大,层次最高中等规模,独立于特定语言中等规模,独立于特定语言最低层、最基础的模式,最低层、最基础的模式,和特定语言有关和特定语言有关系统体系结构模式系统体系结构模式体系结构的设计模式体系结构的设计模式基础结构模式基础结构模式 卷一、卷二、卷三卷一、卷二、卷三参考书参考书 Robert C.Martin 清华大学出版社第五节第五节
18、 非功能属性非功能属性 功能属性功能属性 非功能属性:非功能属性:易修改性:易修改性:可维护性可维护性 可扩展性可扩展性 结构重组结构重组 可移植性:可移植性:硬件平台、硬件平台、操作系统、操作系统、用户界面、用户界面、编程语言编程语言 互操作性互操作性:软件需要经常与其它系统和周围的硬软件软件入口软件需要经常与其它系统和周围的硬软件软件入口 可靠性可靠性 容错能力容错能力 健壮性健壮性 效率效率 响应时间、吞吐率、存储空间响应时间、吞吐率、存储空间 可重用性可重用性 重用现有的组件和重用以前的项目、商业库、设计重用现有的组件和重用以前的项目、商业库、设计分析、设计说明。分析、设计说明。为重用
19、进行软件开发为重用进行软件开发 可测试性可测试性 软件系统变的越来越大,越来越复杂,软件测试工软件系统变的越来越大,越来越复杂,软件测试工作也变得越来越困难和昂贵。作也变得越来越困难和昂贵。第三章第三章 系统体系结构模式系统体系结构模式 十种模式:十种模式:管道过滤器、管道过滤器、分层、分层、知识库(黑板)、知识库(黑板)、MVCMVC、PACPAC、客户与服务器、客户与服务器、COM/DCOM/COM+COM/DCOM/COM+、代理者、代理者、微核、微核、映像、映像、异构异构每种体系结构的讲解内容每种体系结构的讲解内容 概述概述 结构:静态结构:静态 动态特性动态特性 实现实现 特性特性
20、变体变体 优缺点优缺点GoogleGoogle八周岁了!八周岁了!第第1节节 管道过滤器管道过滤器 概述概述 结构结构 动态特性动态特性 实现实现 特性特性 变体变体 优缺点优缺点1 概述概述 数据流处理系统数据流处理系统 示例:示例:UNIX操作系统的管道过滤器操作系统的管道过滤器 示例:语言编译器示例:语言编译器扫描器扫描器语法分析语法分析编译器编译器语义分析语义分析调用调用输入输入代码生成代码生成2 静态结构静态结构过滤器组件过滤器组件管道过滤器组件管道输入输入输出输出数据源输出数据池过滤器组件过滤器组件 3种激活方式种激活方式(1)后续的组件从过滤器中拉出数据;)后续的组件从过滤器中拉
21、出数据;(2)前面的组件向过滤器推入新数据;)前面的组件向过滤器推入新数据;(3)过滤器处于活跃状态,以循环的方式,不断地从)过滤器处于活跃状态,以循环的方式,不断地从前面的组件中拉出数据,并向后续的组件推入数据。前面的组件中拉出数据,并向后续的组件推入数据。前两种称为前两种称为被动过滤器被动过滤器;后一种称为;后一种称为主动过滤器主动过滤器数据源数据源(1)主动:将数据推入过滤器)主动:将数据推入过滤器 (2)被动:在过滤器需要时被动提供数据)被动:在过滤器需要时被动提供数据数据池数据池(1)主动:从过滤器拉出来数据)主动:从过滤器拉出来数据 (2)被动:在过滤器把结果推入或写入)被动:在过
22、滤器把结果推入或写入管道组件管道组件 管道是过滤器之间的连接。管道是过滤器之间的连接。管道:(管道:(1)对被动过滤器的直接调用。)对被动过滤器的直接调用。(2)两个主动过滤器进行同步)两个主动过滤器进行同步一般结构一般结构过滤器过滤器过滤器过滤器管道过滤器结构管道过滤器结构过滤器过滤器管道管道数据流数据流数据源数据源数据池数据池过滤器过滤器3 动态特性4 实现实现(1 1)把系统任务分成几个独立的)把系统任务分成几个独立的处理阶段处理阶段。(2 2)定义沿着每个管道传输的)定义沿着每个管道传输的数据格式数据格式。(3 3)决定管道的连接。)决定管道的连接。(4 4)设计和实现过滤器。)设计和
23、实现过滤器。(5 5)设计出错处理。)设计出错处理。(6 6)建立处理流水线。)建立处理流水线。应用举例应用举例 搜索引擎搜索引擎 快速全面的原因快速全面的原因 抓取、分词、索引、页面等级评定、查询抓取、分词、索引、页面等级评定、查询5 特特 性性(1 1)每个过滤器都是独立的整体,相互之间的)每个过滤器都是独立的整体,相互之间的状态互不影响。状态互不影响。(2 2)过滤器并不知道它的上游和下游连接的过)过滤器并不知道它的上游和下游连接的过滤器的特性。滤器的特性。(3 3)运行结果的正确性不依赖于各个过滤器运)运行结果的正确性不依赖于各个过滤器运行的次序。行的次序。6 变变 体体(1 1)限制
24、过滤器为单输入、单输出:从拓扑结)限制过滤器为单输入、单输出:从拓扑结构上看,为线性构上看,为线性过滤器组件过滤器组件管道过滤器组件管道输入输入输出输出输出(2 2)如果允许过滤器的输入或输出多于一个:)如果允许过滤器的输入或输出多于一个:造成反馈回路(拓扑结构:有向图)。需要保造成反馈回路(拓扑结构:有向图)。需要保证系统可终止。证系统可终止。(3 3)有名管道(文件)有名管道(文件)过滤器过滤器过滤器过滤器管道过滤器结构管道过滤器结构过滤器过滤器管道管道数据流数据流数据源数据源数据池数据池过滤器过滤器7 优缺点优缺点 1 1、优点、优点 易于重组,增加了系统的灵活性。易于重组,增加了系统的
25、灵活性。易于更新、升级和维护易于更新、升级和维护 易于重用。易于重用。并行处理提高了系统的效率。?并行处理提高了系统的效率。?快速原型系统的设计实现快速原型系统的设计实现 拓扑结构清晰,方便性能分析。拓扑结构清晰,方便性能分析。优缺点 2 2、缺点、缺点 会导致数据的批处理方式。会导致数据的批处理方式。不适合处理交互式应用要求。不适合处理交互式应用要求。增加了系统的开销和复杂性。增加了系统的开销和复杂性。共享状态信息代价高且不灵活。共享状态信息代价高且不灵活。用并行处理来获得高效率是不可行的。?用并行处理来获得高效率是不可行的。?难以进行错误处理。难以进行错误处理。第第2 2节节 分层结构分层
26、结构 1 1、概述、概述 复杂系统的解决方法之一:层次化复杂系统的解决方法之一:层次化 软件系统的发展过程就是不断分层的过程软件系统的发展过程就是不断分层的过程 层次系统组织成一个层次结构,每一层为上层层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户。服务,并作为下层客户。网络网络操作系统(操作系统(Windows为例)为例)数据库数据库2 分层的静态结构分层的静态结构 系统的每一层向它的上一层提供服务,同时又作为下一层的客户,调用下层提供的功能函数。简单分层的结构(3层)核心层 功能层 应用层3 分层的方案分层的方案 简单、直观 最主要特征:N层的服务只能被N+1层调用,各层之间
27、没有更多的依赖性。组件3组件3组件2组件2组件1组件1组件14 分层的动态特性分层的动态特性 一、自顶向下:请求一、自顶向下:请求 二、自底向上:通知二、自底向上:通知 三、部分请求三、部分请求 四、部分通知四、部分通知 五:协议堆栈五:协议堆栈5 分层结构的实现分层结构的实现(1)为便于分层,定义抽象准则(2)根据抽象准则定义抽象层数(3)给每一层命名并指定它们的任务(4)指定服务(5)为每个层定义接口:黑盒(6)构建独立的层(7)确定相邻层间的通信:推/拉模式(8)降低相邻层的耦合程度(9)设计错误处理策略:近可能在低层6 分层的应用实例分层的应用实例 通信协议TCP/IP虚拟机虚拟机AP
28、I栈栈J2EE的结构图(的结构图(.NET结构类似)结构类似)J2EE Blueprints Sun公司的J2EE开发技术的演示 网上宠物商店:不断更新展示最新的Java开发技术 三层结构 表示层 业务逻辑层 数据层(持久层)使用界面和功能介绍 宠物展示 购物车 用户登录 配货处理 Ajax支持Google Map表示层组件业务层组件数据层组件数据层组件表示层业务层数据层JSP、HTMLSession BeanEntity BeanEntity Bean表示层业务层数据层7 分层结构的变体分层结构的变体(1)松弛(宽松)分层结构)松弛(宽松)分层结构定义:定义:有些层可以直接使用下面几层的服务
29、,而有些层可以直接使用下面几层的服务,而不仅是相邻层的服务。不仅是相邻层的服务。特点:特点:增加了灵活性和效率,但却牺牲了可维护增加了灵活性和效率,但却牺牲了可维护性。性。应用:应用:常用于系统软件,较少用于应用软件。常用于系统软件,较少用于应用软件。(2)通过继承的分层结构)通过继承的分层结构定义:定义:低层作为基类,较高的层通过继承来使用低层作为基类,较高的层通过继承来使用低层的服务。低层的服务。优点:优点:高层可以根据需要修改低层的服务。高层可以根据需要修改低层的服务。缺点:缺点:继承关系把高层和低层紧密联系在一起。继承关系把高层和低层紧密联系在一起。(违反了(违反了“合成合成/聚合复用
30、原则聚合复用原则“)8 分层结构的优缺点分层结构的优缺点优点:优点:(1)层的重用(2)对软件标准化的支持(3)局部依赖性(4)可替换性缺点:缺点:(1)更改行为的连锁性(2)运行效率低(3)可能增加许多不必要的工作:(可能低层执行了许多高层不需要的重复性工作)(4)很难确定分层的准确程度第三节第三节 知识库(黑板)结构知识库(黑板)结构1 概述概述(1)适合无确定性求解策略的问题)适合无确定性求解策略的问题 难以用数学精确处理的问题:医疗、地震、天气难以用数学精确处理的问题:医疗、地震、天气 人工智能:专家系统、模式识别、智能机器人人工智能:专家系统、模式识别、智能机器人(2)黑板系统是知识
31、库系统的一种。(3)示例:HEARSAY-II语音识别系统 HASP潜艇探测系统 CRYSALIS蛋白质分子的三维结构2 结构结构组成部分组成部分(1)表示当前状态的中心公共数据结构:黑板(2)知识库:是一些独立的、分离的与应用程序有关的知识库(3)一组对公共数据结构进行协同操作的独立程序集合(4)推理机:中心控制组件,对黑板的信息进行评估,并协调各专用程序进行工作。仓库系统及知识库仓库系统及知识库 初始状态目标状态中间状态中间状态推理知识库知识库知识库知识库3 动态特性动态特性(1)描述初始数据到)描述初始数据到黑板黑板中中(2)启动)启动控制组件控制组件的主循环的主循环(3)控制组件调用)
32、控制组件调用nextsource()过程,选择()过程,选择下一条下一条知识知识(4)nextsource()通过检测黑板确定哪些知识通过检测黑板确定哪些知识是可匹配的知识用知识的条件部分匹配黑板上是可匹配的知识用知识的条件部分匹配黑板上的数据的数据(续)(续)(5)根据预先确定的控制策略进行评估,在所)根据预先确定的控制策略进行评估,在所有匹配的知识中选择一条知识进行操作有匹配的知识中选择一条知识进行操作(6)根据该条知识的操作部分,更新黑板上数)根据该条知识的操作部分,更新黑板上数据的内容据的内容(7)控制策略判断是否已达到系统终止条件,)控制策略判断是否已达到系统终止条件,如果未达到,转
33、向步骤如果未达到,转向步骤3(8)终止)终止4 实现实现(1)定义问题)定义问题(2)定义问题的解空间)定义问题的解空间(3)将求解过程分成几个步骤)将求解过程分成几个步骤(1)定义如何将低级中间解转换成更高等级解)定义如何将低级中间解转换成更高等级解(2)定义如何进行启发性搜索)定义如何进行启发性搜索(3)详细指出修剪部分解空间的知识类型)详细指出修剪部分解空间的知识类型(4)将知识分解成与一定子任务相关联的专门知识)将知识分解成与一定子任务相关联的专门知识(5)定义黑板上的词汇集)定义黑板上的词汇集(6)设计系统的控制)设计系统的控制(7)实现知识库)实现知识库5 应用实例应用实例HEAR
34、SAYII语音查询,数据库类似于Google的语音搜索6 优缺点优缺点优点:优点:(1)可应用于许多没有确定解方法的问题(2)支持可更改性和可维护性(3)知识可重用(4)支持容错性和健壮性缺点:缺点:(1)测试困难(2)不能保证最优的求解方案(3)效率低(4)开发工作昂贵(5)缺少对并行机制的支持第四节第四节 MVC结构结构1、概述、概述 图形用户界面增强和用户的交互性图形用户界面增强和用户的交互性 用户界面的问题:用户界面的问题:用户界面经常需要变动用户界面经常需要变动 不同的用户对用户界面的要求不同:熟练用户和初不同的用户对用户界面的要求不同:熟练用户和初级用户级用户 同样的数据需要不同的
35、用户界面同样的数据需要不同的用户界面 用户界面用户界面和和功能核心功能核心的关系的关系解决之道解决之道 不可取的方式不可取的方式:用户界面和功能核心紧密结合:用户界面和功能核心紧密结合 目标目标:用户界面的易改动性、功能核心的相对:用户界面的易改动性、功能核心的相对稳定性稳定性 解决方案解决方案:MVC(模型视图控制)结构(模型视图控制)结构 MVC结构首先应用在结构首先应用在Smalltalk环境。环境。目前广泛应用于图形用户界面和交互式系统。目前广泛应用于图形用户界面和交互式系统。比如:比如:MFC、ET+、Java类库、类库、Spring、Struts等等2、MVC静态结构静态结构 3个
36、组成部分:个组成部分:模型模型、视图视图、控制控制 模型模型:系统处理问题逻辑的内在抽象。它封装:系统处理问题逻辑的内在抽象。它封装了问题的核心数据,以及逻辑和功能的计算关了问题的核心数据,以及逻辑和功能的计算关系。内在系。内在 视图视图:把表示模型的数据和逻辑关系以及系统:把表示模型的数据和逻辑关系以及系统的状态等信息以特定的方式显示给用户。外的状态等信息以特定的方式显示给用户。外表表 控制控制:处理用户和应用系统的交互操作。:处理用户和应用系统的交互操作。模型模型、视图视图、控制控制的分离,使得一个模型可以的分离,使得一个模型可以具有多个显示视图。具有多个显示视图。模型变化的传播机制:模型
37、变化的传播机制:模型、模型、视图视图、控制控制保证保证一致性。一致性。MVC的几个部分的几个部分3 MVC的动态特性的动态特性4 MVC的设计实现的设计实现 1、分析应用问题,将交互界面与核心功能分、分析应用问题,将交互界面与核心功能分离离 2、实现、实现观察器观察器、模型模型;并实现它们之间的变;并实现它们之间的变更传播机制(注册)。更传播机制(注册)。class observerpublic:virtual void update();class Modelpublic:Void attach(observer*s);Void detach(observer*s);Virtual void
38、 notify();Private:Collection registry;Void Model:notify()Iterator iter(registry);While(iter.next()iter.curr()-update();3、实现视图、实现视图Class View:public observer Public:view(Model*m):myModel(m),myController(0)myModel-attach(this);virtual view()myModel-detach(this);virtual void update()this-draw();virtual
39、 void initialize()virtual void draw();Void setModel(Model*m)myModel=m;Model*getModel()return myModel;Void setController(Controller*c)myController=c;Controller*getController()return myController;protected:Model *myModel;Controller *myController;4、实现控制器、实现控制器Class Controller:public observer Public:Vir
40、tual void handleEvent(event*)Controller(view *v):myView(v)myModel=myView-getModel();myModel-attach(this);virtual Controller()myModel-detach(this);virtual void update()Void setModel(Model*m)myModel=m;Model*getModel()return myModel;Void setView(View*c)myView=c;Controller*getView()return myView;protect
41、ed:Model *myModel;Controller *myView;实例实例5 MVC的变体的变体 1、将视图和控制器合并在一个组件中(文档、将视图和控制器合并在一个组件中(文档视图):典型案例为视图):典型案例为MFC观察者模式(观察者模式(Observer模式)模式)实例实例6 MVC的优缺点的优缺点 优点:优点:同一模型可有多个视图:同一模型可有多个视图:视图同步化:视图同步化:视图与控制器可接插性:视图与控制器可接插性:模型的可移植性:模型的可移植性:潜在的框架结构:潜在的框架结构 缺点:缺点:增加了系统结构的复杂性:增加了系统结构的复杂性:视图与控制器间的连接过于紧密:视图与控
42、制器间的连接过于紧密:数据访问的效率:数据访问的效率:使用现代用户界面工具的困难:使用现代用户界面工具的困难第五节第五节 PAC结构结构1、PAC结构概述结构概述 表示抽象控制表示抽象控制体系结构是以相互协作的体系结构是以相互协作的代代理程序理程序组成的组成的层次形式层次形式来定义的来定义的交互式软件交互式软件体体系结构。系结构。每个代理程序每个代理程序负责应用程序的某一个特定功能负责应用程序的某一个特定功能方面,而且每个代理程序均由方面,而且每个代理程序均由表示表示、抽象抽象和和控控制制3个组件。个组件。PAC结构把代理程序的人机交互部分与其功能结构把代理程序的人机交互部分与其功能内核及其通
43、信部分分隔开来。内核及其通信部分分隔开来。所以:在这种结构中,是将所以:在这种结构中,是将系统系统功能进行功能进行横向横向分解分解。分解为多个分解为多个代理程序代理程序。这些代理程序这些代理程序互相交互互相交互来完成软件的来完成软件的功能功能。2、PAC结构的方案结构的方案 树状的代理程序集合来建立交互式应用程序 树根部分顶层的代理程序 树干部分中层的代理程序 树叶部分低层的代理程序 整个树型图反映了代理程序之间的传递关系。每个代理程序依赖于它上面的代理程序,直至树根部的顶层代理程序。依赖倒转原则PAC到哪儿去了呢?到哪儿去了呢?在每个代理程序内部,都包括了在每个代理程序内部,都包括了PAC三
44、个组件:三个组件:表示组件表示组件(P):提供):提供PAC代理程序的可视行代理程序的可视行为。为。抽象组件抽象组件(A):基础的数据模型。):基础的数据模型。控制组件控制组件(C):连接):连接表示组件表示组件和和抽象组件抽象组件,并与其他组件通信。并与其他组件通信。以此为例,说明树根、树叶、树干部以此为例,说明树根、树叶、树干部分的代理程序的功能。分的代理程序的功能。3、PAC结构结构 PAC结构中的各部分的功能分析(1)树根部的代理程序 抽象组件:反映的软件的整体数据模型 表示组件:一般很少有职责 控制组件:协调各级代理程序之间的关系(2)树叶代理程序:具体语义概念 抽象组件:维护本代理
45、的数据。表示组件:语义视图,对用户的交互。控制组件:与上层代理的通信、交换事件与数据。(3)树干代理程序:合成与协作 抽象组件:维护本代理特殊的数据。表示组件:实现自己的视图。控制组件:与上下层代理的通信、交换事件与数据。4、动态特性、动态特性5、PAC结构的设计实现结构的设计实现 共分九步。关键的部分:根部PAC代理程序、叶部PAC代理程序、树干部PAC代理程序6、应用实例、应用实例7、优缺点、优缺点 优点:优点:(1)事物分离事物分离单一职责原则单一职责原则(2)易于变化和扩展易于变化(迪米特法)易于变化和扩展易于变化(迪米特法则)、扩展(依赖倒转原则)则)、扩展(依赖倒转原则)(3)支持
46、多任务代理程序可分配到不同的线)支持多任务代理程序可分配到不同的线程、进程或机器上。程、进程或机器上。缺点:缺点:(1)系统的复杂性提高)系统的复杂性提高(2)控制组件复杂)控制组件复杂(3)代理程序间的通信会影响系统效率)代理程序间的通信会影响系统效率(4)分解粒度越小,则用户界面相似性越多,)分解粒度越小,则用户界面相似性越多,但可用性就越差。但可用性就越差。第六节第六节 客户客户/服务器结构服务器结构1、概述、概述 MVC、PAC解决:同一程序内的不同部分的交互问题。那么 不同程序之间 的交互如何处理呢?为什么会出现“不同程序之间的交互”呢?1)一个程序不可能完成所有的工作;这些非核心的
47、工作需要交给其他的程序。如数据库服务器程序 2)地理位置的分隔,也必然会使得两个程序需要交互。网络应用程序 客户/服务器 结构 一个应用系统被分成了两个逻辑上分离的部分:客户、服务器。它们完成不同的功能。客户:发出请求 服务器:接受请求,完成服务功能。发展演变过程发展演变过程 1、基本客户/服务器系统 客户负责与用户的交互,向服务器请求 服务器负责操作数据库,并把查询结果发送给客户 2、把客户和服务器中的应用操作部分抽取出来形成应用逻辑服务器。客户与用户的交互 应用逻辑服务器复杂处理 3、减轻客户端的开发,统一客户端应用,引入浏览器和WWW服务器2、客户、客户/服务器的结构服务器的结构 1)系
48、统组成 客户:根据需要向服务器发出请求,得到结果后将信息显示给用户 服务器:等待接收客户的请求,向客户提供服务2、客户、客户/服务器的结构服务器的结构 2)两组件之间的关系 客户:数量不定,请求的时间不定 服务器:首先启动,随时提供服务。服务器需要公开自己能够提供的服务接口,便于客户端根据服务接口来请求。接口。2、客户、客户/服务器的结构服务器的结构 3)客户/服务器的连接 分成两种:两个程序在同一台机器:信号、消息、共享存储区、网络连接 两个程序在不同的机器:网络连接2、客户、客户/服务器的结构服务器的结构 网络连接 进程标识:操作系统使用的进程号,但不能用在网络上。端口号 在网络上需要还标
49、识机器:IP地址 半相关(三元组)、全相关(五元组)如何在程序中调用网络功能呢?直接处理每一位?如何和对方连接?直接处理每一位?如何和对方连接?如何处理差错?如何处理差错?如何解决流量等问题?如何解决流量等问题?这些工作不可能我们来一一解决。这些工作不可能我们来一一解决。需要借助于操作系统提供的系统服务。需要借助于操作系统提供的系统服务。Socket API(网络套接字):可以把(网络套接字):可以把Socket简单想像成一个文件简单想像成一个文件3、客户、客户/服务器的连接服务器的连接 1)连接的要求连接的要求(1)双方的交互必须通过定义好的接口来实现(2)双方交互的信息必须满足规定的语法形
50、式:协议(3)信息传送的方向:客户到服务器是请求信息,从服务器到客户为返回结果和状态信息(4)传送的信息可能需要打包、解包、加密等处理3、客户、客户/服务器的连接服务器的连接 2)连接的检测:服务器连接的检测:服务器 不可取的方式:循环检测不可取的方式:循环检测 常用的方式:中断的方式常用的方式:中断的方式 服务器的守护进程首先启动,处于等待状态;服务器的守护进程首先启动,处于等待状态;有客户请求到达会立即响应,有客户请求到达会立即响应,然后又回到等待状态准备接受下一个请求。然后又回到等待状态准备接受下一个请求。3)连接方式:信号、消息、共享存储区、网络连接方式:信号、消息、共享存储区、网络连