软件设计与体系结构复习整理题目与答案_第1页
软件设计与体系结构复习整理题目与答案_第2页
软件设计与体系结构复习整理题目与答案_第3页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、各种性能指标的定义及如何到达各种性能指标的方法 ppt1-8119页-124页性能:吞吐量Throughput、响应时间ResponseTime、Deadlines实现吞吐量:Peak&AverageManysystemhavelowaveragebuthighpeakthroughputrequirements实现响应时间: Guaranteed&Average E.g.95%ofresponsesinsub-4seconds,andallwithin10secondsDealines:DeadlinesoftenassociatedwithbatchjobsinITsystemsBusinessProcessOrchestratorsMessageBrokersApplicationServersTransport2、常用的中间件有那几种类型(四种)BizTalk,TIBCOStaffWare,ActiveBPELBizTalk,WebSphereMessageBroker,SonicMQJ2EE,CCM,.NETMessage-OrientedMiddleware,DistributedObjectsSystems分类:BusinessProcessOrchestrators 业务流程协调器MessageBrokers消息代理ApplicationServers应用服务器Transport面向消息的中间件,分布式对象系统(1)CORBA---公用对象请求代理 (调度)程序体系结构,它在对象间建立客户-服务器的关系,这样一个客户可以很简单地使用服务器对象的方法而不论服务器是在同一机器上还是通过一个网络访问。(常见的对象请求代理架构 )(2)BasicMessage-orientedmiddleware----MOM 指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成 。通过提供消息传递和消息排队模型,它可在分布环境下扩展进程间的通信 ,并支持多通讯协议、语言、应用程序、硬件和软件平台。(面向消息的中间件)(3)J2EE----J2EE核心是一组技术规范与指南 ,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容 ,企业内部或外部难以互通的问题。(4)Messagebrokers---- 消息代理是一种在数据源与目的地之间移动数据使信息处理流畅的软件技术,数据源与目的地包括已有的应用 、文件、数据库、对象、硬拷贝输出及Web客户端等。(消息代理)(5)Businessprocessorchestrators---- 业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是使在多个参与者之间按照某种预定义的规则传递文档 、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。业务过程代理)3、什么是软件架构(好几种定义,但是主要点是结构,元素,关系,接口)PPT第4页架构是一个系统的基本组织,体现在它的组件,它们之间的相互关系和环境,其设计原则和进化论程序或计算系统的软件架构是系统的结构或结构 ,由软件元素,这些元素的外部可见的属性它们之间的关系(软件架构)超过计算的算法和数据结构 ;设计和指定的总体系统结构作为一种新的问题出现。结构性问题包括组织和全球生产总值 (gdp)控制结构;协议进行通信,同步和数据访问;分配的功能设计元素;物流;设计元素构成;扩展和性能,设计方案中选择它是关于软件设计:所有的架构是软件设计,但不是所有的设计都是软件架构 。设计过程的一个部分;简单地说,架构关注一旦系统建立后就很难或是不可能改变的问题 ”:质量属性,例如安全性,性能;非功能性需求,像开销,硬件配置。百度答案】软件架构(softwarearchitecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯 。在实现阶段,这些抽象组件被细化为实际的组件 ,比如具体某个类或者对象 。在面向对象领域中,组件之间的连接通常用接口 —计算机科学)来实现系统的软件体系结构是建立一个对系统来说所需要的结构 ,包括软件元素,它们之间的关系,以及两者的性质。4、什么是架构风格PPT1-836页AnArchitecturalStyledefinesafamilyofsystemsintermsofapatternofstructuralorganization. Itdetermines:thevocabulary ofcomponents andconnectorsthatcanbeusedininstancesofthatstyle,asetofconstraints onhowtheycanbecombined. Forexample,onemightconstrain:e.g.,nocycles).thetopologyofthedescriptions(e.g.,nocycles).executionsemantics( e.g.,processesexecuteinparallel).描述软件的基本结构组织或纲要 ,提供事先定义好的子系统,制定好责任并将它们组织在一起的法则和指南。丨答案2:也叫架构模式,一个架构风格描述软件系统里的基本的结构组织或纲要。架构风格提供一些事先定义好的子系统 ,指定他们的责任并给出把他们组织在一起的法则和指南。一个架构模式常常可以分解成很多个设计模式的联合使用 。MVC模式就属于架构模式。软件系统有哪几类结构?模块、组件和连接器、配置。模块分配具体的职责,是工作的基础;我们调用运行时结构组件和连接器结构 ,在我们的使用中,组件始终是运行时实体;分配结构描述从软件结构映射到系统的环境 ,组织、发展、安装、执行;元素是一类模块(类、层或功能的划分等),模块与其他模块相关联通过概括化或专业化的关系;元素运行组件如服务、同行、客户、服务器、过滤器等,连接器是组件间的通信工具;5、有那些常见架构风格(1)管道和过滤器架构风格 PPT40页适用于需要定义一系列的执行规则数据的独立运算 。组件在输入时读数据流,在输出时产生数据流。优点:易于理解、支持重用、容易保持或增强、允许某些专业分析、支持并发执行缺点:转换特性导致其不擅长处理交互系统 、书写自己的过滤器时,过度地解析或不解析导致性能损失和更加复杂举例:unix的shell脚本、传统编译器组件:称为过滤器,应用于对局部的输入流的转换 ,经常增长的计算,因此,在输入结束前输出就开始了。.连接器:称为管道,给流提供管道,把一个过滤器的输出传输到另一个输入 。(2) 面向对象风格PPT49页适用于主要问题是识别和保护信息的相关主体 。数据代理和它们相关的操作封装在一个抽象数据类型里面。优点:可以改变实施而不影响客户,可以设计作为独立的交互代理的集合的系统缺点:一个对象与另一个对象进行交互时第一个对象必须知道第二个对象的身份 。对象引起的副作用。举例:java,c#开发的系统组件:对象连接器:功能和过程调用(方法)(3) 隐式调用风格应用于涉及到组件的松耦合集 ,其中的每一个都执行一些操作 ,还可能允许其他的操作。尤其对必须很快重新配置的应用很有用改变服务的供应商可能的或是不可能的能力不是直接的引用过程一个组件能发表一个或多个事件在系统中的其他组件能够在事件中注册一个兴趣通过与事件和过程结合当一个事件被声明后,广播系统(连接器)自己引用已经注册的事件的所有过程所有声明的事件隐式”造成了过程在其他模块的调用优点:为重用提供强大支持、简化系统演化缺点:当一个系统广播一个事件时,不知道其他哪些组件会响应,不知道依赖于响应被调用的顺序,不知道响应什么时候结束举例:数据库管理系统中执行完整性约束 (触发器)(4)客户-服务器风格PPT64页适用于涉及到分布式的数据和跨越一系列的组件的处理优点:数据分布简单明确、位置透明、混合和匹配异构平台、易于添加新服务器或升级现有服务器。缺点:没有名称和服务的中央寄存器 一很难找到什么服务是没用的举例:文件服务器、数据库服务器、对象服务器组件:服务器:标准独立的组件提供特别的服务 ,如打印,数据管理等。客户端:组件调用服务器提供的服务。连接器:网络,允许客户端访问远程服务器。(5)分层风格PPT72页适用于涉及到分布式的能够分层的组织的类的服务 ,每层给它的上一层提供服务同时作为下一层的客户端,只有仔细地从内层选择选择过程 ,才能用于他们临近的外层优点:设计(基于提高抽象层次)、改善(一个层的功能改变最多影响两个层 )、重用(相同层的不同实现可以交替使用 )缺点:并不是所有的系统都可以很容易的实现分层 ,性能需求可能迫使底层实现高级功能的耦合。举例:分层通信协议、操作系统组件:典型的过程的集合。连接器:典型的在有限的可见性下的过程调用(6)仓库风格PPT80页适用于主要问题是建立、增加和维护复杂信息的主体部分,信息一定要能够用很多种方式操作。经常需要长期的存在。优点:有效存储大量数据、共享式模式模型、集中式管理缺点:必须先达成一个数据模型、很难分配数据、数据升级很昂贵举例:信息系统、编程环境、图形编辑器、人工智能知识基础、逆向工程系统组件:主要的数据结构能够表示出系统的正确状态操作主要数据结构的独立组件的集合连接器:典型地过程调用或是直接内存访问(7)解释程序风格PPT87页适用于执行解决方案的最合适的语言或是机器不是直接可用的 。优点:模拟无实现的硬件、促进跨多种平台的应用程序或语言可移植性缺点:举例:编程语言编译器、基于规则的系统、脚本语言组件:包括一个状态机,有一个执行引擎和三个记忆状态当前的执行引擎的状态程序被翻译当前的被翻译的程序的状态连接器:过程调用直接内存访问(8)过程控制风格PPT94页适用于目的是维护特殊过程的输出属性在给定参考值的情形下优点:缺点:举例:实时系统软件用来控制(核电站、汽车巡航控制)组件:过程定义包括操作一些过程变量的机制控制算法决定如何去操作过程变量连接器:数据流关系过程变量:被控制的变量的值是系统能控制的输入变量能够检测过程的输入操纵变量的值能够被控制器改变设置断点是一个控制变量所需要的值

