页数:215页文件大小:1.60 MB来源: 软件工程ppt课件
本课件讲解面向对象方法的核心概念与开发过程,先说明对象、类、继承、消息通信等基本概念,再系统介绍统一建模语言UML,随后依次展开用况建模、静态建模(类图与对象图)、动态建模(顺序图、协作图、状态图)以及物理体系结构建模。
软件工程第7章面向对象的分析和设计
内容摘要
内容摘要
PeterCoad和EdwardYourdon提出用下列等式识认面向对象方法:面向对象=对象(object)+分类(classification)+继承(inheritance)+通过消息的通信(communicationwithmessages)可以说,采用这四个概念开发的软件系统是面向对象的
面向对象方法的出现很快受到计算机软件界的青睐,并成为20世纪90年代的主流开发方法。我们可以从下列几个方面来分析其原因:1.从认知学的角度来看,面向对象方法符合人们对客观世界的认识规律。2.面向对象方法开发的软件系统易于维护,其体系结构易于理解、扩充和修改。3.面向对象方法中的继承机制有力支持软件的复用。
面向对象的基本概念1.对象(object)对象是指一组属性以及这组属性上的专用操作的封装体。属性(attribute)通常是一些数据,有时它也可以是另一个对象。每个对象都有它自己的属性值,表示该对象的状态。对象中的属性只能通过该对象所提供的操作来存取或修改。操作(operation)(也称方法或服务)规定了对象的行为,表示对象所能提供的服务。
封装(encapsulation)是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。封装的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。一个对象通常可由对象名、属性和操作三部分组成。
.类(class)类是一组具有相同属性和相同操作的对象的集合。一个类中的每个对象都是这个类的一个实例(instance)。类是创建对象的模板,从同一个类实例化的每个对象都具有相同的结构和行为。
轿车型号:字符串颜色:字符串牌照号:字符串....张经理的轿车型号=桑塔纳颜色=红色牌照号=沪AN2037....类实例对象
.继承(inheritance)继承是类间的基本关系,它是基于层次关系的不同类共享数据和操作的一种机制。父类中定义了其所有子类的公共属性和操作,在子类中除了定义自己特有的属性和操作外,可以继承其父类(或祖先类)的属性和操作,还可以对父类(或祖先类)中的操作重新定义其实现方法。
矩形长宽对角线计算面积计算对角线多边形顶点数顶点坐标计算面积旋转
有时,我们定义一个类,它把一些类组织起来,提供一些公共的行为,但并不需要使用这个类的实例,而仅使用其子类的实例。我们把这种没有实例的类称为抽象类(abstractclass)。在抽象类中可以定义抽象操作,抽象操作指:只定义这个类的操作接口,不定义它的实现,其实现部分由其子类定义。抽象操作操作名用斜体字表示,也可以在操作特征(signature)后面加上特征字符串{abstract}。
交通工具飞行器汽车船轿车货车一般-特殊关系
如果一个子类只有唯一一个父类,这个继承称为单一继承。如果一个子类有一个以上的父类,这种继承称为多重继承。水上交通工具陆上交通工具水陆两栖交通工具多重继承
.消息(message)消息传递是对象间通信的手段,一个对象通过向另一个对象发送消息来请求其服务。一个消息通常包括接收对象名、调用的操作名和适当的参数(如果有必要的话)。消息只告诉接收对象需要完成什么操作,但并不指示接收者怎样完成操作。消息完全由接收者解释,接收者独立决定采用什么方法完成所需的操作。
.多态性(polymorphism)多态性是指同一个操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。例如“画”操作,作用在“矩形”对象上,则在屏幕上画一个矩形,作用在“圆”对象上,则在屏幕上画一个圆。也就是说,相同操作的消息发送给不同的对象时,每个对象将根据自己所属类中定义的这个操作去执行,从而产生不同的结果。
.动态绑定(dynamic binding)动态绑定是指在程序运行时才将消息所请求的操作与实现该操作的方法连接起来。传统的程序设计语言的过程调用与目标代码的连接(即调用哪个过程)放在程序运行前(即编译链接时)进行(称为静态绑定),而动态绑定则是把这种连接推迟到运行时才进行。动态绑定是一种在运行时确定被执行代码的技术。
在一般与特殊关系中,子类是父类的一个特例,所以父类对象可以出现的地方,也允许其子类对象出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。
if条件then p := t ;else p := r ;area := p.getarea ;getArea {abstract}polygonareahexagongetArearectanglegetArealengthwidthtrianglegetAreaVar p : polygon ;Var t : triangle :=triangle.new ;Var r : rectangle :=rectangle.new ;
内容摘要
面向对象分析Object-Oriented Analysis1.获取客户对系统的需求:包括标识场景和用况,以及建造需求模型2.用基本的需求为指南,来确定类和对象(包括属性和操作)3.定义类的结构和层次(继承关系)4.建造对象—关系模型5.建造对象—行为模型6.利用用况/场景来复审分析模型
.获取客户对系统的需求需求获取必须让客户与开发者充分地交流,这里介绍一种采用用况来收集客户需求的技术。分析员首先标识使用该系统的不同的执行者(actor),这些执行者代表使用该系统的不同的角色。每个执行者可以叙述他如何使用系统,或者说他需要系统提供什么功能。执行者提出的每一个使用场景(或功能)都是系统的一个用况的实例,一个用况描述了系统的一种用法(或一个功能),所有执行者提出的所有用况构成系统的完整的需求。分析过程
注意,执行者与用户是不同的两个概念,一个用户可以扮演几个角色(执行者),一个执行者可以是用户,也可以是其他系统(应用程序或设备)。得到的用况必须进行复审,以使需求完整。
.标识类和对象类和对象来自问题领域可以先标识候选类,然后进行筛选
.定义类的结构和层次类的结构主要有两种:一般—特殊(generalization—specialization)结构和整体—部分(whole—part)结构。一般—特殊结构是一种分类结构,反映了类间的一般与特殊的关系。一般类与特殊类之间是一种“isa”的关系,如:汽车是一种交通工具。同样,特殊类还可以分为更特殊的类,这样可形成类的层次结构。整体—部分结构反映了类间的整体与部分关系。值得注意的是,整体—部分关系是对对象而言的,而不是对类的。整体—部分关系是一种“hasa”的关系,如“汽车”有“发动机”。同样,整体—部分结构也具有层次结构。
.建造对象——关系模型对象--关系模型描述了系统的静态结构,它指出了类间的关系(relationship)类之间的关系有关联、依赖、泛化、实现等
.建立对象——行为模型对象--行为模型描述了系统的动态行为,它们指明系统如何响应外部的事件或激励(stimulus)。建模的步骤如下:
面向对象设计(Object_Oriented Design)面向对象设计的一般步骤如下:1.系统设计
.对象设计
.系统设计1)将分析模型划分成子系统在OO系统设计中,我们把分析模型中紧密相关的类、关系等设计元素包装成子系统。通常,子系统的所有元素共享某些公共的性质,它们可能都涉及完成相同的功能;它们可能驻留在相同的产品硬件中;或者它们可能管理相同的类和资源。子系统由它们的责任所刻画,即,一个子系统可以通过它提供的服务来标识。在OOD中,这种服务是完成特定功能的一组操作。
子系统的设计准则是:(1)子系统应具有定义良好的接口,通过接口和系统的其它部分通信;(2)除了少数的“通信类”外,子系统中的类应只和该子系统中的其它类协作;(3)子系统的数量不宜太多;(4)可以在子系统内部再次划分,以降低复杂性。
)标识问题本身的并发性,并为子系统分配处理器通过对对象--行为模型的分析,可发现系统的并发性。如果对象(或子系统)不是同时活动的,则它们不需并发处理,此时这些对象(或子系统)可以在同一个处理器上实现。反之,如果对象(或子系统)必须对一些事件同时异步地动作,则它们被视为并发的,此时,可以将并发的子系统分别分配到不同的处理器,或者分配在同一个处理器,而由操作系统提供并发支持。
)任务管理设计Coad和Yourdon提出如下管理并发任务对象的设计策略:(1)确定任务的类型;(2)必要时,定义协调者任务和关联的对象;(3)将协调者任务和其它任务集成。通常可通过了解任务是如何被启动的来确定任务的类型,如事件驱动任务,时钟驱动任务。每个任务应该定义其优先级,并识别关键任务。当有多个任务时还可以考虑增加一个协调者任务,以控制这些任务协同工作
)数据管理设计通常数据管理设计成层次模式,其目的是将数据的物理存储及操纵与系统的业务逻辑加以分离。数据管理的设计包括设计系统中各种数据对象的存储方式(如内部数据结构、文件、数据库),以及设计相应的服务,即为要储存的对象增加所需的属性和操作。
)资源管理设计OO系统可利用一系列不同的资源(如磁盘驱动器、处理器、通信线路等外部实体或数据库、对象等抽象资源),很多情况下,子系统同时竞争这些资源,因此要设计一套控制机制和安全机制,以控制对资源的访问,避免对资源使用的冲突。6)人机界面设计对大多数应用系统而言,人机界面本身是一个非常重要的子系统。人机界面主要强调人如何命令系统,以及系统如何向人提交信息。它包括窗口、菜单、报告的设计。
)子系统间的通信子系统之间可以通过建立客户/服务器连接进行通信,也可以通过端对端(peertopeer)连接进行通信。我们必须确定子系统间通信的合约(contract),合约提供了一个子系统和另一个子系统交互的方式。
.对象设计对象设计是为每个类的属性和操作作出详细的设计,并设计连接类与它的协作者之间的消息规约。对象描述1)协议描述(外部的黑盒描述):描述对象的接口,即定义对象可以接收的消息以及当对象接收到消息后完成的相关操作;2)实现描述(内部描述):描述传送给对象的消息所蕴含的每个操作的实现细节,实现细节包括有关对象私有部分的信息,即关于描述对象属性的数据结构的内部细节和描述操作的过程细节。对象的使用者只需要关心协议描述
)设计算法和数据结构为对象中的属性和操作设计数据结构和实现算法。3.设计模式(designpatterns)在许多面向对象系统中,存在一些类和通信对象的重复出现的模式。这些模式求解特定的设计问题,使面向对象设计更灵活,并最终可复用。这些模式帮助设计者复用以前成功的设计,设计者可以把这些模式应用到新的设计中。
一个设计模式通常可用四个信息来描述:1)模式名设计模式名应具有实际的含义,它能反映模式的适用性和意图。2)使模式可被应用所必须存在的环境和条件。3)设计模式的特征模式特征指出一些设计的属性,调整这些属性使该模式能适应各种不同的问题。这些属性表示设计的特征,这些特征能被用于检索(通过数据库)以找到合适的模式。4)应用设计模式的结果(consequences)对于一个设计模式的使用结果表明设计决策的走向。
CategoryClass-&-ObjectStructure1+1+AttributeMethodObject model由五个层次组成,相当于把五张透明胶片叠在一起,每一层显示更多的细节。面向对象设计基本过程
内容摘要
统一建模语言UMLUnified Modeling Language
UML概述
UML概述1997年11月,OMG(Object ManagementGroup)批准把UML1.1作为基于面向对象技术的标准建模语言之后,UML进行了持续的修订和改进,先后产生了UML1.2、1.3、1.4、1.5版本2004年推出了UML2.0,UML2.0对UML1.x作了重大的修改
UML模型元素(V1.3)模型中的实体以及实体间相互连接的关系泛化对象属性操作状态用例结点接口包依赖关联聚集模型元素类属性操作构件注解
UML模型元素(V2.0)模型中的实体以及实体间相互连接的关系部分模型元素注解类属性操作对象:类属性操作状态用况结点供应接口包依赖关联泛化主动类属性操作请求接口构件实现
UML2.0的13种图-1
UML2.0的13种图-2
UML图1-用况图描述参与者与用况(参与者使用系统以实现某一特定目标的情形)之间的关联关系,以及用况之间的扩展、继承等关系银行储蓄帐户管理系统《包含》《包含》《包含》银行职员(用户代理)帐户管理银行间转帐开户取款银行内转帐注销存款校验密码转帐报表生成其它银行帐户管理系统客户系统管理员银行职员(管理人员)
UML图2-类图展现一组类、接口以及它们相互之间的关系2条或2条以上的线交于0个或1个点lineX1:realY1:realX2:realY2:realpointX: realY: real相交2..*0..1
UML图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。5
UML图4-构件图描述构件、接口以及构件间的组装关系的静态视图,复合构件本身可以由内部的子构件图描述应用收费管理信用卡代理构件的内部结构图信用卡代理状况购买预购销售团体销售:售票员:营业员界面:销售亭界面:管理员界面:票:信用卡收费个体销售收费顾客访问营业员访问
UML图5-组合结构图UML2.0新增的图,展示了类或协作的内部结构,与构件差别不大,经常认为与构件图等同
UML图6-顺序图描述特定场景下交互各方消息发送和接收的顺序呼叫方电话线应叫方
UML图7-通信图另一种交互图,强调交互上下文:参与交互的对象或角色的结构组织控制电梯运行的通信图2:nextjob=GetJob():Elevator:Queue:Order{new}{local}nextjob:Elevator control:ButtonPush(){parameter}job1.2:Create( )1.1 *[all queues]: len:=Length( ){broadcast}1.3:Invoke(job)1:GetElevator(floorid)job
UML图8-状态机图以状态机的形式描述目标对象在各种事件作用下的行为电梯升降的状态机图Moving updo/moving to floorMoving downdo/moving to floorIdletimer=0do/increase timerarrivedarrivedgo down (floor)Moving toFirst floorgo up(floor)[timer=time-out]arrivedgo up(floor)Onfirst floor
UML图9-活动图描述一系列活动之间的控制流和数据流[未付款][已付款]*[对每一订单项][有货][缺货]取消并退回订单收到订单付款认可检查订单项制作并发放提货单更新库存制作并发放缺货单制作并发放采购单
UML图10-部署图描述系统运行时各相关处理单元结点、各结点上部署的构件、以及相互间的通信协议《DecNet》《TCP/IP》《TCP/IP》ClientA:Compaq Pro PCApplicationServer;Silicon GraphicsO2DatabaseServer:VAXClientB:Compaq Pro PC
UML图10-部署图变体:制品图部署图的变体:描述系统实现制品的物理结构,制品包括文件、数据库等这两个物理文件“承载了”逻辑类HelloWorld的实现
UML图11-包图描述包(一种模型分解单位)以及包之间的关系售票处计划广告进度表客户记录票记录运作售票工资单计算购买
UML图12-时间图UML2.0新增的图,描述对象间的交互,但关注于关于时间的推理,而不仅仅是相对顺序添水加热
UML图13-交互概览图UML2.0新增的图可认为是:活动图+顺序图的混合体使用活动图的表示法,其中的节点或者是一个交互或者是一个交互引用
UML2.0的视图和图UML图(动态方面)UML图(静态方面)视图(view)交互图状态机图活动图用况图用况视图同上类图对象图设计视图与设计视图相同,更强调消息交互方面交互视图同上构件图实现视图同上部署图部署视图需求设计实现部署
UML视图1-用况视图
UML视图2-设计视图
UML视图3-交互视图
UML视图4-实现视图
UML视图5-部署视图
内容摘要
用况建模
用况图
用况之间的关系-1记号说明关系参与者与所参与的一个用况之间的通信路径关联扩展的用况到基本用况的一种关系:扩展用况可以访问基本用况的所有属性,并在基本用况基础上增加新的行为扩展《extend》
用况之间的关系-2记号说明关系被包含用况是基本用况的一部分,基本用况能看到被包含用况并依赖于它的的执行结果,但二者不能相互访问其它属性包含一个一般用况与一个更特殊的用况之间的关系,特殊用况可继承一般用况的特征泛化《include》
电话订购系统用况图客户售票员送货员主管建立信用供应订单订单支付提供客户数据产生订单信用卡支付现金支付设置订单请求目录电话订购《include》《include》《include》《extend》核对身份关联扩展包含泛化
银行储蓄帐户管理系统《include》《include》《include》银行职员(用户代理)帐户管理银行间转帐开户取款银行内转帐注销存款校验密码转帐报表生成其它银行帐户管理系统客户系统管理员银行职员(管理人员)包含泛化
参与者之间的泛化关系
用况图对于各方的作用
用况建模步骤
用况建模—定义系统范围/边界
用况建模—确定参与者
确定参与者的启发式问题
用况建模—确定用况
用况(Use Case)
场景(Scenario)
确定用况的启发式问题
用况建模—描述用况
用况的简要文字描述
用况的详细描述
用况的详细描述结构注释用例的组成部分以动词开始用例名称要设计的系统范围“用户目标”(基本流程)或“子功能”级别调用系统以提供服务的参与者主要参与者关注该用例的人,以及他们各自的需要涉众及其关注点用例启动前必须成立的条件前置条件用例结束后必须成立的条件后置条件典型的、理想的成功场景主成功场景其它可能的场景(成功或失败)替换场景相关的非功能需求特殊需求不同的I/O方法及数据格式技术和数据变元表当前用例的发生频率,可能影响调查、测试和实现的时间安排发生频率仍待解决或确认的问题其它问题
POS系统收银用况详细说明-1范围:下一代POS系统级别:用户目标主要参与者:收银员涉众及其关注点:收银员:准确、快速地完成收银操作…顾客:快速完成付款并获得购物凭证以方便退货………前置条件:收银员经过认证、顾客是超市会员后置条件:正确更新库存、正确计算税金……
POS系统收银用况详细说明-2主成功场景:1.顾客携带商品到收银台付款2.收银员启动一次销售过程……n.顾客付款系统打印票据完成整个销售过程替换场景:a.……顾客信用卡额度不足要求退货……b.……顾客信用卡额度不足要求退货…………特殊需求:1.90%情况下信用卡刷卡响应时间小于30秒2.顾客能在1米范围内清楚看到单价和累计金额显示……
POS系统收银用况详细说明-3技术与数据变元:1.商品ID获取可以通过扫描和键盘输入两种方式2.商品ID支持中国、欧洲及日本三种编码标准……发生频率:可能在16小时内不间断发生其它问题:1.收银员下班后是否需要清理现金并进行结帐处理2.该超市是否可能在未来实行24小时营业……
确定用况之间的关系
实例本实例实现一个简化了的银行储蓄账户管理系统,该系统是在银行的柜台上对客户办理活期储蓄业务。系统的需求陈述如下:一个客户可以在多个银行中开设账户,一个客户也可在同一银行中开设多个不同的账户。客户可以通过银行职员进行开户、存款、取款、转账、注销账户等活动。其中转账指客户将自己的某个账户上的钱款转入同一银行的不同账户(称为银行内转账)或转入不同银行的账户(称为银行间转账)。系统管理员负责系统的账户管理及业务报表的生成。
识别执行者客户:到银行办理储蓄业务的人,负责输入密码银行职员(客户代理):银行工作人员,代表客户进行储蓄业务的操作银行职员(管理人员):银行工作人员,根据客户的储蓄业务更新账户管理员:银行计算机的管理人员,负责账户的管理和业务报表的生成
识别用况从系统的需求陈述可知,银行职员(客户代理)需要系统提供开户、存款、取款、转账、注销账户等功能,这些功能都包含了校验密码的功能。系统管理员需要系统提供账户管理和报表生成功能。银行职员(管理人员)则参与了账户管理中的更新账户的功能。此外,转账功能可分为银行内转账和银行间转账,我们可将它们设计成三个用况,其中银行内转账用况和银行间转账用况都继承了基本转账用况。据此分析,得到该系统的用况图如下图所示。
银行储蓄账户管理系统《包含》《包含》《包含》银行职员(用户代理)账户管理银行间转账开户取款银行内转账注销存款校验密码转账报表生成其它银行账户管理系统客户系统管理员银行职员(管理人员)
开户用况描述用况名称:开户参与的执行者:银行职员(客户代理),客户前置条件:一个合法的银行职员(客户代理)已登录到该系统事件流:1.当选择开户功能时用况开始2.输入客户信息(姓名、地址、身份证号等)3.从账户管理系统获取新的账号4.请客户输入密码5.请客户再次输入密码6.如果两次密码不一致则回到第4步,否则继续7.在账户库中添加新账户8.打印存折,用况结束后置条件:在账户库中增加了一个新账户,得到一张新存折
取款用况描述用况名称:取款参与的执行者:银行职员(客户代理)前置条件:一个合法的银行职员(客户代理)已登录到该系统事件流:基本路径:1.当选择取款功能时用况开始2.当输入客户信息(姓名、账号等)后a)如果客户信息与账户不一致,显示错误信息,可以重新输入或结束用况b)如果该账户被冻结(如因挂失而冻结),显示冻结信息并结束用况3.输入并校验密码
.输入取款金额,如果该账户的余款小于取款金额,显示错误信息,要求重新输入5.打印取款单,交客户签字6.建立取款事件记录,更新账户信息7.打印存折,用况结束可选路径:1.在第5步客户签字之前的任何时刻,客户可以取消本次取款,用况结束2.第3步校验密码时,如发现密码不一致,则重新输入密码,或用况结束后置条件:如果取款成功,客户账户中的余额被更新(减少),否则余额不变。
取款用况的活动图描述[客户不确认][客户确认][余额≥取款额][未冻结][不一致][一致][选择重新输入][选择结束][冻结][余额<取款额]●··●··打印取款单输入客户信息显示错误信息建立取款记录更新账户信息打印存折显示错误信息输入取款金额输入并校验密码显示冻结信息●··
内容摘要
类图和对象图
类图和对象图的基本元素对象名:类名属性名=值操作类名属性名:类型操作聚集组合关联泛化依赖实现
类图和对象图(例)实例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类图对象图
类图中类之间的关系符号含义关系两个元素之间的关联关系关联两个元素之间的依赖关系依赖一般与特殊关系泛化整体与部分之间的关联关系聚集更强的一种整体与部分间的拥有关系,整体负责部分的创建和删除组合规约(specification)与它的实现之间的关系实现
关联关系
二元关联二元关联表示为在两个类之间用一条直线连接,直线上可写上关联名有首都国家城市工作于公司员工雇佣关联通常是双向的
关联的重数限制和角色驾驶人轿车驾驶员公车工作于公司员工雇佣*1工作于公司员工雇佣**关联的两端还可加上角色名(role)
与自身的关联*雇佣*工作于工人1..*老板0..1管理公司员工雇佣关联的链公司A张三公司B李四公司A王五公司C张三链是关联的实例
自身关联中的角色一个类的对象在不同的关联中扮演不同的角色保险公司人保险合同保险单0..11表示为表达0..*1有涉及婚姻丈夫妻子0..*1..*涉及有保险客户
多元关联(例)项目程序语言程序员
多元关联的对象图(例)CAD程序:项目C :语言记账系统:项目COBOL :语言张三:开发人员三重关联对象图
受限关联
聚集
组合
关联类
关联类间的导航隐含的含义明确的含义符号双向可导航未指明只有右边可导航右边可导航左边未指明只有右边可导航只有右边可导航只有右边可导航右边未指明左边不可导航双向可导航双向可导航双向不可导航双向不可导航导航可理解为从一个类的对象访问到另一个类的对象
关联类间的导航(例)导航*选课*学生课程(a)*选课*学生课程(c)*选课*学生课程(b)
泛化关系
显示计算面积四边形显示六边形显示三角形多边形显示边数顶角座标长宽矩形计算面积泛化关系例
泛化关系例
泛化集的约束含义符号该类元的多个泛化子类是互斥的,及不存在重叠部分Disjoint(不相交)该类元的多个泛化子类不是互斥的,存在重叠部分Overlapping(重叠)该类元的多个泛化子类完全覆盖父类(从某个特定的维度上)Complete(完全的)该类元的多个泛化子类只能部分覆盖父类(从某个特定的维度上)Incomplete(不完全的)
泛化集的约束医生人男人工人女人教师{overlapping,incomplete}{disjoint,complete}:职业:职业:职业:性别:性别泛化集的约束(例)
实现关系《interface》choiceBlocksetDefault(choice:Choice)getChoice():ChoiceRadioButtonArraysetDefault(choice:Button)getChoice():ButtonPopUpMenusetDefault(choice:String)getChoice():StringButtonChoiceString1..*1..*1..*choicechoicechoice实现关系(例)
依赖关系
Scheduling Engine依赖关系Box Office《use》依赖关系(例)
约束和派生(constraint & derivation)
***保险公司人公司保险合同{xor}***保险公司人公司保险合同目录文件0..*{ordered}约束例-1
约束例-21..*成员11党派领袖1{subset}政治家党派{self.employer=self.boss.employer}0..1工人*老板0..1公司员工*雇员雇主
Cost-priceSales-price/profitArticle{profit = Sales-price-Cost-price }Invoice+ amount : Real+ date : Date = Current date+ customer : String+ specification : String-administrator : String=“unspecified”-maxCount : Integer=0-numberOfInvoices : Integer+ status : Status = unpaid{unpaid, paid}约束例-3
关联关系也可以被派生或约束1 *{ person.employer=person.department.employer }*1employeremployerdepartmentworksForDepartment/worksForCompany1*公司部门人约束例-4
确定需要建模的类(分析阶段)
CRC的主要步骤
标识潜在的对象类
筛选对象类的原则
对象类的其它属性
标识对象类的责任
确定类的属性和操作
标识协作者
CRC卡复审
UML中属性的描述
UML中可见性语义种类符号任何能看到当前类对象的对象都能看到该属性Public(公共的)+这个类或者它的任何子孙类的对象都能看到该属性Protected(受保护的)#只有这个类对象自身能看到该属性Private(私有的)在同一个包中的任何类对象能看到该属性Package(包的)
属性的重数
Invoice+amount:Real+date:Date=Currentdate+customer:String+line:record[1..5]{set}-administrator:String=“unspecified”-numberofinvoices:Integer+status:Status=unpaid{unpaid,paid}
类属性
UML中操作的描述
FigureSize:SizePos:Position+draw()+ resize( percentX : Integer=25 , percentY : Integer = 25 )+returnPos():Position
内容摘要
UML中的动态建模
状态机图
状态机图的基本符号状态变量:是状态机图所显示的类的属性,也可以是临时变量活动:列出了处于该状态时要执行的事件和动作状态名状态变量活动状态迁移起始状态结束状态状态机图的基本符号一个初始状态0个或多个结束状态(由事件导致的)状态转换与状态转换相关的内部变量进入/退出、或在该状态持续期间的行为
Moving updo/moving to floorMoving downdo/moving to floorIdletimer=0do/increase timerarrivedarrivedgo down (floor)Moving toFirst floorgo up(floor)[timer=time-out]arrivedgo up(floor)Onfirst floor电梯升降的状态机图
状态活动中的标准事件
login状态loginlogin time=current timeentry/type “login”do/get use_namedo/get passwordhelp/display helpexit/login(use_name,password)entry和exit事件必须执行,不能中断do及其它事件可以被导致当前状态迁移的事件中断
状态迁移-1
状态迁移-2
idleCollecting moneyCoins in(amount)/add to balancetest and computeDo:test item andcompute changeDo:dispense itemDo:make changeSelect(item)[change< 0][item empty]Coins in(amount)/Set balanceCancel/refund Coins[change> 0][change= 0]自动售货机的状态机图
状态迁移的语法
[timer=time-out]/go down (first floor)Moving updo/moving to floorMoving downdo/moving to floorIdletimer=0do/increase timerarrivedarrivedgo down (floor)go up(floor)go up(floor)Onfirst floor电梯的状态机图
状态机图中的事件数字手表类及其状态机图inc/hours := hours + 1Digital_Watchmode_button()inc()do/displayminutesSet minutesdo/display hoursSet hoursdo/displaycurrent timeDisplaymode_buttonmode_buttoninc/minutes := minutes + 1mode_button状态机图类事件是指已发生并可能引发某种活动的一件事
描述事件类型收到一条被一个对象外部同步调用的请求(同步)调用事件call event某些特定值(如监控的环境温度、运行系统环境参数等)的改变,一般与一个布尔表达式相关联改变事件change event收到供对象间异步通信用的一个外部的、被命名的信号(异步)信号事件signal event到达一个绝对时间或经过一段相对的时间量时间事件time event事件的种类
状态机图之间发送的消息
On()Off()Remote ControlPlay()Stop()OffOnOn()Off()Play()Stop()OffOn/StopOn/PlayOff()/Stop()CD PlayerOn()Off ()Stop()Play()状态机图之间的消息发送
组合状态
非正交状态例如,汽车中的变速器有中间状态、前进状态和倒退状态,前进状态又有三个排挡子状态:第一、第二、第三,在任一时刻,这三个子状态同时只有一个是活跃的,所以前进状态是“非正交”组合状态ForwardStopdownshiftup shiftdownshiftup shiftFirstSecondThirdpush Npush RpushNpushFNeutralReverseTransmission
正交状态三局二胜比赛的正交状态Playing rubberA VulnerabilityA winA winA winsrubberNotvulnerablevulnerableB VulnerabilityB winB winB winsrubberNotvulnerablevulnerable
如果某些对象是另一些对象的聚集对象,则这些代表“部分”对象的状态图通常是并发的,它们都是聚集对象的并发子状态。例如“汽车”对象是“点火”、“变速器”、“刹车”、“油门”等对象的聚集对象。transmissionignitionacceleratorcarbrake
Carturn key tostart[Transmissionin Neutral]release keyturn key offOffStartingOnIgnitionAcceleratordepressacceleratorReleaseacceleratoronoffBrakedepress brakerelease brakeonoffTransmissionForwardStopdownshiftup shiftdownshiftup shiftFirstSecondThirdpush Npush RpushNpushFNeutralReverse[汽车]---正交状态
复杂迁移
cash takenandcard takenreadySetting upReady toresetEmittingdo:dispense cashdo:eject card自动提款机吐钞复杂迁移例
历史指示器
Restart()^Self.Restart()Create()[alternative=stop][alternative=stop][alternative =try again]Out of memory ( )[alternative=continue]Disk Error ( )HDisk errorentry / fix diskdo / show question dialogdo/Ask alternativeMemory lowentry / show question dialogdo / ask alternativeOS runningRestart OSstart install shieldInstallentry/askinstallingquestionsdo/install softwareInstall software软件安装过程历史指示器例
活动图
^Printer.Print( file )[free disk space][disk full]CustomerWindow.printAllCustomers( )ShowMessageBox“Disk full” onscreenShowMessageBox“Printing” onscreenCreate postscriptfileRemoveMessageBox打印窗口所有客户信息活动图
活动图中的泳道
活动图中的并行迁移
活动图中的对象
DisplayerSamplerUpdatingdisplayerInitiateSampler.Run(channel,frequency)MeasuringMeasuredvalue采样器和显示器活动图
活动图用于描述用况[未付款][已付款]*[对每一订单项][有货][缺货]取消并退回订单收到订单付款认可检查订单项制作并发放提货单更新库存制作并发放缺货单制作并发放采购单
顺序图
呼叫方拿起受话器拨号音开始拨数字(2)拨号音结束拨数字(2)拨数字(8)拨数字(2)拨数字(1)铃声电话振铃应叫方摘机铃声消失停止振铃电话接通电话接通呼叫方挂机电话被切断电话被切断应叫方挂机呼叫方电话线应叫方
顺序图中的生存线和激活框
生存线激活框public class A{private B myB=new B( );public void doOne( ){myB.doTwo( );myB.doThree( );}}顺序图中的生存线(例)
顺序图中的条件和分支消息上可附加条件,当条件为真时消息才被发送或接收。条件可用于描述分支,当几个消息箭头上的条件互斥时,表示某一时刻只有一个消息被发送。如果条件不是互斥的,则消息会并行地发出。print (file)[ printer free]print(file)[printer busy]Store ( file )Print (file):Computer:Printer Server:Printer:Queue
顺序图中的循环和约束Print (ps-file):Computer:Printer Server:Printera{b-a<5 sec}b{b'-b<1 sec}b'Print(ps-file)Print (ps-file)
顺序图中的递归op3 ( )op2 ( )send message op2until…C1 : CD1 : DD2 : Dop1 ( )op4 ( )
顺序图中的创建和消亡一个对象可以通过一条消息创建另一个对象。当需要显式地表示对象的销毁(没有垃圾自动回收机制或特别指明不再使用)时,在图中用一个×符号表示。创建或消亡一个对象的消息通常是同步消息。
顺序图的结构化控制结构
refdebit(cost)reserve (date,count)reject [unavailable]loopget existing customer status[get nex item]altcreata():order:AccountSd process Order:Ticket DBadd(seats) [available]╳引用循环选择(嵌套)
通信图
:nextjob=GetJob():Elevator:Queue:Order{new}{local}nextjob:Elevator control:ButtonPush(){parameter}job1.2:Create( )1.1 *[all queues]: len:=Length( ){broadcast}1.3:Invoke(job)1:GetElevator(floorid)job链:连接两个对象的交互路径消息传递的方向消息及消息顺序编号不带顺序编号的起始消息同步调用中的嵌套消息电梯运行过程的通信图
链是类关联的实例,是连接两个对象的路径,指明了对象间某种可能的导航和可见性。通信图中的消息在链上流转,多个消息可以共享一条单链。链角色上可以附加相应的约束,包括:global(全局)表示该角色是全局的;local(局部)表示该角色是一个操作中的局部变量;parameter(参数)表示该角色是一个操作中的参数;self(自身)指出对象可以向自身发送消息。通信图的链
发给类对象的消息(可将其视为元类的实例):一般是对该类静态方法的调用该表达法同样适用于顺序图发送给类对象的消息
同步消息异步消息主动对象通信图中的同步/异步消息
: printerserver: computer: printer[printer free]1.1: print(ps-file)print(ps-file)1:print(ps-file)带条件的消息
a和1b表示互斥的条件路径1a路径下的嵌套消息1b路径下的嵌套消息msg2或msg4后的无条件消息带互斥条件的通信图
用消息标号后的*表示迭代后面可跟可选的迭代子句精确的集合迭代简略的集合迭代通信图中的循环和迭代
在通信图的对象框中,可用{new}或{destroyed}表示该对象在协作期间被创建或消亡。{transient}则表示对象在同一个协作期间被创建并消亡。3: Show(Customer)NewCustomer()[free memory]1:Create(){parameter}:MainWindow:Customer{new}2:Create()3.1:Update(data):CustomerWindow{transient}通信图中对象的生存期
语义等价:可以被相互转换但一些细微信息有所不同:1.通信图可以显示对象之间的链接关系2.顺序图中可以显示消息的返回劣势优势类型强调在右侧增加新对象,水平方向较为拥挤(图形布局方面)能够清晰地表示消息的时序关系在UML规范中得到了更多的关注,因此具有更加丰富的表示法选项以及更好的工具支持顺序图(更多使用)消息的时序关系不易查阅表示法选项少空间效果好,可以在二维空间上增加新对象(图形布局方面)通信图两种交互图的优缺点交互图(顺序图和通信图)总结
内容摘要
物理体系结构建模
物理体系结构应回答的问题
物理体系结构的UML描述
信用卡代理应用收费管理营业员访问顾客访问请求接口供应接口信用卡代码构件图
信用卡代理顾客访问营业员访问管理应用收费:信用卡收费收费应用收费:营业员界面团体销售个体预订销售营业员访问销售:票:管理员界面购买状况状况管理:售票员:销售亭界面团体销售个体销售预订销售顾客访问预订销售收费购买个体销售构件图表示构件间的组装关系
应用收费管理信用卡代理状况购买预购销售团体销售:售票员:营业员界面:销售亭界面:管理员界面:票:信用卡收费个体销售收费顾客访问营业员访问复合构件的内部构件图
《DecNet》《TCP/IP》《TCP/IP》ClientA:Compaq Pro PCApplicationServer;Silicon GraphicsO2DatabaseServer:VAXClientB:Compaq Pro PC结点之间的通信连接部署图例
《artifact》Transaction.jar《database》account DBServer:Bank serverClient:ATM Kiosk《artifact》ATM-GUI.jarTransaction《manifest》update部署图中的制品制品是一个物理实现单元,如文件。如果一个制品实现了一个构件或其它类,可以从制品到实现它的构件之间画一个虚线箭头,并在箭头上附加关键词《manifest》
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}