




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程第7章面向对象的分析和设计内容摘要面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模2/215内容摘要面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模3/215PeterCoad和EdwardYourdon提出用下列等式识认面向对象方法:面向对象
=对象(object)
+分类(classification)
+继承(inheritance)
+通过消息的通信(communicationwithmessages)可以说,采用这四个概念开发的软件系统是面向对象的4/215面向对象方法的出现很快受到计算机软件界的青睐,并成为20世纪90年代的主流开发方法。我们可以从下列几个方面来分析其原因:从认知学的角度来看,面向对象方法符合人们对客观世界的认识规律。面向对象方法开发的软件系统易于维护,其体系结构易于理解、扩充和修改。面向对象方法中的继承机制有力支持软件的复用。5/215面向对象的基本概念1.对象(object)
对象是指一组属性以及这组属性上的专用操作的封装体。
属性(attribute)通常是一些数据,有时它也可以是另一个对象。每个对象都有它自己的属性值,表示该对象的状态。对象中的属性只能通过该对象所提供的操作来存取或修改。
操作(operation)(也称方法或服务)规定了对象的行为,表示对象所能提供的服务。
6/215封装(encapsulation)是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。封装的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。
一个对象通常可由对象名、属性和操作三部分组成。7/2152.类(class)类是一组具有相同属性和相同操作的对象的集合。一个类中的每个对象都是这个类的一个实例(instance)。类是创建对象的模板,从同一个类实例化的每个对象都具有相同的结构和行为。8/215轿车型号:字符串颜色:字符串牌照号:字符串....张经理的轿车型号=桑塔纳颜色=红色牌照号=沪AN2037....类实例对象9/2153.继承(inheritance)继承是类间的基本关系,它是基于层次关系的不同类共享数据和操作的一种机制。父类中定义了其所有子类的公共属性和操作,在子类中除了定义自己特有的属性和操作外,可以继承其父类(或祖先类)的属性和操作,还可以对父类(或祖先类)中的操作重新定义其实现方法。10/215
矩形长宽对角线计算面积计算对角线
多边形顶点数顶点坐标计算面积旋转11/215有时,我们定义一个类,它把一些类组织起来,提供一些公共的行为,但并不需要使用这个类的实例,而仅使用其子类的实例。我们把这种没有实例的类称为抽象类(abstractclass)。在抽象类中可以定义抽象操作,抽象操作指:只定义这个类的操作接口,不定义它的实现,其实现部分由其子类定义。抽象操作操作名用斜体字表示,也可以在操作特征(signature)后面加上特征字符串{abstract}。12/215交通工具飞行器汽车
船轿车货车
一般-特殊关系13/215
如果一个子类只有唯一一个父类,这个继承称为单一继承。如果一个子类有一个以上的父类,这种继承称为多重继承。水上交通工具
陆上交通工具
水陆两栖交通工具多重继承14/2154.消息(message)消息传递是对象间通信的手段,一个对象通过向另一个对象发送消息来请求其服务。一个消息通常包括接收对象名、调用的操作名和适当的参数(如果有必要的话)。消息只告诉接收对象需要完成什么操作,但并不指示接收者怎样完成操作。消息完全由接收者解释,接收者独立决定采用什么方法完成所需的操作。15/2155.多态性(polymorphism)多态性是指同一个操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。例如“画”操作,作用在“矩形”对象上,则在屏幕上画一个矩形,作用在“圆”对象上,则在屏幕上画一个圆。也就是说,相同操作的消息发送给不同的对象时,每个对象将根据自己所属类中定义的这个操作去执行,从而产生不同的结果。16/2156.动态绑定(dynamicbinding)动态绑定是指在程序运行时才将消息所请求的操作与实现该操作的方法连接起来。传统的程序设计语言的过程调用与目标代码的连接(即调用哪个过程)放在程序运行前(即编译链接时)进行(称为静态绑定),而动态绑定则是把这种连接推迟到运行时才进行。动态绑定是一种在运行时确定被执行代码的技术。17/215在一般与特殊关系中,子类是父类的一个特例,所以父类对象可以出现的地方,也允许其子类对象出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。18/215if条件thenp:=t;elsep:=r;area:=p.getarea;getArea{abstract}polygonareahexagongetArearectanglegetArealengthwidthtrianglegetAreaVarp:polygon;Vart:triangle:=triangle.new;Varr:rectangle:=rectangle.new;19/215内容摘要面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模20/215面向对象分析
Object-OrientedAnalysis获取客户对系统的需求:包括标识场景和用况,以及建造需求模型用基本的需求为指南,来确定类和对象(包括属性和操作)定义类的结构和层次(继承关系)建造对象—关系模型建造对象—行为模型利用用况/场景来复审分析模型21/2151.获取客户对系统的需求需求获取必须让客户与开发者充分地交流,这里介绍一种采用用况来收集客户需求的技术。分析员首先标识使用该系统的不同的执行者(actor),这些执行者代表使用该系统的不同的角色。每个执行者可以叙述他如何使用系统,或者说他需要系统提供什么功能。执行者提出的每一个使用场景(或功能)都是系统的一个用况的实例,一个用况描述了系统的一种用法(或一个功能),所有执行者提出的所有用况构成系统的完整的需求。
分析过程22/215注意,执行者与用户是不同的两个概念,一个用户可以扮演几个角色(执行者),一个执行者可以是用户,也可以是其他系统(应用程序或设备)。得到的用况必须进行复审,以使需求完整。23/2152.
标识类和对象类和对象来自问题领域可以先标识候选类,然后进行筛选24/2153.定义类的结构和层次类的结构主要有两种:一般—特殊(generalization—specialization)结构和整体—部分(whole—part)结构。
一般—特殊结构是一种分类结构,反映了类间的一般与特殊的关系。一般类与特殊类之间是一种“isa”的关系,如:汽车是一种交通工具。同样,特殊类还可以分为更特殊的类,这样可形成类的层次结构。
整体—部分结构反映了类间的整体与部分关系。值得注意的是,整体—部分关系是对对象而言的,而不是对类的。整体—部分关系是一种“hasa”的关系,如“汽车”有“发动机”。同样,整体—部分结构也具有层次结构。25/2154.
建造对象——关系模型对象--关系模型描述了系统的静态结构,它指出了类间的关系(relationship)
类之间的关系有关联、依赖、泛化、实现等26/2155.
建立对象——行为模型对象--行为模型描述了系统的动态行为,它们指明系统如何响应外部的事件或激励(stimulus)。建模的步骤如下:评估所有的用况,以完全理解系统中交互的序列标识驱动交互序列的事件,理解这些事件如何和特定的对象相关联为每个用况创建事件轨迹(eventtrace)为系统建造状态机图复审对象--行为模型,以验证准确性和一致性27/215面向对象设计
(Object_OrientedDesign)
面向对象设计的一般步骤如下:系统设计将子系统分配到处理器选择实现数据管理、界面支持和任务管理的设计策略为系统设计合适的控制机制复审并考虑权衡(折衷)28/215对象设计在过程级别(procedurallavel)设计每个操作,即设计每个操作的实现细节定义内部类为类属性设计内部数据结构消息设计使用对象间的协作和对象--关系模型,设计消息模型复审复审设计模型并在需要时迭代。29/2151.系统设计1)
将分析模型划分成子系统在OO系统设计中,我们把分析模型中紧密相关的类、关系等设计元素包装成子系统。通常,子系统的所有元素共享某些公共的性质,它们可能都涉及完成相同的功能;它们可能驻留在相同的产品硬件中;或者它们可能管理相同的类和资源。子系统由它们的责任所刻画,即,一个子系统可以通过它提供的服务来标识。在OOD中,这种服务是完成特定功能的一组操作。
30/215
子系统的设计准则是:(1)子系统应具有定义良好的接口,通过接口和系统的其它部分通信;(2)除了少数的“通信类”外,子系统中的类应只和该子系统中的其它类协作;(3)子系统的数量不宜太多;(4)可以在子系统内部再次划分,以降低复杂性。31/2152)标识问题本身的并发性,并为子系统分配处理器通过对对象--行为模型的分析,可发现系统的并发性。如果对象(或子系统)不是同时活动的,则它们不需并发处理,此时这些对象(或子系统)可以在同一个处理器上实现。反之,如果对象(或子系统)必须对一些事件同时异步地动作,则它们被视为并发的,此时,可以将并发的子系统分别分配到不同的处理器,或者分配在同一个处理器,而由操作系统提供并发支持。32/2153)任务管理设计Coad和Yourdon提出如下管理并发任务对象的设计策略:(1)确定任务的类型;(2)必要时,定义协调者任务和关联的对象;(3)将协调者任务和其它任务集成。通常可通过了解任务是如何被启动的来确定任务的类型,如事件驱动任务,时钟驱动任务。每个任务应该定义其优先级,并识别关键任务。当有多个任务时还可以考虑增加一个协调者任务,以控制这些任务协同工作33/2154)数据管理设计通常数据管理设计成层次模式,其目的是将数据的物理存储及操纵与系统的业务逻辑加以分离。数据管理的设计包括设计系统中各种数据对象的存储方式(如内部数据结构、文件、数据库),以及设计相应的服务,即为要储存的对象增加所需的属性和操作。34/2155)资源管理设计
OO系统可利用一系列不同的资源(如磁盘驱动器、处理器、通信线路等外部实体或数据库、对象等抽象资源),很多情况下,子系统同时竞争这些资源,因此要设计一套控制机制和安全机制,以控制对资源的访问,避免对资源使用的冲突。
6)人机界面设计对大多数应用系统而言,人机界面本身是一个非常重要的子系统。人机界面主要强调人如何命令系统,以及系统如何向人提交信息。它包括窗口、菜单、报告的设计。
35/2157)子系统间的通信子系统之间可以通过建立客户/服务器连接进行通信,也可以通过端对端(peertopeer)连接进行通信。我们必须确定子系统间通信的合约(contract),合约提供了一个子系统和另一个子系统交互的方式。
36/2152.
对象设计对象设计是为每个类的属性和操作作出详细的设计,并设计连接类与它的协作者之间的消息规约。对象描述1)协议描述(外部的黑盒描述):描述对象的接口,即定义对象可以接收的消息以及当对象接收到消息后完成的相关操作;2)实现描述(内部描述):描述传送给对象的消息所蕴含的每个操作的实现细节,实现细节包括有关对象私有部分的信息,即关于描述对象属性的数据结构的内部细节和描述操作的过程细节。对象的使用者只需要关心协议描述37/2152)设计算法和数据结构为对象中的属性和操作设计数据结构和实现算法。3.
设计模式(designpatterns)在许多面向对象系统中,存在一些类和通信对象的重复出现的模式。这些模式求解特定的设计问题,使面向对象设计更灵活,并最终可复用。这些模式帮助设计者复用以前成功的设计,设计者可以把这些模式应用到新的设计中。38/215一个设计模式通常可用四个信息来描述:1)模式名设计模式名应具有实际的含义,它能反映模式的适用性和意图。2)使模式可被应用所必须存在的环境和条件。3)设计模式的特征模式特征指出一些设计的属性,调整这些属性使该模式能适应各种不同的问题。这些属性表示设计的特征,这些特征能被用于检索(通过数据库)以找到合适的模式。4)应用设计模式的结果(consequences)对于一个设计模式的使用结果表明设计决策的走向。39/215CategoryClass-&-ObjectStructure1+1+AttributeMethodObjectmodel由五个层次组成,相当于把五张透明胶片叠在一起,每一层显示更多的细节。面向对象设计基本过程40/215内容摘要面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模41/215统一建模语言UMLUnifiedModelingLanguage42/215UML概述为何研究UML—结束方法大战发展历史
1994年Booch和Rumbaugh在RationalSoftwareCorporation开始了UML的工作,其目标是创建一个“统一的方法”,
1995年OOSE的创始人Jacobson加盟到这项工作中,工作重点转移到创建一种统一的建模语言UML1996年6月、10月、1997年1月、11月分别推出了UML0.9、UML0.91、UML1.0、UML1.143/215UML概述1997年11月,OMG(ObjectManagementGroup)批准把UML1.1作为基于面向对象技术的标准建模语言之后,UML进行了持续的修订和改进,先后产生了UML1.2、1.3、1.4、1.5版本2004年推出了UML2.0,UML2.0对UML1.x作了重大的修改44/215UML模型元素(V1.3)
模型中的实体以及实体间相互连接的关系泛化
对象属性操作状态用例
结点接口包依赖关联聚集模型元素类属性操作构件注解45/215UML模型元素(V2.0)
模型中的实体以及实体间相互连接的关系部分模型元素注解类属性操作对象:类属性操作状态用况
结点供应接口包依赖关联泛化主动类属性操作请求接口构件实现46/215UML2.0的13种图-1用况图(usecasediagram)类图(classdiagram)对象图(objectdiagram)构件图(componentdiagram)组合结构图(compositestructurediagram)顺序图(sequencediagram)通信图(communicationdiagram)交互图(interactiondiagram)47/215UML2.0的13种图-2状态机图(statemachinediagram)活动图(activitydiagram)部署图(deploymentdiagram)
制品图(artifactdiagram)包图(packagediagram)时间图(timingdiagram)交互概览图(interactionoverviewdiagram)48/215UML图1-用况图描述参与者与用况(参与者使用系统以实现某一特定目标的情形)之间的关联关系,以及用况之间的扩展、继承等关系银行储蓄帐户管理系统《包含》《包含》《包含》银行职员(用户代理)帐户管理银行间转帐开户取款银行内转帐注销存款校验密码转帐报表生成其它银行帐户管理系统客户系统管理员银行职员(管理人员)49/215UML图2-类图展现一组类、接口以及它们相互之间的关系2条或2条以上的线交于0个或1个点lineX1:realY1:realX2:realY2:realpointX:realY:real相交2..*0..150/215UML图3-对象图展现一组对象以及相互之间的关系,是依照类图所建立的一组事物(实例)的静态快照L1:lineX1=10Y1=10X2=-10Y2=-10L2:lineL3:lineX1=10Y1=5X2=-10Y2=-5L4:lineX1=9Y1=5X2=9Y2=3X1=-10Y1=10X2=10Y2=-10P1:pointX=0Y=0P2:pointX=9Y=4。551/215UML图4-构件图描述构件、接口以及构件间的组装关系的静态视图,复合构件本身可以由内部的子构件图描述应用收费管理信用卡代理构件的内部结构图信用卡代理状况购买预购销售团体销售:售票员:营业员界面:销售亭界面:管理员界面:票:信用卡收费个体销售收费顾客访问营业员访问52/215UML图5-组合结构图UML2.0新增的图,展示了类或协作的内部结构,与构件差别不大,经常认为与构件图等同53/215UML图6-顺序图描述特定场景下交互各方消息发送和接收的顺序呼叫方电话线应叫方54/215UML图7-通信图另一种交互图,强调交互上下文:参与交互的对象或角色的结构组织控制电梯运行的通信图2:nextjob=GetJob():Elevator:Queue:Order{new}{local}nextjob:Elevatorcontrol:ButtonPush(){parameter}job1.2:Create()1.1*[allqueues]:len:=Length(){broadcast}1.3:Invoke(job)1:GetElevator(floorid)job55/215UML图8-状态机图以状态机的形式描述目标对象在各种事件作用下的行为电梯升降的状态机图Movingupdo/movingtofloorMovingdowndo/movingtofloorIdletimer=0do/increasetimerarrivedarrivedgodown(floor)MovingtoFirstfloorgoup(floor)[timer=time-out]arrivedgoup(floor)Onfirstfloor56/215UML图9-活动图描述一系列活动之间的控制流和数据流[未付款][已付款]*[对每一订单项][有货][缺货]取消并退回订单收到订单付款认可检查订单项制作并发放提货单更新库存制作并发放缺货单制作并发放采购单57/215UML图10-部署图描述系统运行时各相关处理单元结点、各结点上部署的构件、以及相互间的通信协议《DecNet》《TCP/IP》《TCP/IP》ClientA:CompaqProPCApplicationServer;SiliconGraphicsO2DatabaseServer:VAXClientB:CompaqProPC58/215UML图10-部署图变体:制品图部署图的变体:描述系统实现制品的物理结构,制品包括文件、数据库等这两个物理文件“承载了”逻辑类HelloWorld的实现59/215UML图11-包图描述包(一种模型分解单位)以及包之间的关系售票处计划广告进度表客户记录票记录运作售票工资单计算购买60/215UML图12-时间图UML2.0新增的图,描述对象间的交互,但关注于关于时间的推理,而不仅仅是相对顺序添水加热61/215UML图13-交互概览图UML2.0新增的图可认为是:活动图+顺序图的混合体使用活动图的表示法,其中的节点或者是一个交互或者是一个交互引用62/215UML2.0的视图和图视图(view)UML图(静态方面)UML图(动态方面)用况视图用况图交互图状态机图活动图设计视图类图对象图同上交互视图与设计视图相同,更强调消息交互方面实现视图构件图同上部署视图部署图同上需求设计实现部署63/215UML视图1-用况视图描述可被最终用户、分析人员和测试人员看到的系统(外部)行为不涉及系统的内部结构,但却是系统体系结构设计的驱动力静态方面:用况图动态方面:交互图、状态机图、活动图64/215UML视图2-设计视图描述系统设计方案,主要包括类、接口以及相互之间的协作关系静态方面:类图、对象图动态方面:交互图、状态机图、活动图65/215UML视图3-交互视图展示系统不同部分之间的控制流,包括并发和同步机制主要针对系统的非功能性方面,例如性能、可伸缩性、吞吐量等静态方面:类图、对象图动态方面:交互图、状态机图、活动图与设计视图的区别:突出控制系统的主动类以及各部分间消息的流动66/215UML视图4-实现视图描述组成最终产品发布的相关制品及其关系,实现单元体现为可装配、打包并发布的文件体现了逻辑单元(类和构件)到物理制品(物理构件、文件等)的映射静态方面:构件图动态方面:交互图、状态机图、活动图67/215UML视图5-部署视图描述最终产品物理部署的拓扑结构包括组成整个系统的各种分布式硬件设备,以及各个软件模块在这些设备上的部署和运行关系静态方面:部署图动态方面:交互图、状态机图、活动图68/215内容摘要面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模69/215用况建模用况:文本形式的情节描述,用以说明某参与者使用系统以实现某一特定目标的情形用况建模用于描述一个系统应该做什么,用用况图来描述(可能有多幅)用况图给出了用户所感受到的系统行为,但不描述系统如何实现该功能70/215用况图用框图展示各类外部执行者(actor)与系统所提供的用况之间的参与关系,包括:系统边界、用况执行者(参与者):可能使用这些用况的人或外部系统,参与者与用况连接表示参与者使用了该用况模型元素间关系:关联、扩展、包含、泛化等每个用况的细节通常用文字描述,也可以用活动图来描述71/215用况之间的关系-1关系说明记号关联参与者与所参与的一个用况之间的通信路径扩展扩展的用况到基本用况的一种关系:扩展用况可以访问基本用况的所有属性,并在基本用况基础上增加新的行为《extend》72/215用况之间的关系-2关系说明记号包含被包含用况是基本用况的一部分,基本用况能看到被包含用况并依赖于它的的执行结果,但二者不能相互访问其它属性泛化一个一般用况与一个更特殊的用况之间的关系,特殊用况可继承一般用况的特征《include》73/215电话订购系统用况图客户售票员送货员主管建立信用供应订单订单支付提供客户数据产生订单信用卡支付现金支付设置订单请求目录电话订购《include》《include》《include》《extend》核对身份关联扩展包含泛化74/215银行储蓄帐户管理系统《include》《include》《include》银行职员(用户代理)帐户管理银行间转帐开户取款银行内转帐注销存款校验密码转帐报表生成其它银行帐户管理系统客户系统管理员银行职员(管理人员)包含泛化75/215参与者之间的泛化关系76/215用况图对于各方的作用客户:用况模型指明了系统的功能,描述了系统能如何使用开发者:用况模型帮助他们理解系统要做什么,同时为以后的其它模型建模、结构设计、实现等提供依据集成测试和系统测试人员:根据用况来测试系统,以验证系统是否完成了用况指定的功能77/215用况建模步骤定义系统(总体范围)确定参与者确定用况描述用况定义用况间的关系确认模型78/215用况建模—定义系统范围/边界根据项目的总体目标/任务以及基本的开发决策决定做什么不做什么总体目标/任务:实现出版社书籍的网上销售开发决策:网上支付采用银联支付系统、书籍的基本信息来自于出版社已有的编辑和发行管理系统(遗产系统)边界外的人或系统(第三方系统、遗留系统等)成为候选的参与者79/215用况建模—确定参与者参与者是指与系统交互的人、组织或其它系统参与者代表一种角色,而不是具体的人可分成主参与者和辅助参与者主参与者是用况的直接执行者,例如保险系统中业务员处理保险的注册和管理辅助参与者对于用况的执行起辅助作用,例如保险系统中管理员负责分配业务员权限80/215确定参与者的启发式问题谁使用系统的主要功能(主执行者)谁需要从系统中得到对他们日常工作的支持谁需要维护、管理和维持系统的日常运行系统需要控制哪些硬件设备系统需要与哪些其它系统交互哪些人或哪些系统对系统产生的结果(值)感兴趣81/215用况建模—确定用况用况的特征用况总是由参与者启动的执行者必须直接或间接地指示系统去执行用况用况向参与者提供服务或返回结果,这些结果必须是可识别的用况是完整的,一个用况必须是一个完整的描述
(有开始、有结果)82/215用况(UseCase)文本形式的情节描述,用以说明某参与者使用系统以实现某一特定目标的情形例:顾客携带所购商品到达收银台,收银员使用POS系统记录每件商品,系统连续显示累计金额并逐行显示细目,顾客输入支付信息,系统对支付信息进行验证和记录,成功后更新库存信息,顾客从系统得到购物小票然后离开83/215场景(Scenario)使用系统的一个特定情节或用况的一条执行路径,即用况实例(UseCaseInstance)主成功场景:顾客携带商品到收银台,顺利地完成商品扫描及信用卡付款等全过程替代场景1:…商品扫描失败,提示输入商品唯一码…替代场景2:…信用卡划账通讯失败,提示客户使用现金结帐………替代场景n:用户信用卡支付成功后要求退货……因此用况就是一系列可能的场景集合84/215确定用况的启发式问题执行者需要系统提供哪些功能?执行者需要系统做什么?执行者是否需要读、创建、删除、修改或储存系统中的某类信息?执行者是否要被系统中的事件提醒,或者执行者是否要提醒系统中某些事情?从功能观点看,这些事件表示什么?执行者的日常工作是否因为系统的新功能(尤其是目前尚未自动化的功能)而被简化或提高效率85/215用况建模—描述用况使用文本描述用况的目的用况是如何启动的:哪个参与者在什么情况下启动(前提)参与者和用况之间的消息流(步骤)主消息流和其它消息流是什么根据条件或异常情况等选择不同的流程分支系统中哪些实体被使用或修改(结果),如何确定用况执行结束使用活动图描述86/215用况的简要文字描述执行者的简要描述,如客户:向公司订购商品的人客户代表:公司处理客户请求的雇员库存系统:记录公司库存的软件用况的简要描述,如订购货物:客户创建一个新的请求商品的订单,并为那些商品付费取消订单:客户取消一个已经存在的订单87/215用况的详细描述用况名称、参与者用况的前置条件和后置条件:用况开始和结束的条件事件流:一系列陈述句,从参与者的角度出发的一系列步骤一般有多个事件流:主要流程、其它流程特殊需求:相关的非功能性需求88/215用况的详细描述结构用例的组成部分注释用例名称以动词开始范围要设计的系统级别“用户目标”(基本流程)或“子功能”主要参与者调用系统以提供服务的参与者涉众及其关注点关注该用例的人,以及他们各自的需要前置条件用例启动前必须成立的条件后置条件用例结束后必须成立的条件主成功场景典型的、理想的成功场景替换场景其它可能的场景(成功或失败)特殊需求相关的非功能需求技术和数据变元表不同的I/O方法及数据格式发生频率当前用例的发生频率,可能影响调查、测试和实现的时间安排其它问题仍待解决或确认的问题89/215POS系统收银用况详细说明-1范围:下一代POS系统级别:用户目标主要参与者:收银员涉众及其关注点:收银员:准确、快速地完成收银操作…
顾客:快速完成付款并获得购物凭证以方便退货………前置条件:收银员经过认证、顾客是超市会员后置条件:正确更新库存、正确计算税金……90/215POS系统收银用况详细说明-2主成功场景:
1.顾客携带商品到收银台付款
2.收银员启动一次销售过程……
n.顾客付款系统打印票据完成整个销售过程替换场景:a.……顾客信用卡额度不足要求退货……b.……顾客信用卡额度不足要求退货…………特殊需求:
1.90%情况下信用卡刷卡响应时间小于30秒2.顾客能在1米范围内清楚看到单价和累计金额显示……91/215POS系统收银用况详细说明-3技术与数据变元:
1.商品ID获取可以通过扫描和键盘输入两种方式2.商品ID支持中国、欧洲及日本三种编码标准
……发生频率:可能在16小时内不间断发生其它问题:
1.收银员下班后是否需要清理现金并进行结帐处理2.该超市是否可能在未来实行24小时营业……92/215确定用况之间的关系关联:参与者与用况扩展:用况与用况包含:用况与用况泛化:用况与用况93/215实例本实例实现一个简化了的银行储蓄账户管理系统,该系统是在银行的柜台上对客户办理活期储蓄业务。系统的需求陈述如下:一个客户可以在多个银行中开设账户,一个客户也可在同一银行中开设多个不同的账户。客户可以通过银行职员进行开户、存款、取款、转账、注销账户等活动。其中转账指客户将自己的某个账户上的钱款转入同一银行的不同账户(称为银行内转账)或转入不同银行的账户(称为银行间转账)。系统管理员负责系统的账户管理及业务报表的生成。94/215识别执行者客户:到银行办理储蓄业务的人,负责输入密码银行职员(客户代理):银行工作人员,代表客户进行储蓄业务的操作银行职员(管理人员):银行工作人员,根据客户的储蓄业务更新账户管理员:银行计算机的管理人员,负责账户的管理和业务报表的生成95/215识别用况从系统的需求陈述可知,银行职员(客户代理)需要系统提供开户、存款、取款、转账、注销账户等功能,这些功能都包含了校验密码的功能。系统管理员需要系统提供账户管理和报表生成功能。银行职员(管理人员)则参与了账户管理中的更新账户的功能。此外,转账功能可分为银行内转账和银行间转账,我们可将它们设计成三个用况,其中银行内转账用况和银行间转账用况都继承了基本转账用况。据此分析,得到该系统的用况图如下图所示。96/215银行储蓄账户管理系统《包含》《包含》《包含》银行职员(用户代理)账户管理银行间转账开户取款银行内转账注销存款校验密码转账报表生成其它银行账户管理系统客户系统管理员银行职员(管理人员)97/215开户用况描述用况名称:开户参与的执行者:银行职员(客户代理),客户前置条件:一个合法的银行职员(客户代理)已登录到该系统事件流:1.当选择开户功能时用况开始2.输入客户信息(姓名、地址、身份证号等)3.从账户管理系统获取新的账号4.请客户输入密码5.请客户再次输入密码6.如果两次密码不一致则回到第4步,否则继续7.在账户库中添加新账户8.打印存折,用况结束后置条件:在账户库中增加了一个新账户,得到一张新存折98/215取款用况描述用况名称:取款参与的执行者:银行职员(客户代理)前置条件:一个合法的银行职员(客户代理)已登录到该系统事件流:基本路径:1.当选择取款功能时用况开始2.当输入客户信息(姓名、账号等)后
a)如果客户信息与账户不一致,显示错误信息,可以重新输入或结束用况
b)如果该账户被冻结(如因挂失而冻结),显示冻结信息并结束用况3.输入并校验密码99/2154.输入取款金额,如果该账户的余款小于取款金额,显示错误信息,要求重新输入5.打印取款单,交客户签字6.建立取款事件记录,更新账户信息7.打印存折,用况结束可选路径:1.在第5步客户签字之前的任何时刻,客户可以取消本次取款,用况结束2.第3步校验密码时,如发现密码不一致,则重新输入密码,或用况结束后置条件:如果取款成功,客户账户中的余额被更新(减少),否则余额不变。100/215取款用况的活动图描述[客户不确认][客户确认][余额≥取款额][未冻结][不一致][一致][选择重新输入][选择结束][冻结][余额<取款额]●··●··打印取款单输入客户信息显示错误信息建立取款记录更新账户信息打印存折显示错误信息输入取款金额输入并校验密码显示冻结信息●··101/215内容摘要面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模102/215类图和对象图类和对象模型的基本模型元素有类、对象以及它们之间的关系对象图是类图的实例,描述某一时刻类图中类的特定实例以及这些实例之间的特定链接对象图使用了与类图相同的符号,只是在对象名下附加下划线,对象名后可接以冒号和类名,即
object-name:class-name系统中的类和对象模型描述了系统的静态结构103/215类图和对象图的基本元素
对象名:类名属性名=值操作类名属性名:类型操作聚集组合关联泛化依赖实现104/215类图和对象图(例)实例xL4P2lineX1:realY1:realX2:realY2:realpointX:realY:realL1:lineX1=10Y1=10X2=-10Y2=-10L2:lineL3:lineX1=10Y1=5X2=-10Y2=-5L4:lineX1=9Y1=5X2=9Y2=3X1=-10Y1=10X2=10Y2=-10P1:pointX=0Y=0P2:pointX=9Y=4。5P1L1yL2类图对象图105/215类图中类之间的关系关系含义符号关联两个元素之间的关联关系依赖两个元素之间的依赖关系泛化一般与特殊关系聚集整体与部分之间的关联关系组合更强的一种整体与部分间的拥有关系,整体负责部分的创建和删除实现规约(specification)与它的实现之间的关系106/215关联关系从参与方数量分:二元关联、多元关联从参与限制:受限关联整体和部分的关联:聚集和组合107/215二元关联二元关联表示为在两个类之间用一条直线连接,直线上可写上关联名有首都国家城市工作于公司员工雇佣关联通常是双向的108/215关联的重数限制和角色驾驶人轿车驾驶员公车工作于公司员工雇佣*1工作于公司员工雇佣**关联的两端还可加上角色名(role)109/215与自身的关联*雇佣*工作于工人1..*老板0..1管理公司员工雇佣关联的链公司A张三公司B李四公司A王五公司C张三链是关联的实例110/215自身关联中的角色一个类的对象在不同的关联中扮演不同的角色保险公司人保险合同保险单0..11表示为表达0..*1有涉及婚姻丈夫妻子0..*1..*涉及有保险客户111/215多元关联(例)项目程序语言程序员112/215多元关联的对象图(例)CAD程序:项目C:语言记账系统:项目COBOL:语言张三:
开发人员三重关联对象图113/215受限关联受限关联用于一对多或多对多的关联限定符用来区分关联“多”端的对象集合,它指明了在关联“多”端的某个特殊对象
目录文件0..*{ordered}有序关联目录文件文件名受限关联114/215聚集聚集(aggregation)是表示整体-部分关系的一种关联聚集中的“部分”对象可以是多个“整体”对象的一部分(共享非独占)
聚集成员**组个人115/215组合组合(composition)是一种更强形式的关联代表整体的组合对象有管理它的部分对象的特有责任,如部分对象的生成和释放组合关联具有强的物主身份,即“整体”对象拥有“部分”对象,“部分”对象生存在“整体”对象中*窗口正文对话框按钮菜单***116/215关联类某些关联关系本身具有复杂的性质,可以独立为一个类关联类往往可以转换为多元关联用户工作站授权
优先级特权开始一个时间片*
授权
*117/215关联类间的导航符号明确的含义隐含的含义未指明双向可导航右边可导航左边未指明只有右边可导航只有右边可导航只有右边可导航右边未指明左边不可导航只有右边可导航双向可导航双向可导航双向不可导航双向不可导航导航可理解为从一个类的对象访问到另一个类的对象118/215关联类间的导航(例)导航*选课*学生课程(a)
*选课*学生课程(c)*选课*学生课程(b)119/215泛化关系泛化表示类间的一般—特殊关系(is-a)一般类定义了它的特殊类的公共属性和操作对一般类扩展一些属性和/或操作后,可以特化(specialize)成特殊类一般类是特殊类的父类,特殊类是一般类的子类特殊类可以继承一般类的属性和操作子类可以定义自己的属性和操作,也可重新定义父类中的操作,但重新定义的操作必须与父类具有相同的型构(signature)120/215
显示计算面积四边形
显示六边形
显示三角形
多边形显示边数顶角座标
长宽矩形计算面积泛化关系例121/215泛化关系例泛化是一种分类学关系,一个一般类可以从不同的维或方面进行特化例如学生可以从性别、学习阶段(研究生、本科生、中学生等)等不同维度进行特化用类元(用作分类符)来表示分类的维度或方面,对应的特殊类组成一个泛化集在泛化集中可对其元素应用约束,在UML中提供以下约束,见下表122/215泛化集的约束符号含义Disjoint(不相交)该类元的多个泛化子类是互斥的,及不存在重叠部分Overlapping(重叠)该类元的多个泛化子类不是互斥的,存在重叠部分Complete(完全的)该类元的多个泛化子类完全覆盖父类(从某个特定的维度上)Incomplete
(不完全的)该类元的多个泛化子类只能部分覆盖父类(从某个特定的维度上)123/215泛化集的约束医生人男人工人女人教师{overlapping,incomplete}{disjoint,complete}:职业:职业:职业:性别:性别泛化集的约束(例)124/215实现关系表示一个模型元素对于一个行为规约(specification)的实现关系例如类对于接口的实现,设计类对于分析类的实现泛化和实现都可以将一般描述与具体描述联系起来,其区别是:泛化是同一语义层(例如都是类)上的元素之间的连接实现是不同语义层中的元素之间的连接,通常建立在不同的模型内,如设计类到分析类的实现关系实现关系125/215实现关系《interface》choiceBlocksetDefault(choice:Choice)getChoice():ChoiceRadioButtonArraysetDefault(choice:Button)getChoice():ButtonPopUpMenusetDefault(choice:String)getChoice():StringButtonChoiceString1..*1..*1..*choicechoicechoice实现关系(例)126/215依赖关系依赖表示两个或多个模型元素之间语义上的依赖关系例如网上书店中的交易通知依赖于邮件发送依赖关系用一个虚线箭头表示,箭头上可附加说明依赖类型的关键字UML2.0中的依赖种类如下:Access(访问),bind(绑定),call(调用),create(创建),derive(派生),instantiate(实例化),permit(允许),realize(实现),refine(精化),send(发送),substitute(替换),trace(追踪依赖),use(使用)127/215SchedulingEngine依赖关系BoxOffice《use》依赖关系(例)128/215约束和派生(constraint&derivation)约束是用自然语言或特定的形式语言正文表示的语义条件或限制约束的形式:{正文字符串}约束可以附加到任何模型元素上,例如泛化的约束有:不相交、交迭、完全的、不完全的129/215***保险公司人公司保险合同{xor}***保险公司人公司保险合同目录文件
0..*{ordered}约束例-1130/215约束例-21..*成员11党派领袖1{subset}政治家党派{self.employer=self.boss.employer}0..1工人*老板0..1公司员工*雇员雇主131/215
Cost-priceSales-price/profitArticle{profit=Sales-price-Cost-price}
Invoice+amount:Real+date:Date=Currentdate+customer:String+specification:String-administrator:String=“unspecified”-maxCount:Integer=0-numberOfInvoices:Integer+status:Status=unpaid{unpaid,paid}约束例-3132/215关联关系也可以被派生或约束1*{person.employer=person.department.employer}*1employeremployerdepartmentworksForDepartment/worksForCompany1*公司部门人约束例-4133/215134/215确定需要建模的类(分析阶段)CRC(类—责任—协作者)方法:使用一组表示类的索引卡片类名(Class)类的责任(Responsibility)类的协作者(Collaborator)类名:
协作者:
责任:
135/215CRC的主要步骤标识潜在的对象类筛选对象类,确定最终对象类标识责任(类的属性和操作)标识协作者复审CRC卡136/215标识潜在的对象类通常陈述中的名词或名词短语是可能的潜在对象,包括外部对象:他们产生或使用软件系统中的数据/信息物理实体:如发票、选课单、报告、打印的信件系统运行过程中的事件:如机器人移动、系统入侵角色:与系统交互的人,如学生、教务员等组织单位或机构:如院系、班级等……137/215筛选对象类的原则该对象的信息对于系统的正常运作是必须的(如选课单)该对象必须拥有一组可标识的操作,它们可以按某种方式修改对象属性的值具有多个相关属性的对象类(过于简单的对象类可以暂时合并到其它类中)该对象具备一些公共的属性和操作出现在问题空间中的真实实体(如发票)138/215对象类的其它属性CRC卡上还可以包含其它属性实在性:切实的存在还是抽象实体包含性:原子的还是包含嵌套对象并发性:拥有独立的线程还是被动接受调用持久性:持久的、临时的(在系统运行期间一直有效)、短暂的完整性:是否强调内部的资源控制,即开放性的程度139/215标识对象类的责任责任:类所了解的信息或能执行的操作信息:通过课程对象是否能直接了解所有选该门课程的学生操作:选课这一操作属于学生类还是属于课程类主要体现为属性和操作类的责任分配是面向对象分析和设计的一个关键问题140/215确定类的属性和操作属性表示类的稳定特征,即为了完成客户规定的目标所必须保存的类的信息操作定义了对象的行为并以某种方式修改对象的属性值操作可以通过对系统的过程叙述的分析提取出来,通常叙述中的动词可作为候选的操作操作大体可分为三类数据处理:增删改、格式化、选择、输入/输出等完成某种计算的操作,如关于选课合法性的检查为控制事件的发生而监控对象的操作141/215标识协作者协作:一个对象为了完成某个责任需要向其它对象发送消息通过类属关系标识协作者具有整体与部分关系的两个类,如窗口的刷新需要窗口内所有的控件刷新一个类必须从另一个类获取信息:学生对象记录选课信息时需要从课程对象读取课程基本信息一个类依赖于另一个类:选课结果通知依赖于邮件类的发送功能142/215CRC卡复审复审由客户和软件分析员参加,方法如下参加复审的人,每人拿CRC卡片的一个子集,有协作关系的卡片要分开将所有用况/场景分类,为每一个用况进行复审复审负责人仔细阅读用况,当读到一个命名的对象时,将令牌传送给持有对应类的卡片的人员大家模拟各个对象类的责任(自己处理、创建协作对象、发送协作消息等),令牌随着模拟过程传递模拟过程中如果发现几个相关的协作类无法很好的完成某个用况的要求则进行修改143/215UML中属性的描述visibilityattribute-nametype
multiplicity=initial-value{property-string}Visibility(可见性):该属性在哪个范围内可见attribute-name:属性名type(类型):属性的类型。multiplicity(重数):该属性可能的值的个数以及它们的排列次序和唯一性initial-value(初值):创建对象时的初值/默认值property-string(特征字符串):用来明确地指明该属性可能的候选值144/215UML中可见性符号种类语义+Public(公共的)任何能看到当前类对象的对象都能看到该属性#Protected(受保护的)这个类或者它的任何子孙类的对象都能看到该属性Private(私有的)只有这个类对象自身能看到该属性Package(包的)在同一个包中的任何类对象能看到该属性145/215属性的重数形式:[minimum..maximum]maximum可以是“*”,表示无限当一个属性有多个值时,可在值的个数后面用{}指明值元素的顺序和唯一性关键字排列次序和唯一性set无序,值元素唯一bag无序,值元素不唯一orderedset有序,值元素唯一list(orsequence)有序,值元素不唯一146/215Invoice+amount:Real+date:Date=Currentdate+customer:String+line:record[1..5]{set}-administrator:String=“unspecified”-numberofinvoices:Integer+status:Status=unpaid{unpaid,paid}147/215类属性类属性表示被这个类所有实例对象共享该属性的值,类属性是这个类的名字空间中的全局变量类属性用下划线来表示maxCount:Integer=0jobID:Integercreate(){jobID=maxCount++}schedule()Job类属性实例属性类操作实例操作148/215UML中操作的描述visibilityoperating-name(parameter-list):return-type{property-string}参数的描述:directionparameter-name:typemultiplicity=default-value关键字语义in传递值的输入参数,该参数的改变对调用者是无效的out输出参数,没有输入值,其最终值对调用者是有效的inout一个可以修改的输入参数,其最终值对调用者是有效的return调用的返回值,该值对调用者是有效的,语义上与out参数没有不同,但在一串表达式中使用时return是有效的149/215FigureSize:SizePos:Position+draw()+resize(percentX:Integer=25,percentY:Integer=25)+returnPos():Position150/215内容摘要面向对象的基本概念面向对象的分析和设计过程UML概述用况建模静态建模动态建模物理体系结构建模151/215UML中的动态建模动态建模用来描述系统的动态行为,显示对象在系统运行期间不同时刻的动态交互UML中用状态机图、活动图和交互图(顺序图、通信图)来建立动态模型152/215状态机图状态机图描述对象所有可能的状态,以及哪些事件将导致状态的改变状态机图描述了对象的动态行为,是一种对象生存周期的模型状态机图建模的步骤列出对象具有的所有状态:状态分为起始状态(1个)、结束状态(0个或多个)和中间状态标识导致状态转换的事件为状态和迁移定义状态变量和动作153/215状态机图的基本符号状态变量:是状态机图所显示的类的属性,也可以是临时变量活动:列出了处于该状态时要执行的事件和动作状态名状态变量活动状态迁移起始状态结束状态状态机图的基本符号一个初始状态0个或多个结束状态(由事件导致的)状态转换与状态转换相关的内部变量进入/退出、或在该状态持续期间的行为154/215Movingupdo/movingtofloorMovingdowndo/movingtofloorIdletimer=0do/increasetimerarrivedarrivedgodown(floor)MovingtoFirstfloorgoup(floor)[timer=time-out]arrivedgoup(floor)Onfirstfloor电梯升降的状态机图155/215状态活动中的标准事件entry事件:进入该状态时的特定动作exit事件:退出该状态时的特定动作do事件:处于该状态中时执行的动作活动区中事件的语法:
event-name(argumentlist)[guard-condition]/activity-expression事件名可以是包括三个标准事件在内的任何事件参数表表示该动作所需的参数警戒条件是布尔表达式,动作表达式将执行的动作156/215login状态loginlogintime=currenttimeentry/type“login”do/getuse_namedo/getpasswordhelp/displayhelpexit/login(use_name,password)entry和exit事件必须执行,不能中断do及其它事件可以被导致当前状态迁移的事件中断157/215状态迁移-1标在迁移箭头上的事件发生了首先执行引起迁移的事件中的动作,然后迁移到新的状态,执行新状态中的内部动作在执行do或用户定义的动作时,可以被导致状态迁移的外部事件中断,但entry动作和exit动作不能被中断,它们总是要执行完例如打印机处于打印状态时可以随时被用户取消(abort事件),但exit动作中所要求的清理作业区的动作一定会执行158/215状态迁移-2状态机图中相应的迁移上未指明事件表示当前状态中的内部动作(包括entry、exit、do以及用户定义的动作)全部执行完后,该状态迁移被自动触发例如打印机处于打印状态时将一直执行打印动作直至当前打印任务完成(除非发生取消事件),然后自动进入空闲状态159/215idleCollectingmoneyCoinsin(amount)/addtobalancetestandcomputeDo:testitemandcomputechangeDo:dispenseitemDo:makechangeSelect(item)[change<0][itemempty]Coinsin(amount)/SetbalanceCancel/refundCoins[change>0][change=0]自动售货机的状态机图160/215状态迁移的语法event-name(parameter-list)[guard-condition]/effect-list事件名、参数表、警戒条件既有事件特征又有警戒条件,则表示仅当这个事件发生并且警戒条件为真时才触发相应的状态迁移只有警戒条件,则表示当该条件变为真时,触发状态迁移effect-list是当该迁移触发时执行的动作表达式表达式中可引用相应对象中的属性、操作,或者事件特征中的参数,动作可以包括调用、发送和其它种类的动作一个状态迁移上可以有多个用′/′符号分隔动作表达式,它们按从左到右的次序依次执行,不允许嵌套或递归161/215[timer=time-out]/godown(firstfloor)Movingupdo/movingtofloorMovingdowndo/movingtofloorIdletimer=0do/increasetimerarrivedarrivedgodown(floor)goup(floor)goup(floor)Onfirstfloor电梯的状态机图162/215状态机图中的事件数字手表类及其状态机图inc/hours:=hours+1Digital_Watchmode_button()inc()do/displayminutesSetminutesdo/displayhoursSethoursdo/displaycurrenttimeDisplaymode_buttonmode_buttoninc/minutes:=minutes+1mode_button状态机图类事件是指已发生并可能引发某种活动的一件事163/215事件类型描述调用事件callevent收到一条被一个对象外部同步调用的请求(同步)改变事件changeevent某些特定值(如监控的环境温度、运行系统环境参数等)的改变,一般与一个布尔表达式相关联信号事件signalevent收到供对象间异步通信用的一个外部的、被命名的信号(异步)时间事件timeevent到达一个绝对时间或经过一段相对的时间量事件的种类164/215状态机图之间发送的消息状态机图之间可通过动作(如在发送子句中指明接收者)或图间的虚线箭头向其他状态机图发送消息当采用虚线箭头时,状态机图必须画在矩形框中从表示源对象的状态机图中的状态迁移上画虚线箭头到表示目标对象的状态机图的边框上在两个状态机图的边框间画虚线箭头,表示源对象在其执行期间的某时刻发送该消息在目标对象的状态机图中应画有一个捕获这个消息的相应的迁移165/215On()Off()RemoteControlPlay()Stop()OffOnOn()Off()Play()Stop()OffOn/StopOn/PlayOff()/Stop()CDPlayerOn()Off()Stop()Play()状态机图之间的消息发送166/215组合状态组合状态被分解成区域,每个区域中包含一或多个直接子状态正交状态(并发):当该状态活跃时,多个区域中的子状态可能同时处于活跃状态非正交状态(非并发):当该状态活跃时,在同一时刻只有一个子状态是活跃的SS167/215非正交状态例如,汽车中的变速器有中间状态、前进状态和倒退状态,前进状态又有三个排挡子状态:第一、第二、第三,在任一时刻,这三个子状态同时只有一个是活跃的,所以前进状态是“非正交”组合状态ForwardStopdownshiftupshiftdownshiftupshiftFirstSecondThirdpushNpushRpushNpushFNeutralReverseTransmission168/215正交状态三局二胜比赛的正交状态PlayingrubberAVulnerabilityAwinAwinAwinsrubberNotvulnerablevulnerableBVulnerabilityBwinBwinBwinsrubberNotvulnerablevulnerable169/215如果某些对象是另一些对象的聚集对象,则这些代表“部分”对象的状态图通常是并发的,它们都是聚集对象的并发子状态。例如“汽车”对象是“点火”、“变速器”、“刹车”、“油门”等对象的聚集对象。transmissionignitionacceleratorcarbrake170/215Carturnkeytostart[Transmission
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度河北省护师类之护士资格证综合练习试卷A卷附答案
- 2025江苏扬州工业职业技术学院博士专项招聘16人笔试备考题库及参考答案详解1套
- 2024年河北邯郸成安县事业单位招聘工作人员255名笔试备考试题及一套完整答案详解
- 2025河北邯郸市肥乡区选聘农村党务(村务)工作者100人笔试参考题库及1套参考答案详解
- 2025年东营市公务员考试行测真题及完整答案详解一套
- 2024-2025年人教部编本语文四年级下册第三次月考测试题附答案(共2套)
- 九师联盟2024-2025学年高二下学期6月摸底联考语文试题(含答案)
- 振动监测与BIM技术的结合应用
- 美丽的国潮春节故事
- 护理实践中的危机应对
- 中医技术操作考核评分表
- MOOC 企业文化与商业伦理-东北大学 中国大学慕课答案
- 大脑语言功能区
- 《小学数学分层教学的实践与研究》中期报告
- 感染性疾病科岗前培训
- 污水处理厂人工智能与机器学习应用
- 教科版科学四年级下册全册单元复习教案
- 江苏省2023年小升初语文试卷及答案汇总九
- 等高线地形图试题附答案解析
- 淘汰落后电机总结汇报
- 《空腔脏器穿孔》课件
评论
0/150
提交评论