传感器获得过程变量与控制有关的值6架构师需要的核心技能是什么(1)涉众之间的交流 (2)技术知识(3)软件工程学 (4)风险管理7、什么是架构视图 PPT15页,描述中涵盖一个架构视图是对于从某一视角或某一点上看到的系统所做的简化描述了系统的某一特定方面,而省略了此方面无关的实体。,描述中涵盖8、软件架构过程(三个迭代步骤)PPT1-8202页1、确定架构需求:架构上重要的需求 (结构用例)---基本的质量和系统的非功能性需求2、 架构设计:迭代的设计步骤---风险识别是一个重要的输出设计3、结构验证:验证阶段---验证阶段的目的是增加信心的设计团队的架构是适合的目的 ;验证必须实现在项目时间和预算的约束 ,关键是要尽可能严格的和有效的 ;验证一个架构设计提出了严峻的挑战,因为这是一个设计不能执行或测试,包括新和COTS组件集成;两种主要的方法:手工测试使用的测试场景的体系结构 ,建设一个原型创建所需的应用程序的一个简单的原型;目的是识别潜在缺陷在设计实现生效前 ,这样他们就可以得到改善 ,在建造之前修复成本更便宜9、软件质量属性主要包括哪些(五种)ppt1-8116页Reliability可靠性、Availability可用性、Portability 可移植性、Scalability可伸缩性、Performanee(!)性能10、软件可用性取决于(三种时间)PPT146页Timetodetectfailure 故障检测时间Timetocorrectfailure 纠正失败时间Timetorestartapplication 重新启动应用程序时间11、伸缩性涉及那些方面(四种)ppt1-8116页Requestload请求负载Connections连接Datasize数据大小Deployments部署12、 吞吐率指标PPT120页Transactionspersecond每秒事务数Messagesperminute 每分钟的消息Messagespersecond(msp)Maximumsustainablethroughput(MST) 最大可持续吞吐量13、架构元素的通信包括哪些 PPT10页数据传递机制,例如:函数调用、远程方法调用、异步消息控制流:组件之间的消息流来实现需要的功能 、顺序、并发/并行、同步14、 各种架构风格的组件和连接器是什么见515、软件性能指标主要有哪几种 (三种)吞吐量、响应时间、Deadlines生死线16、 响应时间的度量(两种)PPT122页Usuallymeasuredin(milli)secondsGuaranteed可保证的、Averageother17、安全性质量指标主要有哪几种 (五种)PPT142页otherAuthentication: Applications canverifytheidentityoftheirusersandapplicationswithwhichtheycommunicate.身份验证:应用程序可以验证他们的用户的身份和他们通信的其他应用程序Authorization:Authenticatedusersandapplicationshavedefinedaccessrightstotheresourcesofthesystem.TOC\o"1-5"\h\z授权:身份验证的用户和应用程序定义了系统资源的访问权限 。Encryption: Themessagessentto/fromtheapplicationareencrypted.加密:从应用程序发送到/从应用程序的消息是加密的 。Integrity: Thisensuresthecontentsofamessagearenotalteredintransit.完整性:确保在传输过程中不会改变消息的内容 。Non-repudiation: Thesenderofamessagehasproofofdeliveryandthereceiverisassuredofthesender 'sidentity.Thismeansneithercansubsequentlyrefutetheirparticipationinthemessageexchange.不可否认性:一个消息的发送者有传递的证明 ,接收者保证了发送者的身份 。这意味着既不能反驳他们的信息交换的参与 。18、实现高可用性的策略(三种)PPT146页Strategiesforhighavailability:Eliminatesinglepointsoffailure消除单点故障Replicationandfailover复制和故障转移Automaticdetectionandrestart自动检测和重新启动19、信息隐藏原理PPTlecture988页信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息 (过程或数据),对于不需要这些信息的其他模块来说,是不可访冋的。信息隐藏(封装)主要是为了提高软件的可重用性和可维护性 。信息隐藏造成了系统各个部分耦合性低。系统是由各个部分构成的,如果这些部分耦合性低的话 ,那么这个系统开发、维护等就较容易?Oftenonehides,e.g.-Datarepresentation.Choiceofalgorithm.(e.g.database,Interfacedetails/accessmechanismofexternalentity(e.g.database,hardware)?Goal:particulardesignchoice “invisible ”todientWhywouldwewanttodothis?? InformationHidingmayormaynotbesupportedattheprogrammingIanguagelevel.20、GRASP模式的具体内容(9个),各种模式的定义,解决的什么问题创造者Creator分配给类B职责来创造类A的一个实例如果:(1)B聚合A的对象(2)B包含A的对象(3)B记录A的对象的实例 (4)B紧密地使用A的对象(5)B被创建时有初始化的数据传递给解决方案:将创建一个类A的实例的职责指派给类 B的实例,如果下列条件满足的话:a) B聚合了A对象b) B包含了A对象c) B纪录了A对象的实例d) B要经常使用A对象e) 当A的实例被创建时,B具有要传递给A的初始化数据(也就是说B是创建A的实例这项任务的信息专家)f) B是A对象的创建者如果以上条件中不止一条成立的话 ,那么最好让B聚集或包含A通俗点就是:我要用你所以我来创建你,请不要让别人创建你这个模式是支持低耦合度原则的一个体现专家Creator在设计对象(类)时,如果某个类能够在某方面具有完整信息 ,足以实现某责任,就将这个责任分配给这个类,解决方案:将职责分配给具有履行职责所需要的信息的类通俗点就是:该干嘛干嘛去,别管别人的闲事或者我的职责就是搞这个,别的事不管。举个简单的例子,如果有一个类是专门处理字符串相关的类 ,那么这个类只能有字符串处理相关的方法,而不要将日期处理的方法加进来。也就是提高软件高内聚一种原则。控制器Controller控制器是在用户接口层上的第一个对象,负责接收和处理系统的操作信息。解决方案:将处理系统事件消息的职责分派给代表下列事物的类:a) 代表整个系统”的类(虚包控制者)b) 代表整个企业或组织的类(虚包控制者)c) 代表真实世界中参与职责 (角色控制者)的主动对象类(例,一个人的角色)d) 代表一个用况中所有事件的人工处理者类 ,通常用<用例名>处理者”的方式命名(用例控制者)TOC\o"1-5"\h\z这是一个控制者角色职责分配的原则 ,就是哪些控制应该分派给哪个角色 。低耦合LowCoupling测量存在于模块之间的依赖程度解决方案:在分配一个职责时要使保持低耦合度 。耦合度(coupling)是一个类与其它类关联、知道其他类的信息或者依赖其他类的强弱程度的度量。一个具有低(弱)耦合度的类不依赖于太多的其他类 。(①高内聚HighCohesion测量一个共享的模块内元素的相关性 ;一个单独模块执行任务的程度是功能相关的解决方案:分配一个职责的时候要保持类的高聚合度聚合度或内聚度(cohesion)是一个类中的各个职责之间相关程度和集中程度的度量。一个具有高度相关职责的类并且这个类所能完成的工作量不是特别巨大,那么他就是具有高聚合度 。多态Polymorphism当相关的供选方案或行为随着类型的变化而变化时 ,给行为分配职责一使用多态操作—来适合行为变化的类型。也就是说尽量对抽象层编程 ,用多态的方法来判断具体应该使用那个类 ,而不是用ifinstanceof来判断该类是什么接来执行什么 。纯虚构PureFabrication分配一系列高度聚合的职责给虚假的类或是不表现某事完成的领域问题概念的有用的类,它支持高内聚、低耦合、可重用。TOC\o"1-5"\h\z一个纯虚构意味着虚构某些事物 ,而不是到了迫不得已我们才这样做 。例,我们的Sale类的数据要存入数据库,但是他必须和数据库接口相连接 ,如果将接口连接放入Sale类中势必增加该类的耦合度,所以我们可以虚构一个类来处理与数据库接口连接的问题 。这个类就是我们虚构出来的一个事物 。◎间接Indirection问题:如何分配职责避免直接耦合 ?如何减弱对象的耦合?解决方案:分配职责给中间的调解对象来调解两个组件之间的关系 。将职责分配给一个中间对象以便在其他构件或服务之间仲裁 ,这样这些构件或服务没有被直接耦合。这个中间对象(intermediary)在其他构件或服务间创建一个中介者(Indirection)。这个中间对象也就事7)中的纯虚构。⑨防止编译ProtectedVariations问题:如何设计对象,子系统和系统,使其内部的变化和不稳定不会对其他元素产生不良影响?解决方案:识别设计变化或不稳定之处 ,分配职责用以在这些变化之外创建稳定接口分配职责给一个客户端的直接对象以使它与一个间接对象进行协作 ,这样客户端无需知道这个间接对象。这个模式-也被叫做(Demeter)准则。通俗点就是:只与你直接的朋友们通信不要跟陌生人”说话每个软件单位对其他的单位都只有最少的知识 ,而且局限于那些与本单位密切相关的软件单位GRASP用职责设计对象:"DesigningObjectswithResponsibilities". 它包含了9个基本模式:1.信息专家(Informationexpert) 2.创建者(Creator) 3.高内聚TOC\o"1-5"\h\z(HighCohesion) 4.低耦合(LowCoupling) 5.控制器(Controller) 6.多态性(Polymorphism) 7.纯虚构(PureFabrication) 8.间接性(Indirection) 9.变化预防(ProtectedVariations)GRASP的主要特征:-对象职责分配的基本原则。-主要应用在分析和建模上 。GRASP的核心思想的理解:自己干自己的事 (职责的分配)自己干自己的能干的事 (职责的分配)自己只干自己的事 (职责的内聚)21、OO设计的五个基本原则及课件中讲述的其它软件原理 r-32-71单一职责原则这个原则和关注点分离紧密联系。它陈述了每个对象应该只有一个理由去改变 ,单一聚焦在职责上。通过依附这个原则,你避免了庞大的类的设计问题 ,那就像瑞士的军刀。有了TOC\o"1-5"\h\z精确的对象,你再次增加了系统的可读性和可维护性 。开闭原则这个原则陈述了类应该对扩展开放 ,对修改关闭,那样你就能够添加新的特征 ,扩展一个类而不用改变它内部的行为。这个原则旨在避免破坏存在的类及依赖它的其他类 ,这使得你的整个应用程序中产生故障和错误的涟漪 。Liskov替换原则Liskov替换原则要求你应该能够使用任何衍生出的类代替父类 ,不用修改就有同样的行为。这个原则与开闭原则一致,它保证了一个衍生出的类不影响父类的行为 ,或者说,衍生出的类必须能够被它们的基类替代 。接口分离原则这个原则是j将一个抽象方法分裂成几组职责 ,给这些组分配接口来防止客户端实现一个很大的接口,这个接口容纳了很多它们不使用的方法 。目的是为了让类使用相同的接口只需要实现一些具体的方法,而不是有很多方法的庞大的接口 。◎依赖反转原则把你的类从具体的实现中隔离开 ,使它们依赖于抽象类或接口 。它促进了对接口而不是实现的译码,这通过保证对实现的低耦合来增加系统的灵活性 。PPT耿祥义-7:面向抽象原则设计一个类时,不让该类面向具体的类,而是面向抽象类或接口开-闭原则设计应当对扩展开放,对修改关闭。如果您的设计遵守了 开-闭原则”,那么这个设计一定是易维护的 ,因为在设计中增加新TOC\o"1-5"\h\z的模块时,不必去修改设计中的核心模块 。高内聚-低耦合原则如果类中的方法是一组相关的行为 ,则称该类是高内聚的,反之称为低内聚的。所谓低耦合就是尽量不要让一个类含有太多的其它类的实例的引用 ,以避免修改系统的其中一部分会影响到其它部分 。其它基本原理】pptreview-32KeepItSimpleStupid(KISS)尽量保持代码简单而不要过分简单,这样可以避免不必要的复杂性 ?Don'tRepeatYourself(DRY)?TOC\o"1-5"\h\z通过抽象使系统中不要出现重复的部分 ?Tell,Don'task告诉你的对象要执行的操作,而不要询问(判断)它的状态,然后据此做决策Youain'tGonnaneedit(YAGNI)偏好必要的功能需求,推迟可能需要的其它特色 ?、SeparationofConcerns(SoC) ?关注点分离?MinimizeTheAccessibilityofClassesandMembers寻求类和其成员的访问性最小 ?UseAccessorsandMutators,NotPublicMembers使用访问器和赋值函数,不要使用公共成员?FavorCompositionOverInheritanee ?偏好组合而不是继承?Coad'sRules(Useinheritanceonlywhenallofthefollowingcriteriaaresatisfied)ProgramToAnInterface,NotAnImplementation ?面向接口而不是实现编程22、组合,继承,针对接口编程,黑盒,白盒重用继承:新功能的重用方法获得通过扩展现有对象的实现泛化类(超类)明确了共同的属性和方法专业类(子类)扩展了实现额外的属性和方法针对接口编程又称为面向接口编程 ,针对接口编程就是要先设计以系列的借口 ,把设计和实现分开,使用时之需要引用接口即可 ,也由于系统各部分的解耦合 。针对接口编程是为了提高程序的课维护性、可伸缩性和可复用性。如果你在一个类中直接使用另外的一个这样就把两个类紧密联系在一起了 ,以后如果想做出改变就很难了 。如果针对接口编程当业务变化时我们只需要用一个新的类实现接口即可23、MVC模式PPT916页UIlayerhasviews,Domainlayerhasmodelseparatingthevisual,interactionanddatacomponentsModelmaintainsthestateanddataoftheapplication-theXMLdocumentViewArenderingoftheXMLdocumentControllerTheuserinterfacepresentedtotheusertomanipulatetheapplicationMakesitveryeasytohavemultipledifferentdisplaysofthesameinformationMVCModelThe*ModercontainsthedataHasmethodstoaccessandpossiblyupdateifscontents.Often,itimplementsaninterfacewhichdefinestheallowedmodelinteractions.Implementinganinterfaceanablesmodelstobepulledoutandreplacedwithoutprogrammingchanges.MVCControllerUsersinteractwiththecontrollerItinterpretsmousemovement,clicks,keystrokes,etc-Communicatesthoseactivitiestothemodel-eg:deleterowtinsertrow,etc-It'sinteractionwiththemodelindirectlycausestheView(s)toupdateMVCView⑥ QTheViewprovidesavisualrepresentationofthemodel.TherecanbemultipleviewsdisplayingthemodelRtmnyonEtimeForexample,acompaniesfinancesovertimecouldberepresentedasatableandagraph.Thesearejusttwodifferentviewsofthesamedata.Whenthemodelisupldated,allViewsareinformedandgivenachancetoupdatethemsefves,c a a?MVC是模型-视图-控制器的缩写?它代表了一种软件设计模式 ,1978年开发在施乐帕克研究中心 ⑴?它解释了一种分离视觉、交互和数据组件的方法。?非常受欢迎,广泛用于Java和其他语言模型:维护应用程序的状态和数据的XML文档视图:XML文档的呈现控制器:用户界面呈现给用户操作的应用程序为什么使用Mvc模型? 模型”包含的数据?有一些方法来访问并可能更新它的内容 。?通常,它实现了一个允许模型交互的接口 。?实现了一个允许退出和取代的接口 ,并不伴随编程改变Mvc控制器?用户与控制器进行交互。?它解释鼠标移动,点击按键等?活动与模型沟通,如:删除行,插入行等?它的模型的交互间接导致视图的更新Mvc视图?视图提供模型的可视化表示。?在任何时候都可以有多个视图表示模型 。?例如,一个公司财务状况随着时间的推移可以用一个表和图表示?只有两种不同的视图表示相同的数据。?当模型更新时,所有视图被通知然后有机会更新 。当模型更新时,所有视图被通知然后有机会更新Model(模型)表示应用程序核心(比如数据库记录列表)。View(视图)显示数据(数据库记录)。Controller(控制器)处理输入(写入数据库记录)。组成元素:模型、视图、控制器;交互关系:用户通过视图发出一个请求 ,该请求被转发给控制器。控制器接收后决定使用什么模型,然后将请求转发给相应的模型 。模型处理完后将相应的数据返回给控制器 。控制器接收完数据后选择显示这些数据的相应的视图 ,并将视图返回给用户24、企业应用架构在各层有那些主要的模式,各层,各层的各种模式的定义和结构内容(展现层,领域层,数据源层)三层架构的系统:表现层实现用户界面,在领域层实现领域逻辑,在数据源层存取数据表现层(Presentation):提供服务、显示信息(如在WINDOWS或HTML页面中,处理用户请求,HTTP请求,命令行调用,批处理API)表现逻辑处理用户与软件间的交互 。主要职责是:向用户显示信息把从用户那里获得的信息解释成领域层或数据源层上的各种动作 。领域层(Domain):领域逻辑,系统中真正的核心。也称为业务逻辑,它就是应用程序必须做的所有领域相关工作:包括根据输入数据或者已有数据进行计算 ,对从表现层输入的数据进行验证 ,以及根据从表现层接收的命令来确定应该调试哪些数据源逻辑 。领域逻辑(业务逻辑),它就是应用必须做的所有领域相关的工作 :根据输入数据或已有数据进行计算对从表现层输入的数据进行验证根据从表现层接收的命令来确定应该调度哪些数据源逻辑 。数据源层(DataSource):与数据库、系统消息系统、事务管理器及其他软件包通信 。最主要的数据源逻辑就是数据库,主要责任是存储持久数据。数据源逻辑主要关注与其他系统的交互 ,这些系统将代表应邀完成相关的任务。主要的数据源逻辑就是数据库 ,它的主要职责是存储持久数据。三层的关系:领域层是核心!表现层是系统对外提供服务的外部接口 ;数据源层是系统使用外部服务的接口25、Larman的敏捷UP设计方法的具体步骤(1)初始:大体上的构想、业务案例、范围和模糊评估。(2)细化:已精化的构想、核心架构的迭代实现、高风险的解决、确定大多数需求和范围以及进行更为实际的评估 。构造:对遗留下来的风险较低和比较简单地元素进行迭代实现 ,准备部署。移交:进行beta测试和部署。26、4+1视图PPT16页4+1”视图模型即从5个不同的视角(逻辑视图,进程视图,物理视图,开发视图和场景视图)来描述软件体系结构。每个视图之关心系统的一个侧面 ,5个视图结合在一起才能反映系统的软件体系结构的全部内容 。萍用户-:tc耗務菠 斜员:目崖玉et雯砖人员;性成 亲绽工歳人序I:琢可旷元性、Allis^ 躬朴、対i”圃与逻辑视图:描述架构的重要元素及它们之间的关系过程视图:描述架构元素之间的并发和通信物理视图:描绘主要的过程和组件是如何映像到硬件上的开发视图:俘获软件组件内部的结构,如配置管理工具架构用例:俘获架构的需求;和不止一种视图相关(逻辑视图、流程视图、实现视图、部署视图、用例视图)27、应用的集成策略公开应用程序数据Data-exposeapplicationdataforaccessbyothercomponents公开应用程序数据供其他组件访问API-offersservicestoread/writeapplicationdatathroughanabstractedinterface即数据一一公开应用程序数据访问的其他组件 ,提供服务来读/写应用程序数据通过一个抽象接口28、上课讲的例子ICDE系统的四张架构图PPT1-8108ICDEPerformaneeIssuesScalability伸缩性Modifiability可变性Security安全性⑷Availability实用性(有效性、可用性)Integration 集成性反应一对正常和极端用法的脚本的反应是否足够快可伸缩性一系统的能力克根据需要增加或减少容量/产量一处理大负荷仍有反应安全性一系统不会社会产生危害29、 非功能属性包括哪些(三种)PPT12页技术限制、业务约束、质量属性30、 掌握:命令模式,状态模式,装饰模式,观察者模式,策略模式,单例模式,工厂方法模式,抽象工厂模式,组合模式适配器模式,外观模式,责任链模式的UML图和java代码命令模式(别名:动作,事务) 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。TOC\o"1-5"\h\z状态模式(别名:状态对象) 允许一个对象在其内部状态改变时改变它的行为 。观察者模式(别名:依赖,发布-订阅) 定义对象间的一种一对多的依赖关系 ,当个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新 。策略模式(别名:政策) 定义一系列算法,把它们一个个封装起来,并且使它们TOC\o"1-5"\h\z可相互替换。本模式使得算法可独立于使用它的客户而变化 。单件模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点 。工厂方法模式(别名:虚拟构造) 定义一个用于创建对象的接口 ,让子类决定实例化哪一个类。FactoryMethod 使一个类的实例化延迟到其子类 。抽象工厂模式(别名:配套)提供一个创建一系列(相互依赖)对象的接口,而无需指定它们具体的类。组合模式 将对象组合成数形结构以表示 部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性 。适配器模式 (别名:包装器) 将一个类的接口转换成客户希望的另外一个接口 。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作⑨外观模式 为系统中的一组接口提供一个一致的界面 ,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 。30、凡是课件里有关架构的具体例子(一般都有UML图或有代码)都需要仔细体会,比如显示学生成绩和全名的程序的不同架构方法 ,Inheritance/CompositionExample1的例子(person,agent,passenger)的合理设计(在ReviewofJavaandobject-orientedprogrammingPPT 里55页),PPT9276页31、 计算应收账款(RevenueRecognition) (iecture9PPTi75页-42页)的不同设计方法,农场计算动物脚数的设计方法 (lecture9PPT35页-42页)等等(不一一列出了)。单例模式:单件模式保证一个类仅有一个实例 ,并提供一个访问它的全局访问点 。单件模式是关于怎样设计一个类 ,并使得该类只有一个实例的成熟模式 ,该模式的关键是将类的构造方法设置为 private权限,并提供一个返回它的唯一实例的类方法I Singleton -uniquelnstaiice:SingJetoningleton图17.2单件複式的类閤单件类(Singleton):Moon.javapublicclassMoon{privatestaticMoon uniqueMoon;doubleradius;doubledistanceToEarth;privateMoon(){uniqueMoon=this;radius=1738;distanceToEarth=363300;}publicstaticsynchronizedMoongetMoon(){if(uniqueMoon==null){uniqueMoon=newMoon();}returnuniqueMoon;}publicStringshow(){Strings="月亮的半径是"+radius+"km,距地球是"+distanceToEarth+"km";returns;}}应用Application.javaimportjavax.swing.*;importjava.awt.*;publicclassApplication{publicstaticvoidmain(Stringargs[]){MyFramef仁newMyFrame(” 张三看月亮”);MyFramef2=newMyFrame(”李四看月亮");f1.setBounds(10,10,360,150);f2.setBounds(370,10,360,150);f1.validate();f2.validate();}}classMyFrameextendsJFrame{Stringstr;MyFrame(Stringtitle){setTitle(title);Moonmoon=Moon.getMoon();str=moon.show();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);setVisible(true);repaint();}publicvoidpaint(Graphicsg){super.paint(g);g.setFont(newFont("宋体",Font.BOLD,14));g.drawString(str,5,100);}}

工厂方法模式(别名:虚拟构造)定义一个用于创建对象的接口 ,让子类决定实例化哪一个类 。FactoryMethod使一个类的实例化延迟到其子类。模式的结构中包括四种角色:抽象产品(Product)具体产品(ConcreteProduct)构造者(Creator)具体构造者(ConcreteCreator)AAAApublic;Fruductfpublic;Fruductfactoryfilethod.0[returnjiwiConcr^teFroduct1八:publicFrsduit 0{returELnew ();Coiiri^eteCip^itoriConer?柜CieatorZCuiKl^tvPlXMllWflCounit?Prothtct.2+factoij/Mdhcdf):Product+factoi7Me1hadf):Froduct圏13很工厂方法權式的类圉抽象产品(Product) :PenCore.javapublicabstractclassPenCore{Stringcolor;publicabstractvoidwriteWord(Strings);}具体产品(ConcreteProduct)_1:RedPenCore.javapublicclassRedPenCoreextendsPenCore{RedPenCore(){color="红色";}publicvoidwriteWord(Strings){(”写出"+color+"的字:"+s);}}构造者(Creator):BallPen.javapublicabstractclassBallPen{BallPen(){笔芯的圆珠笔");System.out.println("生产了一只装有笔芯的圆珠笔");}publicabstractPenCoregetPenCore();//工厂方法}具体构造者(ConcreteCreator):RedBallPen.javapublicclassRedBallPenextendsBallPen{publicPenCoregetPenCore(){returnnewRedPenCore();}}BlueBallPen.javapublicclassBlueBallPenextendsBallPen{publicPenCoregetPenCore(){returnnewBluePenCore();}}BlackBallPen.javapublicclassBlackBallPenextendsBallPen{publicPenCoregetPenCore(){returnnewBlackPenCore();}应用Application.javapublicclassApplication{publicstaticvoidmain(Stringargs[]){PenCorepenCore;

BallPenballPen=newBlueBallPen();penCore=ballPen.getPenCore();?n=neW.RballPpenCpenCore.writeWord(” 你好,很高兴认识你?n=neW.RballPpenCoFe=ballPen.getPenCore()[kba*lPen=new®ackBallPen^^^FactoiyZ七iMtepenCor®=ba8Penge[kba*lPen=new®ackBallPen^^^FactoiyZ七iMtepenCor®=ba8Penge-i-ciieiteFiodiKtBOTiudMJctBtPenCtoireoi'.irtAO:FroduclA-hrreatePi™lnctB():PiciductEpenCore.wrtteWord("Howareyou");penCore.writeWord(”nicetomeetyou");匿1142抽魏工厂福式的芙图抽象工厂模式:模式的结构中包括四种角色 :抽象产品(Prodcut)具体产品(ConcreteProduct)抽象工厂(AbstractFactory)具体工厂(ConcreteFactory)抽象产品(Product)UpperClothes.javapublicabstractclassUpperClothes{publicabstractintgetChestSize();publicabstractintgetHeight();publicabstractStringgetName();}Trousers.javapublicabstractclassTrousers{publicabstractintgetWaistSize();publicabstractintgetHeight();publicabstractStringgetName();}具体产品(ConcreteProduct)_1:WesternUpperClothes.javapublicclassWesternUpperClothesextendsUpperClothes{privateintchestSize;privateintheight;privateStringname;WesternUpperClothes(Stringname,intchestSize,intheight){=name;this.chestSize=chestSize;this.height=height;}publicintgetChestSize(){returnchestSize;}publicintgetHeight(){returnheight;}publicStringgetName(){returnname;}}2.具体产品(ConcreteProduct)_2:CowboyUpperClothes.javapublicclassCowboyUpperClothesextendsUpperClothes{privateintchestSize;privateintheight;privateStringname;CowboyUpperClothes(Stringname,intchestSize,intheight){=name;this.chestSize=chestSize;this.height=height;}publicintgetChestSize(){returnchestSize;}publicintgetHeight(){returnheight;}publicStringgetName(){returnname;}}2.具体产品 (ConcreteProduct)_3:WesternTrousers.javapublicclassWesternTrousersextendsTrousers{privateintwaistSize;privateintheight;privateStringname;WesternTrousers(Stringname,intwaistSize,intheight){=name;this.waistSize=waistSize;this.height=height;}publicintgetWaistSize(){returnwaistSize;}publicintgetHeight(){returnheight;}publicStringgetName(){returnname;}}2.具体产品(ConcreteProduct)_4:CowboyTrousers.javapublicclassCowboyTrousersextendsTrousers{privateintwaistSize;privateintheight;privateStringname;CowboyTrousers(Stringname,intwaistSize,intheight){=name;this.waistSize=waistSize;this.height=height;}publicintgetWaistSize(){returnwaistSize;}publicintgetHeight(){returnheight;}publicStringgetName(){returnname;}}抽象工厂(AbstractFactory):ClothesFactory.javapublicabstractclassClothesFactory{publicabstractUpperClothescreateUpperClothes(intchestSize,intheight);publicabstractTrouserscreateTrousers(intwaistSize,intheight);}具体工厂(ConcreteFactory):BeijingClothesFactory.javapublicclassBeijingClothesFactoryextendsClothesFactory{publicUpperClothescreateUpperClothes(intchestSize,intheight){returnnewWesternUpperClothes(” 北京牌西服上衣",chestSize,height);}publicTrouserscreateTrousers(intwaistSize,intheight){returnnewWesternTrousers(” 北京牌西服裤子”,waistSize,height);}}ShanghaiClothesFactory.javapublicclassShanghaiClothesFactoryextendsClothesFactory{publicUpperClothescreateUpperClothes(intchestSize,intheight){returnnewWesternUpperClothes(” 上海牌牛仔上衣”,chestSize,height);}publicTrouserscreateTrousers(intwaistSize,intheight){returnnewWesternTrousers(” 上海牌牛仔裤”,waistSize,height);}}应用_1:Shop.javapublicclassShop{UpperClothescloth;Trouserstrouser;publicvoidgiveSuit(ClothesFactoryfactory,intchestSize,intwaistSize,intheight){cloth=factory.createUpperClothes(chestSize,height);trouser=factory.createTrousers(waistSize,height);showMess();}privatevoidshowMess(){System.out.println("< 套装信息>");System.out.println(cloth.getName()+":");System.out.print("胸围:"+cloth.getChestSize());System.out.println("身高:"+cloth.getHeight());System.out.println(trouser.getName()+":");System.out.print("腰围:"+trouser.getWaistSize());(”身高:"+trouser.getHeight());}}5.应用_2:Application.javapublicclassApplication{publicstaticvoidmain(Stringargs[]){Shopshop=newShop();ClothesFactoryfactory=newBeijingClothesFactory();shop.giveSuit(factory,110,82,170);factory=newShanghaiClothesFactory();shop.giveSuit(factory,120,88,180);}}TOC\o"1-5"\h\z\o"CurrentDocument"抽象工厂模式的优点 :抽象工厂模式可以为用户创建一系列相关的对象 ,使得用户和创建这些对象的类脱耦。使用抽象工厂模式可以方便的为用户配置一系列对象 。用户使用不同的具体工厂就能得到一组相关的对象,同时也能避免用户混用不同系列中的对象 。在抽象工厂模式中,可以随时增加具体工厂”为用户提供一组相关的对象 。组合模式:模式的结构中包括三种角色:抽象组件(Component)Composite节点(CompositeNode)Leaf节点(LeafNode)组合模式是关于怎样将对象形成树形结构来表现整体和部分的层次结构的成熟模式 。使用组合模式,可以让用户以一致的方式处理个体对象和组合对象 ,组合模式的关键在于无论是个体对象还是组合对象都实现了相同的接口或都是同一个抽象类的子类 。图熄乜组台模式的类團抽象组件(Component) :MilitaryPerson.javaimportjava.util.*;publicinterfaceMilitaryPerson{publicvoidadd(MilitaryPersonperson);publicvoidremove(MilitaryPersonperson);publicMilitaryPersongetChild(intindex);publiclterator<MilitaryPerson> getAIIChildren();publicbooleanisLeaf();publicdoublegetSalary();publicvoidsetSalary(doublesalary);}Composite节点(CompositeNode):MilitaryOfficer.javaimportjava.util.*;publicclassMilitaryOfficerimplementsMilitaryPerson{LinkedList<MilitaryPerson>list;Stringname;doublesalary;MilitaryOfficer(Stringname,doublesalary){=name;this.salary=salary;list=newLinkedList<MilitaryPerson>();}publicvoidadd(MilitaryPersonperson){list.add(person);}publicvoidremove(MilitaryPersonperson){list.remove(person);}publicMilitaryPersongetChild(intindex){returnlist.get(index);}publicIterator<MilitaryPerson> getAllChildren(){returnlist.iterator();}publicbooleanisLeaf(){returnfalse;}publicdoublegetSalary(){returnsalary;}publicvoidsetSalary(doublesalary){this.salary=salary;}}Leaf节点(LeafNode):MilitarySoldier.javaimportjava.util.*;publicclassMilitarySoldierimplementsMilitaryPerson{doublesalary;Stringname;MilitarySoldier(Stringname,doublesalary){=name;this.salary=salary;}publicvoidadd(MilitaryPersonperson) {}publicvoidremove(MilitaryPersonp

温馨提示

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

评论

0/150

提交评论