软件设计-理论课.ppt_第1页
软件设计-理论课.ppt_第2页
软件设计-理论课.ppt_第3页
软件设计-理论课.ppt_第4页
软件设计-理论课.ppt_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件体系结构 SoftwareArchitecture 教学内容 2 软件体系结构风格 2 SoftwareArchitectureStyles 提纲 虚拟机 解释器风格虚拟机 VirtualMachine 解释器 Interpreter 案例分析 KWIC 4 1 虚拟机 VirtualMachine 5 问题 你认为JAVA最吸引人的特性是什么 Built inNetworking GoodPerformance DynamicBinding Security AutomaticMemoryManagement SeveraldangerousfeaturesofC C eliminated Robust Compiler InterpreterCombo ObjectOriented PlatformIndependence WriteOnce RunAnywhere 6 WriteOnce RunAnywhere 7 JAVA如何支持平台独立性 Java虚拟机 8 什么是虚拟机 VirtualMachine 虚拟机是一种软件它创建了一种虚拟的环境将用户与底层平台隔离开来 VM VM VM VM 虚拟机 的分类 系统级的虚拟机 Systemvirtualmachine 对OS的虚拟 把一台物理上独立的机器虚拟为多个不同的虚拟机 每个虚拟机可支持运行各自的操作系统 本质 在OS与硬件之间建立隔离 Hardwarevirtualmachine 硬件虚拟机 进程级的虚拟机 Processvirtualmachine 对单一程序的虚拟 其本质是在应用程序与OS之间建立隔离 Applicationvirtualmachine 应用程序虚拟机 10 硬件虚拟机 想在Android下开发程序 必须买一部Android手机 不需要 下载一个Android虚拟机 硬件虚拟机 即可硬件虚拟机 Hardwarevirtualmachine 在一台服务器上虚拟地构造若干个独立的执行环境 每一个虚拟环境负责支持一个OS内核的执行 这些OS可以与该服务器本地的OS不同从而允许在一个OS上书写的应用程序可以在一台运行其它OS的机器上执行 11 虚拟机例子 VMware 12 应用程序虚拟机 应用程序虚拟机 Applicationvirtualmachine 将用户使用的应用程序与计算机系统隔离开来的软件应用程序无需针对不同的OS和硬件环境而开发不同的版本 只需针对虚拟机开发即可应用程序使用解释器 interpreter 或JIT Just in Time 技术在加以运行 13 Java虚拟机 JVM JVM 执行Java字节码的虚拟机JVM可适应所有的硬件与OS平台 从而使得Java具有 一次书写 到处运行 的能力JVM的标准输入 JavaClass在JVM上运行的程序必须首先被编译为标准的二进制格式的文件 class 14 JavaClass在JVM上的执行 Javaclass文件并不是机器代码或目标代码 而是一种具有标准中间格式的二进制文件 无法直接在任何OS平台上执行 JavaClass必须在JVM的支持下才能真正执行Javaclass文件在JVM下运行 运行策略可能为 解释器或JIT编译器 15 JVM的执行机制 JVM Java虚拟机 16 JVM的功能与作用 将JavaClass代码转化为特定OS所能支持的程序运行模式 每个特定的OS需要实现自己的JVM在执行具体的class代码之前 JVM需要针对特定的OS环境 做以下的事情 LoadandstoreTypeconversionObjectcreationandmanipulationOperandstackmanagement push pop Controltransfer branching MethodinvocationandreturnThrowingexceptions 17 基于JVM的Java程序开发与执行过程 18 2 解释器 Interpreter 19 MS DOS的命令解释器 用户的命令行请求 e g dir jsp a p 操作系统内核的执行指令 20 解释器 解释器是一个用来执行其他程序的程序解释器针对不同的硬件平台实现了一个虚拟机将高抽象层次的程序翻译为低抽象层次所能理解的指令 以消除在程序语言与硬件之间存在的语义差异 源代码 解释器 宿主系统 OS 硬件 解释执行 21 解释器 解释器通常用来在程序语言定义的计算和有效硬件操作确定的计算之间建立对应和联系简单和小规模的解释器只完成基本的信息识别和转换复杂的解释器需要从词法到句法 到语法的复杂识别和处理作为一种体系结构风格 解释器已经被广泛应用在从系统软件到应用软件的各个层面包括各类语言环境 Internet浏览器 数据分析与转换等LISP Prolog JavaScript VBScript HTML Matlab 数据库系统 SQL解释器 各种通信协议等 22 解释器的组成 被解释执行的程序 程序执行的当前状态 解释器引擎 解释器引擎的内部状态 23 解释器风格 基本构件 解释器引擎存储区 被解释的源代码解释器引擎当前的内部控制状态的表示 在某个时刻需要执行哪些指令程序当前执行状态的表示连接器 对存储区的数据访问 24 解释器Vs 编译器 解释器在软件中的应用由来已久 早期的程序语言环境就分为编译 Compilation 和解释 Interpretation 两大类 编译器解释器 25 源代码 c 编译器 目标码 obj 可执行文件 exe 宿主系统 OS 硬件 编译 链接 执行 源代码 解释器 宿主系统 OS 硬件 解释执行 解释器Vs 编译器 编译 链接 执行 解释执行 分析程序结构源代码 目标码确定内存分配与访问方案 分析程序结构确定内存分配与访问方案分配内存解释并执行程序 分配内存执行目标码 机器码 编译器 解释器 26 解释器Vs 编译器 解释器的执行速度要慢于编译器产生的目标代码的执行速度 但是却低于编译器 编译 链接 执行 的总时间解释器通常省略了链接与编译的步骤 从而降低编程时间编辑源代码 解释 调试编辑源代码 编译 链接 运行 调试 27 解释器Vs 编译器 解析器执行速度之所以慢 是因为每次解释执行的时候 都需要分析程序的结构 而编译代码则直接执行而无需重复编译解释器对内存的分配是在解释时才进行的 而编译器则是在编译时进行 因此运行时直接将程序代码装入内存并执行即可 28 解释器的三种策略 传统解释器纯粹的解释执行基于字节码的解释器编译 解释执行Just in Time JIT 实时编译器编译 解释执行 29 传统解释器 解释器直接读取源代码并加以执行 ASPExcelJavaScriptMATLAB 源代码 解释器 宿主系统 OS 硬件 解释执行 30 基于字节码的解释器 在该类解释器下 源代码首先被 编译 为高度压缩和优化的字节码 但并不是真正的机器目标代码 因而与硬件平台无关 编译后得到的字节码然后被解释器加以解释例如 Java Perl PHP Python 源代码 java 编译器 字节码 class 宿主系统 OS 硬件 编译 解释执行 解释器 31 JVM中的解释器 Java的源程序不是直接交给解释器解释 而是先经过一个编译过程 把Java源程序翻译成一种特定的二进制字节码文件 Bytecode 再把这个字节码文件交给Java解释器来解释执行javac程序将Java源代码编译为字节码Java编译器所生成的可执行代码可以不基于任何具体的硬件平台 而是基于JVM C C 要的源程序要在不同的平台上运行 必须重新进行编译 32 实时编译 实时编译JIT中 字节码在运行时被编译为本机的目标代码第一步是编译得到字节码字节码被配置到目标系统中当字节码被执行时 运行环境下的编译器将其翻译为本地机器码 33 实时编译 JIT模糊了解释器 字节码解释器和编译器之间的边界与区分JIT也用于 NET和Java平台 源代码 java 编译器 字节码 class 宿主系统 OS 硬件 编译 解释执行 解释器 编译器 目标码 obj 执行 编译 34 JIT需编译哪些部分 只有当某个函数要被执行时 才被编译 因此称为JIT而且 JIT并不是编译全部的代码 而是只编译那些被频繁执行的代码段被执行多次的方法包含多次循环的方法 35 问题 针对解释器的三种策略 传统解释器 traditionallyinterpreted 基于字节码的解释器 compiledtobytecodewhichistheninterpreted Just in Time JIT 编译器对比各自的工作原理 并对比分析各自的优缺点 36 2 案例分析 KeyWordinContext KWIC 37 KWIC KeyWordinContext KWIC索引是二次文献的辅助索引这种索引的出现是现代科学技术的发展和科技文献急剧增长的产物KWIC索引是最早出现的用电子计算机编制的文献索引1972年 DavidL Parnas在论文 OntheCriteriaToBeUsedinDecomposingSystemsintoModules 将KWIC索引系统作为一个案例用于模块化设计的研究KWIC被全世界各个大学的软件设计课程奉为课堂讲义或者作业的经典案例 38 KWIC 功能需求 功能需求 接受一些行每行有若干词每个词由若干字符组成每行都可以循环移位 重复地把第一个词删除 然后接到行末KWIC把所有行的各种移位情况按照字母表顺序输出 39 KWIC 举例 40 Athirdwayforstylestobecombinedistoelaborateonelevelof AthirdwayforstylestothirdwayforstylestoAwayforstylestoAthirdforstylestoAthirdwaystylestoAthirdwayfortoAthirdwayforstylesbecombinedistocombinedistobeistobecombinedtobecombinediselaborateonelevelofonelevelofelaboratelevelofelaborateoneofelaborateonelevel AthirdwayforstylestobecombinedistocombinedistobeelaborateonelevelofforstylestoAthirdwayistobecombinedlevelofelaborateoneofelaborateonelevelonelevelofelaboratestylestoAthirdwayforthirdwayforstylestoAtoAthirdwayforstylestobecombinediswayforstylestoAthird Input 输入 Circularshifts 循环移位 Output 输出 KWIC 非功能需求 可修改性 Modifiability 算法的变化 ChangeinAlgorithm 读入一行 便进行移位操作 incremental 读入所有行 然后再进行移位操作 batch 按需进行移位操作数据表示方式的变化 ChangeinDataRepresentation 行的存储方法可以有多种循环移位可以显示也可以隐式 如索引和偏移 系统功能的可扩展性 Enhancementtosystemfunction 删除以无意义词开头的行 如以a an and开头的行 行输入从数据库或用户界面输入在原始位移行上进行增 删 改操作 41 KWIC 非功能需求 性能 Performance 时空复杂性 Bothspaceandtime 系统构件的可复用性 Reusability 构件在多大程度上作为可重用的实体 42 解决方案1 管道和过滤器 使用管道 过滤器风格四个过滤器 输入 移位 排序 输出每个过滤器处理数据 然后将结果送至下一个过滤器控制机制是分布式的 只要有数据传入 过滤器即开始工作过滤器之间的数据共享被严格限制在管道传输 43 解决方案1 管道和过滤器 过滤器 Filters Inputfilter 输入 过滤器 从数据源读取输入文件 解析格式 将行写入输出管道 CircularShifterfilter 循环移位 过滤器 Alphabetizerfilter 排序 过滤器 Outputfilter 输出 过滤器 管道 Pipe in cspipecs alpipeal oupile 44 管道 ClassPipe 45 管道 46 importjava io PipedReader importjava io PipedWriter importjava io IOException publicclassPipe privatePipedReaderreader privatePipedWriterwriter publicPipe throwsIOException writer newPipedWriter reader newPipedReader letthispipedwritertobeconnectedtothepipedreaderwriter connect reader 管道 47 Writeschartothepipedoutputstreampublicvoidwrite intc throwsIOException writer write c Readsthenextcharacterofdatafromthispipedstreampublicintread throwsIOException returnreader read publicvoidcloseWriter throwsIOException writer flush writer close publicvoidcloseReader throwsIOException reader close 过滤器 AbstractClassFilter 48 过滤器 49 publicabstractclassFilterimplementsRunnable protectedPipeinput protectedPipeoutput privatebooleanis started false publicFilter Pipeinput Pipeoutput input input output output publicvoidstart if is started is started true Threadthread newThread this thread start publicvoidstop is started false 过滤器 50 publicvoidrun transform Thismethodtransformsthedatafromtheinputpipeandwritesthe transformeddataintooutputpipe abstractprotectedvoidtransform 过滤器 ConcreteClass 51 KWIC 52 in newFileInputStream file Pipein cs newPipe createthreeobjectsofPipePipecs al newPipe andoneobjectoftypePipeal ou newPipe FileInputStreamInputinput newInput in in cs CircularShiftershifter newCircularShifter in cs cs al Alphabetizeralpha newAlphabetizer cs al al ou Outputoutput newOutput al ou outputtoscreeninput start shifter start alpha start output start 解决方案1 管道和过滤器 优点 过程流非常直观支持复用容易修改过滤器的功能相互隔离新功能容易加入缺点 无法支持交互式系统例如 想手工删除行时空间复杂性高每个过滤器必须复制所有数据到它的输出端 53 对比另一种方案 子程序调用 54 privateArrayListkwicList publicKWIC Stringfilename kwicList newArrayList kwicList read filename shift 操作kwicListsort 操作kwicListdisplay 操作kwicList 解决方案2 面向对象风格 55 解决方案2 面向对象风格 采用OO的思想 数据和作用在数据上的读写操作被封装为object 主程序调用这些object 形成控制流程 数据不再被构件直接共享 而是被封装在了Object中每个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论