全国软件设计师强化培训教程UML部分.pdf
UMLUMLUMLUML-1-UMLUMLUMLUML-1-UML UML UML UML 基础教程基础教程UML UML UML UML 基础教程基础教程UMLUMLUMLUML-2-UMLUMLUMLUML-2-目录目录目录目录目录目录1.1.1.1.前言前言1.11.11.11.1前言前言1.21.21.21.2UMLUMLUMLUML概述概述1.3UML1.3UML1.3UML1.3UML事物事物1.4UML1.4UML1.4UML1.4UML关系关系1.51.51.51.5各各UMLUMLUMLUML图及特征图及特征1.61.61.61.6各各UMLUMLUMLUML图的关系图的关系1.7UML1.7UML1.7UML1.7UML语法语法1.81.81.81.8习题习题2.2.2.2.用例图用例图2.12.12.12.1用例图用例图概要概要2.22.22.22.2用例图中的事物及解释用例图中的事物及解释2.32.32.32.3用例图中的关系及解释用例图中的关系及解释2.42.42.42.4例子例子2.52.52.52.5习题习题3.3.3.3.类图类图3.13.13.13.1类图概要类图概要3.23.23.23.2类图中的事物及解释类图中的事物及解释3.33.33.33.3类图中的关系及解释类图中的关系及解释3.43.43.43.4类图与代码的映射类图与代码的映射3.53.53.53.5类图例子类图例子3.63.63.63.6习题习题4.4.4.4.顺序图顺序图4.14.14.14.1概要概要4.24.24.24.2顺序图中的事物及解释顺序图中的事物及解释4.34.34.34.3顺序图与用例图和类图的关系顺序图与用例图和类图的关系4.44.44.44.4顺序图例子顺序图例子4.5 4.5 4.5 4.5 练习题练习题5.5.5.5.协作图协作图5.15.15.15.1概要概要5.25.25.25.2协作图中的事物及解释协作图中的事物及解释5.35.35.35.3协作图中的关系及解释协作图中的关系及解释UMLUMLUMLUML-3-UMLUMLUMLUML-3-目录目录目录目录目录目录5.45.45.45.4对消息标签的详细讲解对消息标签的详细讲解5.55.55.55.5协作图例子协作图例子5.65.65.65.6协作图与顺序图的区别和联系协作图与顺序图的区别和联系5.75.75.75.7练习题练习题6.6.6.6.状态图状态图6.16.16.16.1状态图概要状态图概要6.26.26.26.2状态图的组成状态图的组成6.36.36.36.3状态图中的事物及解释状态图中的事物及解释6.46.46.46.4状态的可选活动表状态的可选活动表6.56.56.56.5简单的例子简单的例子:对象的状态图对象的状态图6.66.66.66.6复杂的例子复杂的例子:网上银行登陆系统网上银行登陆系统6.76.76.76.7练习练习7.7.7.7.活动图活动图7.17.17.17.1活动图概要活动图概要7.27.27.27.2活动图活动图事物事物7.37.37.37.3活动图关系活动图关系7.47.47.47.4活动图实例活动图实例7.57.57.57.5活动图练习活动图练习8.8.8.8.构件图构件图8.18.18.18.1构件图概要构件图概要8.28.28.28.2构件图中的事物及解释构件图中的事物及解释8.38.38.38.3构件图中的关系及解释构件图中的关系及解释8.48.48.48.4构件图的例子构件图的例子8.58.58.58.5习题习题9.9.9.9.部署图部署图9.19.19.19.1部署图概要部署图概要9.29.29.29.2部署图中的事物及解释部署图中的事物及解释9.39.39.39.3部署图中的关系及解释部署图中的关系及解释9.49.49.49.4部署图的例子部署图的例子9.59.59.59.5关于部署图与构件图关于部署图与构件图9.69.69.69.6习题习题 附录附录UMLUMLUMLUML-4-1.1.1.1.前言前言1.1.1.1.1.1.1.1.前言前言前言前言1.11.11.11.1 前言前言 本资料对UML1.5各种模型图的构成和功能进行说明,通过本资料的学习达到可以读懂UML模型图的目的。本资料不涉及模型图作成的要点等相关知识。1.21.21.21.2 UMLUMLUMLUML概述概述1.1.1.1.2.1 UML2.1 UML2.1 UML2.1 UML简介简介 UML(Unified Modeling Language)为面向对象软件设计提供统一的、标准的、可视化的建模语言。适用于描述以用例为驱动,以体系结构为中心的软件设计的全过程。UML的定义包括UML语义和UML表示法两个部分。(1)UML(1)UML(1)UML(1)UML语义语义:UML对语义的描述使开发者能在语义上取得一致认识,消除了因人 而异的表达方法所造成的影响。(2)UML(2)UML(2)UML(2)UML表示法表示法:UML表示法定义UML符号的表示法,为开发者或开发工具使用这 些图形符号和文本语法为系统建模提供了标准。1.2.2 UML1.2.2 UML1.2.2 UML1.2.2 UML模型图的构成模型图的构成 事物事物(Things)Things)Things)Things):UML模型中最基本的构成元素,是具有代表性的成分的抽象 关系关系(Relationships)Relationships)Relationships)Relationships):关系把事物紧密联系在一起 图图(Diagrams)Diagrams)Diagrams)Diagrams):图是事物和关系的可视化表示UMLUMLUMLUML-5-1.1.1.1.前言前言1.1.1.1.1.1.1.1.前言前言前言前言1.31.31.31.3 UMLUMLUMLUML事物事物 UML包含4种事物:构件事物 行为事物 分组事物 注释事物1.3.11.3.11.3.11.3.1构件事物构件事物:UML模型的静态部分,描述概念或物理元素 它包括以下几种:类类:具有相同属性相同操作 相同关系相同语义的对象的描述接口接口:描述元素的外部可见行为,即服务集合的定义说明协作协作:描述了一组事物间的相互作用的集合用例用例:代表一个系统或系统的一部分行为,是一组动作序列的集合构件构件:系统中物理存在,可替换的部件节点节点:运行时存在的物理元素 另外,参与者、信号应用、文档库、页表等都是上述基本事物的变体1.3.21.3.21.3.21.3.2行为事物行为事物:UML模型图的动态部分,描述跨越空间和时间的行为交互交互:实现某功能的一组构件事物之间的消息的集合,涉及消息、动作序列、链接状态机状态机:描述事物或交互在生命周期内响应事件所经历的状态序列1.3.31.3.31.3.31.3.3分组事物分组事物:UML模型图的组织部分,描述事物的组织结构包包:把元素组织成组的机制1.3.41.3.41.3.41.3.4注释事物注释事物:UML模型的解释部分,用来对模型中的元素进行说明,解释注解注解 :对元素进行约束或解释的简单符号UMLUMLUMLUML-6-1.1.1.1.前言前言1.1.1.1.1.1.1.1.前言前言前言前言1.4 UML1.4 UML1.4 UML1.4 UML关系关系1.4.11.4.11.4.11.4.1依赖依赖 依赖(dependency)是两个事物之间的语义关系,其中一个事物(独立事物)发生变化,会影响到另一个事物(依赖事物)的语义1.4.21.4.21.4.21.4.2关联关联 关联(association)是一种结构关系,它指明一个事物的对象与另一个事物的对象间 的联系1.4.31.4.31.4.31.4.3泛化泛化 泛化(generalization)是一种特殊/一般的关系。也可以看作是常说的继承关系1.4.41.4.41.4.41.4.4实现实现 实现(realization)是类元之间的语义关系,其中的一个类元指定了由另一个类元保 证执行的契约UMLUMLUMLUML-7-1.1.1.1.前言前言1.1.1.1.1.1.1.1.前言前言前言前言1.51.51.51.5 各各UMLUMLUMLUML图及特征图及特征1.5.11.5.11.5.11.5.1用例图用例图(Use Case Diagram)Use Case Diagram)Use Case Diagram)Use Case Diagram)用例图是从用户角度描述系统功能,是用户所能观察到的系统功能的模型图,用例是系统中的一个功能单元 类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(类的属性和操作)类图是以类为中心来组织的,类图中的其他元素或属于某个类或与类相关联 1.5.21.5.21.5.21.5.2 类图类图(Class Diagram)Class Diagram)Class Diagram)Class Diagram)LineDraw()RectangleDraw()GroupGraphicsDraw()Add(g:Graphics)Remove(g:Graphics)GetChild(index:int)GraphicsDraw()Add(g:Graphics)Remove(g:Graphics)GetChild(index:int)+childrenUMLUMLUMLUML-8-1.1.1.1.前言前言1.1.1.1.1.1.1.1.前言前言前言前言1.51.51.51.5 各各UMLUMLUMLUML图及特征图及特征1.5.3 1.5.3 1.5.3 1.5.3 对象图对象图(Object Object Object Object DiagramDiagramDiagramDiagram )对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类1.5.4 1.5.4 1.5.4 1.5.4 顺序图顺序图(Sequence Diagram)Sequence Diagram)Sequence Diagram)Sequence Diagram)顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互 顺序图的一个用途是用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或引起状态转换的触发事件 UMLUMLUMLUML-9-1.1.1.1.前言前言1.1.1.1.1.1.1.1.前言前言前言前言1.51.51.51.5 各各UMLUMLUMLUML图及特征图及特征1.5.5 1.5.5 1.5.5 1.5.5 协作图协作图(Collaboration Diagram)(Collaboration Diagram)(Collaboration Diagram)(Collaboration Diagram)协作图描述对象间的协作关系,协作图跟顺序图 相似,显示对象间的动态合作关系。除显示信息交换外,协作图还显示对象以及它们之间的关系.协作图的一个用途是表示一个类操作的实现 1.5.6 1.5.6 1.5.6 1.5.6 状态图状态图(State Chart Diagram)State Chart Diagram)State Chart Diagram)State Chart Diagram)状态图是一个类对象所可能经历的所有历程的模型图。状态图由对象的各个状态和连接这些状态的转换组成 Available Locked Sold 初始状态 assigned to subscription lock time out unlock buy 状态 exchange 转换 触发器事件 UMLUMLUMLUML-10-1.1.1.1.前言前言1.1.1.1.1.1.1.1.前言前言前言前言1.51.51.51.5 各各UMLUMLUMLUML图及特征图及特征1.5.7 1.5.7 1.5.7 1.5.7 活动图活动图(Activity Diagram)(Activity Diagram)(Activity Diagram)(Activity Diagram)活动图是状态图的一个变体,用来描述执行算法的工作流程中涉及的活动活动图描述了一组顺序的或并发的活动 1.5.8 1.5.8 1.5.8 1.5.8 构构件图件图(CompoCompoCompoCompon n n nent Diagram)ent Diagram)ent Diagram)ent Diagram)构件图为系统的构件建模型构件即构造应用的软件单元还包括各构件之间的依赖关系,以便通过这些依赖关系来估计对系统构件的修改给系统可能带来的影响 UMLUMLUMLUML-11-1.1.1.1.前言前言1.1.1.1.1.1.1.1.前言前言前言前言1.51.51.51.5 各各UMLUMLUMLUML图及特征图及特征1.5.9 1.5.9 1.5.9 1.5.9 部署部署图图(Deployment Diagram)(Deployment Diagram)(Deployment Diagram)(Deployment Diagram)部署视图描述位于节点实例上的运行构件实例的安排。节点是一组运行资源,如计算机、设备或存储器。这个视图允许评估分配结果和资源分配类图顺序图需求分析需求分析BDBDBDBDFD/DDFD/DDFD/DDFD/DD类图顺序图用例图用例文档用例图顺序图主要图之间的关系主要图之间的关系1.6 1.6 1.6 1.6 各各UMLUMLUMLUML图的关系图的关系UMLUMLUMLUML-12-1.1.1.1.前言前言1.1.1.1.1.1.1.1.前言前言前言前言1.7 UML1.7 UML1.7 UML1.7 UML语法描述语法描述NewClassInterfaceusecaseclasssuspend()flush()对象至少拥有一个进程或线程的类主动类是系统中物理的、可替代的部件构件在系统外部与系统直接交互的人或事物参与者是对一组动作序列的描述用例定义了一个交互,它是由一组共同工作以提供某种协作行为的角色和其他元素构成的一个群体协作是描述了一个类或构件的一个服务的操作集接口对象是对一组具有相同属性、相同操作、相同关系和相同语义的对象的描述类一条实线,可能有方向关联一条带有空心箭头的实线泛化是在运行时存在的物理元素节点一条带有空心箭头的虚线实现一条可能有方向的虚线依赖是UML模型的解释部分注释事物把元素组织成组的机制包它描述了一个对象或一个交互在生命期内响应事件所经历的状态序列状态机它由在特定语境中共同完成一定任务的一组对象间交换的消息组成交互actorNewProcessorstateNewPackagecomponetUMLUMLUMLUML-13-1.1.1.1.前言前言1.1.1.1.1.1.1.1.前言前言前言前言1.81.81.81.8习题习题 判断题1、UML中一共有九种图:它们是用例图、类图、对象图、顺序图、协作图、状态图、活动图、构件图、部署图2、用例图是从程序员角度来描述系统的功能3、类图是描述系统中类的静态结构,对象图是描述系统中类的动态结构4、活动图和状态图用来描述系统的动态行为5、协作图的一个用途是表示一个类操作的实现 选择题6、请在下面选项目中选出两种可以互相转换的图 (a)顺序图 (b)协作图 (c)活动图 (d)状态图7、下面哪些图可用于BD阶段 (a)用例图 (b)构件图 (c)类图 (d)顺序图 答案:1.正确 2.错误 3.错误 4.正确 5.正确 6.(a)(b)7.(a)(c)(d)UMLUMLUMLUML-14-2.12.12.12.1 用例图用例图概要概要 2.2.2.2.用例图用例图2.2.2.2.2.2.2.2.用例图用例图用例图用例图系统外部可见的一个系统功能单元。系统的功能由系统单元所提供,并通过一系列系统单元与一个或多个参与者之间交换的消息所表达。创建新用例,确认候选用例和划分用例范围的优秀法则-“WAVE”测试(见附录)用例(Use Case)在系统外部与系统直接交互的人或事物(如另一个计算机系统或一些可运行的进程)。我们需要注意的是:1.参与者是角色(role)而不是具体的人,它代表了参与者在与系统打交道的过程中所扮演的角色。所以在系统的实际运作中,一个实际用户可能对应系统的多个参与者。不同的用户也可以只对应于一个参与者,从而代表同一参与者的不同实例。2.参与者作为外部用户(而不是内部)与系统发生交互作用,是它的主要特征。3.在后面的顺序图等中出现的“参与者”,与此概念相同,但具体指代的含义,视具体情况而定。参与者(Actor)UMLUMLUMLUML表示表示解释解释事物事物名称名称2.2 2.2 2.2 2.2 用例图中的事物及解释用例图中的事物及解释 用例图是被称为参与者的外部用户所能观察到的系统功能的模型图。(UML参考手册)用例图列出系统中的用例和系统外的参与者,并显示哪个参与者参与了哪个用例的执行 (或称为发起了哪个用例)。用例图多用于静态建模阶段(主要是业务建模和需求建模)。UMLUMLUMLUML-15-2.2.2.2.用例图用例图2.2.2.2.2.2.2.2.用例图用例图用例图用例图发出箭头的事物“is a”箭头指向的事物。泛化关系是一般和特殊关系,发出箭头的一方代表特殊的一方,箭头指向的一方代表一般一方。特殊一方继承了一般方的特性并增加了新的特性。泛化参与者之间的关系箭头指向的用例为被扩展的用例,称为扩展用例;箭头出发的用例为基用例。扩展用例是可选的,如果缺少扩展用例,不会影响到基用例的完整性;扩展用例在一定条件下才会执行,并且其执行会改变基用例的行为。扩展 include箭头指向的用例为被包含的用例,称为包含用例;箭头出发的用例为基用例。包含用例是必选的,如果缺少包含用例,基用例就不完整;包含用例必须被执行,不需要满足某种条件;其执行并不会改变基用例的行为。包含用例之间的关系表示参与者与用例之间的交互,通信途径。(关联有时候也用带箭头的实线来表示,这样的表示能够显示地表明发起用例的是参与者。)关联参与者与用例之间的关系图解释关系extend2.32.32.32.3 用例图中的关系及解释用例图中的关系及解释UMLUMLUMLUML-16-2.2.2.2.用例图用例图2.2.2.2.2.2.2.2.用例图用例图用例图用例图实例1 参与者之间的泛化关系 参与者参与者:经理,安全主管,保安 用例用例:管理人事,批准预算,批准安全证书,监视周边 在参与者之间不存在泛化关系的情况下,各个参与者参与 用例的情况分别是:经理参与用例管理人事和批准预算;安全主管参与用例批准安全证书;保安参与用例监视周边。由于安全主管与经理,安全主管与保安之间泛化关系的存在,意味着安全主管可以担任经理和保安的角色,就能够参与经理和保安参与的用例。这样,安全主管就可以参与全部4个用例。但经理或者保安却不能担任安全主管的角色,也就不能参与用例批准安全证书。实例2 用例之间扩展和包含关系 用例的上下文是:短途旅行但汽车的油不足以应付全部路程。那么为汽车加油的动作在旅行的每个场景(事件流)中都会出现,不加油就不会完成旅行。吃饭则可以由司机决定是否进行,不吃饭不会影响旅行的完成。2.4 2.4 2.4 2.4 例子例子UMLUMLUMLUML-17-2.2.2.2.用例图用例图2.2.2.2.2.2.2.2.用例图用例图用例图用例图实例3.航空售票的用例图参与者(actor):clerk,监督员,信用卡服务商,信息亭用例(use case):Buy tickets,Buy Subscription,Make charges,Survey sales参与者Clerk参与(或称发起)Buy tickets和Buy Subscription 两个用例(关联关系)。这两个用例的事件流都包含Make charges用例(包含关系)。系统由:Buy tickets,Buy Subscription,Make charges,Survey sales组成。该系统主要包含:Buy tickets,Buy Subscription,Make charges,Survey sales这几个功能。该系统主要面向的用户(参与者):clerk,监督员,信用卡服务商,信息亭。信息亭 Clerk Buy tickets Buy Subscription 信用卡服务商 Make charges 监督员 Survey sales 参与者 用例 Box Office 系统 关系 UMLUMLUMLUML-18-2.2.2.2.用例图用例图2.2.2.2.2.2.2.2.用例图用例图用例图用例图1.右图中的参与者有?(a)1 (b)2(c)3(d)42.右图中的用例有?(a)1(b)2(c)3(d)43.2和3之间是什么关系?5和6呢?(a)扩展,包含(b)包含,扩展4.5缺少了3仍然是个完整的用例?(a)是的(b)不是5.4能够参与2吗?1能够参与5吗?(a)可以,不可以 (b)不可以,可以习题答案:1、(a)(d)2、(b)(c)3、(b)4、(b)5、(b)2.5 2.5 2.5 2.5 习题习题UMLUMLUMLUML-19-UMLUMLUMLUML-19-3.3.3.3.类图类图3.3.3.3.3.3.3.3.类图类图类图类图P ersonnam e:stringU seCom puter()Com putercpu:stringm em ory:stringrun()3.2 3.2 3.2 3.2 类图中的事物及解释类图中的事物及解释3.2.1 3.2.1 3.2.1 3.2.1 类类 从上到下分为三部分,分别是类名、属性和操作。类名是必须有的 类如果有属性,则每一个属性都必须有一个名字,另外还可以有其它的描述信息,如可见性、数据类型、缺省值等 类如果有操作,则每一个操作也都有一个名字,其它可选的信息包括可见性、参数的名字、参数类型、参数缺省值和操作的返回值的类型等A c c o u n t-b a la n c e :d o u b le =1+D e p o s it(a m o u n t:d o u b le):in t+C o m p u te In te re s t():d o u b le可见性可见性-代表private+代表public#代表protected也可以使用图形表示返回值类型返回值类型操作名称操作名称斜体为抽象操作缺省值缺省值类名类名斜体为抽象类属性名称属性名称参数列表参数列表3.13.13.13.1 类图概要类图概要 类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法 类图中的“类”与面向对象语言中的“类”的概念是对应的,是对现实世界中的事物的抽象UMLUMLUMLUML-20-UMLUMLUMLUML-20-3.3.3.3.类图类图3.3.3.3.3.3.3.3.类图类图类图类图Shape(标准图形)Shape+Draw()(变体图形)接口Vehicle-fMaxSpeed:float+Start():int+Stop():int抽象类TStacksize:intPush(elem:T):intPop():intGetTop():const T&模版参数模版参数模版类3.23.23.23.2 类图中的事物及解释类图中的事物及解释3.2.2 3.2.2 3.2.2 3.2.2 接口接口 一组操作的集合,只有操作的声明而没有实现3.2.3 3.2.3 3.2.3 3.2.3 抽象类抽象类 不能被实例化的类,一般至少包含一个抽象操作3.2.4 3.2.4 3.2.4 3.2.4 模版类模版类 一种参数化的类,在编译时把模版参数绑定到不同的数据类型,从而产生不同的类UMLUMLUMLUML-21-UMLUMLUMLUML-21-3.3.3.3.类图类图3.3.3.3.3.3.3.3.类图类图类图类图UMLUMLUMLUML表示法表示法角色角色类的角色是“事物“多重性多重性(用数字和*表示)1*:1个或多个1个类图有1个或多个类1个类属于1个或多个类图ClassDiagramClass+thing+diagram1.*1.*use1.*1.*方向方向双向关联(省略箭头)名字名字关系的名字是“使用”实例实例聚合关系 特殊关联关系,指明一个聚集(整体)和组成部分之间的关系组合关系 语义更强的聚合,部分和整体具有相同的生命周期UMLUMLUMLUML表示法表示法UMLUMLUMLUML表示法表示法ThingClassDiagramRelation(空心菱形)实例实例类图包含有事物和关系,类图不存在了,事物和关系还可用于其它的类图ClassAssociation(实心菱形)实例实例类与关联关系之间有组合关系,类不存在了,则相应的关联关系也不存在3.3 3.3 3.3 3.3 类图中的关系及解释类图中的关系及解释3.3.13.3.13.3.13.3.1 关联关系关联关系描述了类的结构之间的关系。具有方向、名字、角色和多重性等信息。一般的关 联关系语义较弱。也有两种语义较强,分别是聚合与组合UMLUMLUMLUML-22-UMLUMLUMLUML-22-3.3.3.3.类图类图3.3.3.3.3.3.3.3.类图类图类图类图UMLUMLUMLUML表示法表示法3.3.33.3.33.3.33.3.3 实现关系实现关系 对应于类和接口之间的关系UMLUMLUMLUML表示法表示法类Circle、Rectangle实现了接口Shape的操作S hape+D raw ()C ircle+D raw ()R ectangle+D rarw ()RelationAssociationGeneralizationRealizationDependency关联、泛化、实现、依赖都是一种关系ThingClassInterface类、接口都是一种事物3.3.2 3.3.2 3.3.2 3.3.2 泛化关系泛化关系 在面向对象中一般称为继承关系,存在于父类与子类、父接口与子接口之间3.3.4 3.3.4 3.3.4 3.3.4 依赖关系依赖关系描述了一个类的变化对依赖于它的类产生影响的情况。有多种表现形式,例如绑定(bind)、友元(friend)等UMLUMLUMLUML表示法表示法模板类Stack定义了栈相关的操作;IntStack将参数T与实际类型int绑定,使得所有操作都针对int类型的数据TS t a c ks iz e:in tP u s h(elem :T):in tP o p():in tG et T o p():c o n s t T&In t S t a c kF lo a t S t a c k 类Memento和类Originator建立了友元依赖关系,以便Originator使用Memento的私有变量stateO r ig in a t o rM em en t os t a t e:S t a t e*UMLUMLUMLUML-23-UMLUMLUMLUML-23-3.3.3.3.类图类图3.3.3.3.3.3.3.3.类图类图类图类图C+代码class Vehiclepublic:virtual int Start()=0;virtual int Stop()=0;virtual int Run(float fSpeed)=0;private:float fMaxSpeed;Java代码public abstract class Vehicle public abstract int Start();public abstract int Stop();public abstract int Run(float fSpeed);private float fMaxSpeed;V eh ic lea b stra c t-fM a x S p eed:floa t+S t a rt ()S t o p ()R u n (flo a t fS p eed):in t:in t:in t3.4 3.4 3.4 3.4 类图与代码的映射类图与代码的映射3.4.1 3.4.1 3.4.1 3.4.1 类的映射类的映射UMLUMLUMLUML-24-UMLUMLUMLUML-24-3.3.3.3.类图类图3.3.3.3.3.3.3.3.类图类图类图类图3.4.2 3.4.2 3.4.2 3.4.2 关联关系的映射关联关系的映射 C+代码class Dialog private:Button btnOK;Button btnCancel;TextBox txtInfo;class Button;class TextBox;组合关系,代码表现为Dialog的属性有Button和TextBox的对象T e x tB o xB u tto nD ia lo g-b t n O K :B u t t o n-b t n C a n c e l:B u t t o n-t x t In fo :T e x t B o x3.4.3 3.4.3 3.4.3 3.4.3 泛化关系的映射泛化关系的映射Java代码public class SavingsAccount extends Account A c co u n tb a l a n c e :d o u b l e =1D e p o s i t(a m o u n t :d o u b l e):i n tC o m p u te In te re s t():d o u b l eS a v i n g s A c c o u n tC o m p u t e In t e r e s t():d o u b l eC+代码class SavingsAccount:public Account;UMLUMLUMLUML-25-UMLUMLUMLUML-25-3.3.3.3.类图类图3.3.3.3.3.3.3.3.类图类图类图类图C+代码class Shape public:virtual void Draw()=0;class Circle:public Shapepublic:void Draw();private;Point ptCenter;int nRadius;Java代码public interface Shape public abstract void Draw();public class Circle implements Shapepublic void Draw();private Point ptCenter;private int nRadius;S ha p e+D ra w ()C ircle-ptC en tern R a dius:P oin t:in t+D ra w ()R ecta n g le-ptU pperL eftn W idthn H eig h t:P oin t:in t:in t+D ra rw ()在C+语言里面,使用抽象类代替接口,使用泛化关系代替实现关系在Java语言里面,有相应的关键字interface、implements3.4.4 3.4.4 3.4.4 3.4.4 实现关系的映射实现关系的映射 3.4.5 3.4.5 3.4.5 3.4.5 依赖关系的映射依赖关系的映射绑定依赖TS ta c k-s iz e :in t+P u s h(e le m :T):in t+P o p():i n t+G e tT o p():c o n s t T&In tS ta c kF lo a tS ta c k C+代码templateclass Stack private:int size;public:int Push(T elem);int Pop();const T&GetTop();typedef Stack FloatStack;C+代码(编译器生成)class FloatStack private:int size;public:int Push(float elem);int Pop();const float&GetTop();UMLUMLUMLUML-26-UMLUMLUMLUML-26-3.3.3.3.类图类图3.3.3.3.3.3.3.3.类图类图类图类图Graphics:基本图形和组合图形的父类,声明了所有图形共同的操作,如Draw;也声明了专用于组合图形管理子图形的操作,如Add、RemoveLine、Rectangle:基本图形类GroupGraphics:组合图形类,与父类有组合关系,从而可以组合所有图形对象(基本图形和组合图形)LineDraw()RectangleDraw()GroupGraphicsDraw()Add(g:Graphics)Remove(g:Graphics)GetChild(index:int)GraphicsDraw()Add(g:Graphics)Remove(g:Graphics)GetChild(index:int)+children泛化组合组合模式3.5 3.5 3.5 3.5 类图例子类图例子3.5.1 3.5.1 3.5.1 3.5.1 图形编辑器图形编辑器 图形编辑器一般都具有一些基本图形,如直线、矩形等,用户可以直接使用基本图形画图,也可以把基本图形组合在一起创建复杂图形 如果区别对待基本图形和组合图形,会使代码变得复杂,而且多数情况下用户认为二者是一样的 组合模式可以用相同的方式处理两种图形UMLUMLUMLUML-27-UMLUMLUMLUML-27-3.3.3.3.类图类图3.3.3.3.3.3.3.3.类图类图类图类图3.5.2 3.5.2 3.5.2 3.5.2 演出售票系统演出售票系统 在用例驱动的开发过程中,通过分析各个用例及参与者得到类图。分析用例图的过程中需要根据面向对象的原则设计类和关系,根据用例的细节设计类的属性和操作在这里只考虑以下三个用例:Buy tickets:买个人票Buy Subscription:买套票Make charges:信用卡付款信息亭 Clerk Buy tickets Buy Subscription 信用卡服务商 Make charges 监督员 Survey sales 参与者 用例 Box Office 关系 SubscriptionSeriesseries:intIndividualReservationTicketno:int3.60.13.60.110.110.1Reservationdate:DateCustomername:stringphone:string1.*11.*1Seatno:intcolomn:introw:intavailable:bool1111Performanceno:intdate:Datetime:Time0.*10.*1CreditCardServiceCharge(cardnumber,cost)kjoskShowAvailability(seatlist)DemandPayment(cost)PrintTickets(performance,seats)EjectCard()BoxOfficeRequest(count,performance)Select(seats)InsertCard(cardnumber,password)Authorized()用例图用例图类图类图使用泛化关系处理客户购买个人票和套票两种不同情况设计类的属性和操作UMLUMLUMLUML-28-UMLUMLUMLUML-28-3.3.3.3.类图类图3.3.3.3.3.3.3.3.类图类图类图类图(1)(1)(1)(1)哪两