《Java面向对象程序设计(第2版)第17章.ppt》由会员分享,可在线阅读,更多相关《Java面向对象程序设计(第2版)第17章.ppt(65页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、统一建模语言UMLUML模型系统体系结构n UML:Unified Modeling LanguageUnified:BoochRumbaughJacobson UML由世界著名的面向由世界著名的面向对象技象技术专家家G.Booch、J.Rumbaugh、I.Jacobson发起,在起,在Booch方法,方法,OMT方法和方法和OOSE方法基方法基础上,上,广泛征求意广泛征求意见,汲众家之,汲众家之长,几,几经修改而完成的。修改而完成的。1997年被年被OMG(Object Management Group)采)采纳为业界界标准。准。Modeling:建模建模UML用于建模,即表达模型用于建模
2、,即表达模型设计,而且自身,而且自身拥有四有四层体系体系结构。构。模型是系模型是系统一个抽象的概括,一个抽象的概括,强调系系统设计特定的重要方面,同特定的重要方面,同时忽略大忽略大量底量底层的的编程程细节。而建模就是。而建模就是为了捕捉、描述系了捕捉、描述系统的核心。同一研究的核心。同一研究对象象不同人建立的模型可能同不同人建立的模型可能同样好或同好或同样差。差。建模的益处:建模的益处:理解和认识系统的结构和行为,掌握系统的本质特征。理解和认识系统的结构和行为,掌握系统的本质特征。在创建系统之间,了解系统的风险并进行化解。在创建系统之间,了解系统的风险并进行化解。是开发团队沟通的重要形式,为使
3、用系统的人提供帮助。是开发团队沟通的重要形式,为使用系统的人提供帮助。Language:是一种可视化建模语言,有语法和语义,消除了自然语言的歧义。是一种可视化建模语言,有语法和语义,消除了自然语言的歧义。虽然与具体面向对象语言无关,但学会虽然与具体面向对象语言无关,但学会UML的的关键之处是将关键之处是将UML模型与具体代码实现相互结合;模型与具体代码实现相互结合;UML modelSource codeObject structuresExecuting programUMLProgramming languageAbstract view ofAbstract view ofSpecifi
4、esSpecifies模型与代码之间的关系模型与代码之间的关系四层元模型体系结构四层元模型体系结构Run-time Instance运行实例层运行实例层Model模型层模型层Metamodel元模型层元模型层Metametamodel元元模型层元元模型层Classperson1:PersonPersonToolAssociationInfrastructure Library:Core:Constructs:ClassInfrastructure Library:Core:Abstraction:Relationships规定元模型的语言规定元模型的语言规定模型的语言规定模型的语言定义描述语义
5、域的语言定义描述语义域的语言n UML的主要特点:的主要特点:建模设计上的标准化与可视化的结合 建模设计上的语言无关性。建模设计上标准性与扩展性的统一。n 使用使用UML的的CASE(Computer-Assisted Software Engineering)工具)工具 Rational Rose PowerDesignern CASE工具的功能工具的功能构造模型并进行详细说明,可以检查模型语法正确与否。正向工程(生成数据结构、代码、文档)和逆向工程(代码生成模型)便于团队对模型的共享访问、安全管理、交流(共享相同概念)对模型文档的版本进行识别、存储和管理n UML视图(视图(View):描
6、述软件系统的不同方面):描述软件系统的不同方面所关心视图所关心视图客户客户用例视图分析者分析者用例视图、逻辑视图设计者设计者用例视图、逻辑视图、构件视图开发者开发者用例视图、逻辑视图、构件视图、进程视图、部署视图测试者测试者用例视图、部署视图系统集成者系统集成者进程视图、部署视图逻辑视图构件视图进程视图部署视图用例视图结构视域实现视域行为视域环境视域用户视域4+1视图模型视图模型不同开发者对视图的关心角度不同开发者对视图的关心角度n UML图(图(Diagram):用于描述模型,是模型元素的一个集合单元。):用于描述模型,是模型元素的一个集合单元。用例图:需求捕获用例图:需求捕获类类 图:类及
7、类之间的相互关系图:类及类之间的相互关系对象图:对象以及对象之间的相互关系对象图:对象以及对象之间的相互关系构件图:构件及其相互依赖关系构件图:构件及其相互依赖关系部署图:构件在各节点上的部署部署图:构件在各节点上的部署顺序图:强调对象时间顺序的交互顺序图:强调对象时间顺序的交互协作图:强调对象协作的交互协作图:强调对象协作的交互状态图:类所经历的各种状态状态图:类所经历的各种状态活动图:对工作流程建模活动图:对工作流程建模 结结 构构 行行 为为敏捷软件原则:需要时再添加UML的主要图类型的主要图类型活动图用例图协作图对象图类图状态图序列图WorkflowScenariosInter-cla
8、ss behaviorInter-class behaviorStructureStructureInteraction equence between objectsUML图在设计过程中的演化关系图在设计过程中的演化关系发现类方法:名方法:名词短短语;公共;公共类;用例;用例导出;出;CRC(类、职责、协作)作)提提炼类方法:系方法:系统范范围内;清晰目的;不能孤立;有属性;内;清晰目的;不能孤立;有属性;类功能功能单一;一;Association&GeneralizationStructureTypeDiagram用例模型图用例模型图用例图静态模型图(状态模型)静态模型图(状态模型)类图、
9、对象图、构件图、配置图、包图动态动态模型图模型图行为模型行为模型交互图顺序图协作图(通信图)活动图状态变化模型状态变化模型状态图UML图的类型划分图的类型划分n UML视图与图对应关系视图与图对应关系图视图视图主要概念主要概念Use case diagramUse case view用例、参与者、关联关系、用例、参与者、关联关系、扩展关系、包含关系、泛化关系扩展关系、包含关系、泛化关系Object diagramUse case and logic view对象、链接关系对象、链接关系Sequence diagramUse case and logic view对象、消息对象、消息Collab
10、oration diagramUse case and logic view类元、链接关系、消息类元、链接关系、消息Activity diagramUse case and logicview活动、迁移、起始活动、终止活动、分支活动、迁移、起始活动、终止活动、分支与合并、分叉与汇合与合并、分叉与汇合Class diagramlogic view类、关联关系、聚合关系、组合关系、泛类、关联关系、聚合关系、组合关系、泛化关系、依赖关系、接口、包化关系、依赖关系、接口、包Package diagramlogic view包、依赖关系、泛化关系包、依赖关系、泛化关系State diagramlogic
11、 view状态、迁移、起始状态、终止状态、判定状态、迁移、起始状态、终止状态、判定Component diagramComponent view构件、接口、依赖关系构件、接口、依赖关系Deployment diagramDeployment view节点、构件、依赖关系、关联关系节点、构件、依赖关系、关联关系BABAUse caseBA用例图主要模型元素及其含义用例图主要模型元素及其含义参与者(角色)参与者(角色)用例用例包含关系包含关系扩展关系扩展关系关联关系关联关系泛化关系泛化关系参与者是针对用例所扮演的角色,可以人也可以是事物。参与者是针对用例所扮演的角色,可以人也可以是事物。用例是功能
12、,功能是完整的、外部可见的、相互独立的。用例是功能,功能是完整的、外部可见的、相互独立的。完整含义:用例的执行逻辑必须完整,即有主要执行的流完整含义:用例的执行逻辑必须完整,即有主要执行的流程,也有各种次要流程和意外处理流程。程,也有各种次要流程和意外处理流程。外部可见的:不是内部功能,是参与者可以感知的。外部可见的:不是内部功能,是参与者可以感知的。相互独立的:用例开始执行到最终结束不依赖于其他用例相互独立的:用例开始执行到最终结束不依赖于其他用例是参与者和用例之间的通信渠道,如果没有箭头,则代表是参与者和用例之间的通信渠道,如果没有箭头,则代表通信是双向的。通信是双向的。是用例与用例的一种
13、依赖关系:它允许被包含用例中的公是用例与用例的一种依赖关系:它允许被包含用例中的公共行为从包含用例中分解出来。如共行为从包含用例中分解出来。如B用例包含用例包含A用例,则用例,则意味着意味着B用例要执行,必须先执行用例要执行,必须先执行A用例。用例。是用例与用例的关系:是用例与用例的关系:B用例扩展用例扩展A用例,表示用例,表示A用例在用例在某种条件满足下,可以执行某种条件满足下,可以执行B用例。因而用例。因而B用例是用例是A用例用例的额外功能;另外当的额外功能;另外当B用例的执行可以由用例的执行可以由A用例而来,也用例而来,也可以由其他途径而来时(没有包含那种强制含义),可以由其他途径而来时
14、(没有包含那种强制含义),B用用例和例和A用例也是一种扩展关系。用例也是一种扩展关系。是用例与用例、参与者与参与者之间的一种继承关系,表是用例与用例、参与者与参与者之间的一种继承关系,表示一个用例(角色)将继承另一用例(角色)的所有功能示一个用例(角色)将继承另一用例(角色)的所有功能(语义含义)。(语义含义)。用例图是对需求中系统功能的规格说明(不对系统约束进行说明),并被作为验收测用例图是对需求中系统功能的规格说明(不对系统约束进行说明),并被作为验收测试的依据。试的依据。用例图模型的建立过程:确定参与者和用例;确定参与者与用例之间的关系,确定参用例图模型的建立过程:确定参与者和用例;确定
15、参与者与用例之间的关系,确定参与者之间的关系,确定用例之间的关系;确定需求边界,在用例图中用矩形框表示;与者之间的关系,确定用例之间的关系;确定需求边界,在用例图中用矩形框表示;对用例功能进行描述,形成文档。对用例功能进行描述,形成文档。【例】包含二个角色,四个用例。其中B用例和A用例之间的关系为包含,即B用例执行前必须先执行A用例;C和A的关系为扩展,即A用例在某种条件满足下,可以扩展出C用例;D用例和A用例的关系为继承,表明D将拥有A用例的所有功能。参与者1和参与者2之间的关系为继承,表示参与者2除了可以驱动A、B用例外,还可以驱动参与者1的所有用例,即图中的D用例。用例规格说明格式用例规
16、格说明格式用例说明要素用例说明要素说明说明简要描述概述参与者涉及的参与者前置条件用例开始所需的条件主事件流对正常事件的流程进行描述备选流定义异常事件后置条件用例结束后的系统状态表示类及其关联关系的图表示类及其关联关系的图+display()-getNumOpenSlots()+setStatus()+numCanisters:int-numWafers:int-size:floatCanister类名属性操作+:可见-:不可见类图类图长短式;抽象类和具体类表示;类多重性表示;封装表示长短式;抽象类和具体类表示;类多重性表示;封装表示操作属性:类型类名*University1 Component
17、主要的模型元素:主要的模型元素:类、关联、泛化、依赖关系、接口、包。类、关联、泛化、依赖关系、接口、包。类中属性和操作的类范围和对象范围类中属性和操作的类范围和对象范围+Canister()+display()-getNumOpenSlots()+setStatus()+numCanisters:int-numWafers:int-size:floatCanister静态属性构造方法静态方法此三者专属于类,其他属性和方法虽然在类中定义,实际为对象而服务。对象图为类图实例,是类图的一个快照对象图为类图实例,是类图的一个快照对象图对象图长式长式属性=值对象名:类名对象名:类名短式短式类图类图对象图
18、对象图类具有3个分栏:名称、属性和操作对象只有两个分栏:名称和属性类的名称栏只有类名对象名称栏为:“对项目:类名”或“:类名”类的属性分栏定义了所有属性的特征定义了属性的当前值类中列出了操作不包含操作,因为对象所有操作相同类图是对象图的抽象,类有关联,关联是对象图中链接的抽象,类图中的关联有名称、角色、多重性以及约束等。对象图是类图的一个实例,对象有链接,链接是关联的实例,链接有名称、角色,但没有多重性。类图和对象图的比较类图和对象图的比较类是数据类型,类是数据类型,UML在表示所有语言数据类型上不够;在表示所有语言数据类型上不够;用构造型(用构造型(stereotype)进行数据类型(模型元
19、素)的扩展。)进行数据类型(模型元素)的扩展。Integer基本int数据类型MyInterfaceJava语言的接口Colorredgreenblue用户自定义枚举类型泛化:抽象类与继承关系的泛化:抽象类与继承关系的UML表示表示 泛化构造型:泛化构造型:、抽象类在编程上的可替换(抽象类在编程上的可替换(Interchageable)与多态性)与多态性CurrentAccountDepositAccountOnlineAccountAccountgetBalance()Account ac;ac=new CurrentAccount();System.out.println(ac.getBa
20、lance();ac=new DepositAccount();System.out.println(ac.getBalance();可替换性多态性关联(一):关联(一):关联名、关联方向、关联角色、关联多重性关联名、关联方向、关联角色、关联多重性class Person Compony employer;.class Company Person employee;.类A类B角色a 角色b 关联名 关联多重性 关联多重性 PersonCompanyemployee employer WorksFor 0.*0.1 关联(二)实现:类图为关联,对象图为链接,代码实现为引用;关联(二)实现:类图
21、为关联,对象图为链接,代码实现为引用;类图中的关联关系将决定对象图、序列图中对象的交互关系类图中的关联关系将决定对象图、序列图中对象的交互关系PersonCompanyemployee employer WorksFor 0.*1 john:PersonICI:CompanyWorksFor tom:PersonWorksFor 用代码表示类图多重性含义用代码表示类图多重性含义(一)(一)class A B b;.class B A a;.A、B两个两个类对象可以引用象可以引用对方也可以不引用,方也可以不引用,总之可自由之可自由选择;用代码表示类图多重性含义用代码表示类图多重性含义(二)(二)
22、A类对象必象必须引用引用B类对象,象,B类对象象则可以引用也可以不引用可以引用也可以不引用A对象象class A B b;A(B _b)if(_b=null)/throw NullLinkError b=_b;class B A a;.用代码表示类图多重性含义用代码表示类图多重性含义(三)(三)class A B b;A(B _b)if(_b=null)/throw NullLinkError b=_b;b.setA(this);class B A a;void setA(A _a)if(_a=null)/throw NullLinkError a=_a;先先产生生B类对象,再象,再产生生A类
23、对象,只要象,只要A类对象象产生生时,二者就,二者就构成了相互引用;如果构成了相互引用;如果产生生对象的方式反象的方式反过来,如法炮制。来,如法炮制。关联(三):关联的元数关联(三):关联的元数(一元关联或自关联或递归关联、二元关联、三元关联)(一元关联或自关联或递归关联、二元关联、三元关联)?对象存在一元链接对象存在一元链接和三元链接吗和三元链接吗Servantheader clerk Manage 0.*1 header:ServantClerk_n:ServantClerk_1:ServantMailMessageAttachment*composition*ComputerProces
24、sor*1aggregation关联(四):聚合(部分是整体的一部分)关联(四):聚合(部分是整体的一部分)组合(整体拥有部分)组合(整体拥有部分)主要概念主要概念聚和聚和传递性、非对称性传递性、非对称性组合组合传递性、非对称性、依赖性、固定性传递性、非对称性、依赖性、固定性特征特征一般关联一般关联聚合聚合组合组合标记标记实线实线空心菱形空心菱形实心菱形实心菱形拥有拥有无无弱弱强强多重性多重性任意任意任意任意整体为整体为1传递性传递性无无有有传方向传方向无无整体与部分整体与部分关联(五):关联约束关联(五):关联约束约束关键词约束关键词含义含义subset一个关联是另一个关联的子集ordere
25、d表示有序对象changeable关联可变addonly关联可以动态添加,但不能修改frozen关联不能修改xor两个关联之间是互斥关系委员会人subset*1成员主席主席是成主席是成员中的一中的一员:委:委员会有一个成会有一个成员的引用集合,有一个的引用集合,有一个“主席引用主席引用”,主席,主席对象被象被“主席引用主席引用”引用外,在成引用外,在成员引用引用集合中也存在一个引用指向主席集合中也存在一个引用指向主席对象。象。多边形线段*ordered多多边形中存在一个形中存在一个线段的引用集合,多个段的引用集合,多个线段段对象的引用是以有序的方式加入集合当中。象的引用是以有序的方式加入集合当
26、中。购房合同人公司xor购房合同的主体只能有一个,要么是人,要么是公司。房合同的主体只能有一个,要么是人,要么是公司。人公司雇主0.1*工人*0.1老板人.雇主=人.老板.雇主用标记值来表示约束老板:人工人1:人工人2:人A:公司老板:人工人1:人工人2:人A:公司B:公司约束条件下的对象链接图约束条件下的对象链接图没有约束条件下的可能存没有约束条件下的可能存在的对象链接关系图在的对象链接关系图关联(六):关联类;产生条件(多重性中的多对多;将对应关系进行存储关联(六):关联类;产生条件(多重性中的多对多;将对应关系进行存储)ModuleStudent*RegistrationMark:Int
27、eger1class Registration private int mark;private Student student;Registration(Student st)student=st;mark=0;class Module private Vector registrations=new Vector();public void enroll(Student st)registrations.addElement(new Registration(st);CustomerAccountCurrentAccountDepositAccountOnlineAccountHolds0
28、.11关联(七):关联与类的泛化关联(七):关联与类的泛化CustomerCurrentAccountDepositAccountOnlineAccount Directory Filename0.1class Directory private Hashtable theFiles;.关联(八):受限(关联(八):受限(qualified)关联的表示及实现;)关联的表示及实现;name是theFiles中的Key DirectoryFile*interfaceMyClassMyInterfaceinterface MyInterface.class MyClass implements My
29、Interface .MyClassMyInterface接口表示及实现接口表示及实现class MyDependentClass .void myFunction1(MyReferencedClass r).MyReferencedClass myFunction2().void myFunction3()MyReferencedClass m dependence(reference to a class)parameteror return typeor local variable typeMyDependentClassMyReferencedClass依赖的表示和实现依赖的表示和实
30、现依赖的表示和实现依赖的表示和实现MyClassMyInterfaceUseClass class UseClass void myFunction(MyInterface mi)Studentjack:Student包及包图包及包图包是UML的模型元素之一,是一种分组机制,把一些模型元素组织成语义上相关的组。包可以包含类、接口、组件、结点和其他包,包之间有引入、依赖、继承的关系。包图用来描述系统模型的体系结构层次,一个包就是一个子系统,包图是设计中的概念,在建模时起到归类的作用,对于实际系统没有意义,不需要转化成可执行的系统。包图中涉及到的注解到包名边的构造型主要有:系统模型 子系统模型是其
31、他包的一个访问接口视图包另一个包的代理由模式组成的包Package包名,可含有包路径包层次ABDC A包在包在类定定义层次使用了次使用了B包包继承了承了D包,包,在在对象象层次次调用了用了C包中的包中的对象。象。顺序图(序列)图顺序图(序列)图顺序图又称为序列图,描述对象之间动态的消息交互关系,体现对象间消息传递顺序图又称为序列图,描述对象之间动态的消息交互关系,体现对象间消息传递的时间顺序。图顶层的水平轴为交互的对象,对象下的虚线代表对象生命线,虚的时间顺序。图顶层的水平轴为交互的对象,对象下的虚线代表对象生命线,虚线上的矩形框表示对象接受消息后被激活期,代表方法的执行,对象间消息交互线上的
32、矩形框表示对象接受消息后被激活期,代表方法的执行,对象间消息交互从图的最顶端开始,自上向下体现的是消息交互的时间顺序。从图的最顶端开始,自上向下体现的是消息交互的时间顺序。myObject:MyClassmyObject1:MyClass11.1Operation1()Client1Operation()Client端端是消息的发是消息的发送端送端,拥有拥有myObject的引用的引用Operation()是是MyClass的方法,的方法,该方法中有该方法中有myClass1对对象的引用象的引用Operation1()是是MyClass1的方法的方法a是MyClass的声明 a.Operati
33、on()b是MyClass1声明 b.Operation1()交互图中的消息交互图中的消息1)消息格式:)消息格式:序号序号条件条件重复次数重复次数回送值:回送值:=操作名(参数表)操作名(参数表)2)消息四种类型:简单消息、同步消息、异步消息和返回消息)消息四种类型:简单消息、同步消息、异步消息和返回消息简单消息同步消息异步消息返回消息消息的类型消息的类型内部消息的表示方法内部消息的表示方法:A:B消息中的构造型消息中的构造型3)内部消息和循环消息表示方法)内部消息和循环消息表示方法4)消息中的构造型:创建消亡用同步消息,)消息中的构造型:创建消亡用同步消息,、建立顺序图步骤建立顺序图步骤1
34、.确定交互的类对象2.在序列图左上角画一个矩形框代表该对象,使用 UML标记方法:object:Class3.画一个延长矩形框在该对象下面表示一个操作的执行。4.画一个箭头指向右边。myObject:MyClassmyObject1:MyClass1operation1()5.确定那个对象处理该消息。6.用操作的名称给该箭头命名。7.系统使用一个拉长的矩形框表示一个过程的开始。8.如果是同步消息(方法调用),则接受消息对象被激活的矩形框不要超过发消息对象的矩形框。myObject:MyClass合作图(协作)图合作图(协作)图用于描述相互合作的对象间的交互关系,模型元素由类元或对象、链接、消息
35、构成。用于描述相互合作的对象间的交互关系,模型元素由类元或对象、链接、消息构成。类元角色:描述对象在交互中扮演的角色类元角色:描述对象在交互中扮演的角色winner:Account链接:用实线表示两个类元(对象)之间的链接,用构造型表明链接的种类链接:用实线表示两个类元(对象)之间的链接,用构造型表明链接的种类类型类型含义含义全局性(global)表明该链接是由类中关联的实例化局部性(local)表明该链接是操作中的一个局部变量。参数性(parameter)表明该链接是操作中的传入变量自我性(self)表明该链接是自身发送的消息消息:格式同顺序图消息:格式同顺序图:Component*Clie
36、nt:Assembly1:cost()1.1*:cost():ComponentClient:Assembly1:cost()1.1*:cost()合作图中的循环消息表示法合作图中的循环消息表示法对象的创建与撤销对象的创建与撤销new:合作中新产生的对象或链接:合作中新产生的对象或链接destroy:合作中销毁的对象或链接:合作中销毁的对象或链接transient:合作中产生又销毁的对象或链接:合作中产生又销毁的对象或链接Client:Orderline:OrderLinedestroy1:remove(line)1.1:destroy消息构造型链接撤销对象撤销顺序图和合作图的相互转化顺序图和
37、合作图的相互转化活动图活动图活动图用于描述系统需求各用例内活动的执行顺序或类方法中主要活动的执行流程。活动图用于描述系统需求各用例内活动的执行顺序或类方法中主要活动的执行流程。l活动:活动由子活动或动作构成,动作是不可再分的活动,其执行不能被打断,动作不能象活活动:活动由子活动或动作构成,动作是不可再分的活动,其执行不能被打断,动作不能象活动那样拥有入口动作、出口动作和内部迁移,活动和动作都拥有相同的动那样拥有入口动作、出口动作和内部迁移,活动和动作都拥有相同的UML表示符号。表示符号。模型元素模型元素活动活动迁移迁移分支与合并分支与合并开始活动开始活动结束活动结束活动分叉分叉汇合汇合l迁移:
38、由带箭头的实线表示,表示动作状态的转移,当迁移上无条件时,称为无条件动作流,当迁移:由带箭头的实线表示,表示动作状态的转移,当迁移上无条件时,称为无条件动作流,当有条件时,条件满足迁移发生。有条件时,条件满足迁移发生。l分支与合并:一个入迁移,多个具有互斥条件的出迁移,迁移沿判定条件为真的分支迁移;合并:分支与合并:一个入迁移,多个具有互斥条件的出迁移,迁移沿判定条件为真的分支迁移;合并:将多个具有互斥条件的入迁移合并成一个出迁移,即当有一个入迁移发生时,就会引起出迁移。将多个具有互斥条件的入迁移合并成一个出迁移,即当有一个入迁移发生时,就会引起出迁移。迁移也可以分叉和汇合,分叉形成并发迁移,
39、汇合则对迁移进行同步。迁移也可以分叉和汇合,分叉形成并发迁移,汇合则对迁移进行同步。l开始活动与结束活动:开始活动是活动图的开始,只能有一个,结束活动是活动图的结束,一个开始活动与结束活动:开始活动是活动图的开始,只能有一个,结束活动是活动图的结束,一个活动图可以存在多个结束活动。活动图可以存在多个结束活动。状态图状态图描述系统或类可能有的不同状态及其引起状态迁移的事件,描述系统或类可能有的不同状态及其引起状态迁移的事件,对象的状态决定了对象的行为。对象的状态决定了对象的行为。模型元素模型元素迁移迁移开始状态开始状态结束状态结束状态状态状态l状态:由状态名和活动组成。在状态图中,状态名唯一;活
40、动是在该状态下执行的事件和状态:由状态名和活动组成。在状态图中,状态名唯一;活动是在该状态下执行的事件和动作,是可选项。每个状态有有入口、执行和出口三个标准事件,每个事件对应一个动作。动作,是可选项。每个状态有有入口、执行和出口三个标准事件,每个事件对应一个动作。如果在状态的活动区还画有一个或多个状态图,则称为嵌套状态。如果在状态的活动区还画有一个或多个状态图,则称为嵌套状态。l迁移:由带箭头的实线表示,表示状态的转移,迁移的完整描述为迁移:由带箭头的实线表示,表示状态的转移,迁移的完整描述为“事件(参数)事件(参数)条条件件/动作动作”,迁移可以接判断,判断一入多出,且出迁条件互斥。,迁移可
41、以接判断,判断一入多出,且出迁条件互斥。条件判断条件判断l开始状态与结束状态:开始状态是状态图的开始,对于同一层次状态图而言只能有一个开始状态与结束状态:开始状态是状态图的开始,对于同一层次状态图而言只能有一个(嵌套的状态图可以有自己的开始状态和结束状态),结束状态是状态图的结束,一个状(嵌套的状态图可以有自己的开始状态和结束状态),结束状态是状态图的结束,一个状态图可以有多个结束状态。态图可以有多个结束状态。状态图与活动图的相同点和不同点状态图与活动图的相同点和不同点相同点:相同点:1)图中的建模元素有相似之处。)图中的建模元素有相似之处。2)对系统或对象在生存周期的状态和行为进行描述。)对
42、系统或对象在生存周期的状态和行为进行描述。不同点:不同点:1)状态图中迁移发生时,必须有事件发生或条件满足,而活动图的迁移可以无条件或没)状态图中迁移发生时,必须有事件发生或条件满足,而活动图的迁移可以无条件或没有事件发生。有事件发生。2)状态图对于系统状态的描述可以横跨多个用例,而活动图则是针对同一用例内部的动)状态图对于系统状态的描述可以横跨多个用例,而活动图则是针对同一用例内部的动作执行给出描述。作执行给出描述。构件图构件图构件图描述构件及其相互依赖关系,用于将系统逻辑设计与物理模块进行对应。构件图描述构件及其相互依赖关系,用于将系统逻辑设计与物理模块进行对应。模型元素模型元素构件构件接
43、口接口依赖依赖构件:相对逻辑设计上的类和对象,构件是和物理系统相构件:相对逻辑设计上的类和对象,构件是和物理系统相关的一个概念,不同的语言对构件的定义有所不同,关的一个概念,不同的语言对构件的定义有所不同,UML中的构件含义包括代码文件,也指数据库、动态链中的构件含义包括代码文件,也指数据库、动态链接库、接库、web页面等。页面等。依赖:构件中的关系以依赖的形式表达,可分为编译依赖依赖:构件中的关系以依赖的形式表达,可分为编译依赖和调用依赖两类。和调用依赖两类。接口:构件和接口存在实现和调用两种关系。接口:构件和接口存在实现和调用两种关系。ComponentA.javaB.java 构件构造型
44、:构件构造型:、构件依赖中使用的含义构件依赖中使用的含义部署图部署图部署图描述了构件在物理硬件上的分布情况。部署图描述了构件在物理硬件上的分布情况。模型元素模型元素构件构件Component结点结点关联关联结点:表示某种计算资源的物理对象,包括计算机、外部设备(打印机、读卡器、通信设结点:表示某种计算资源的物理对象,包括计算机、外部设备(打印机、读卡器、通信设备等),结点内部放置构件,表示构件部署在该结点上,同一个结点内部的构件关系用依备等),结点内部放置构件,表示构件部署在该结点上,同一个结点内部的构件关系用依赖表达。赖表达。关联:结点之间的关联表示结点之间物理连接以及其上用的通信协议。关联
45、:结点之间的关联表示结点之间物理连接以及其上用的通信协议。依赖依赖 部署图中的构造型:用来表达结点通讯使用的协议等。部署图中的构造型:用来表达结点通讯使用的协议等。经典案例案例案例1 工厂仓库管理信息管理工厂仓库管理信息管理需求需求 1 1 1 1)对仓库每种零件进行编号(数字)对仓库每种零件进行编号(数字)对仓库每种零件进行编号(数字)对仓库每种零件进行编号(数字)2 2 2 2)对仓库每种零件类型进行命名(字符)对仓库每种零件类型进行命名(字符)对仓库每种零件类型进行命名(字符)对仓库每种零件类型进行命名(字符)3 3 3 3)记录每种零件的价格(浮点)记录每种零件的价格(浮点)记录每种零
46、件的价格(浮点)记录每种零件的价格(浮点)4 4 4 4)零件可以构成组件,组件和零件可进一步构成层)零件可以构成组件,组件和零件可进一步构成层)零件可以构成组件,组件和零件可进一步构成层)零件可以构成组件,组件和零件可进一步构成层 次更高的组件次更高的组件次更高的组件次更高的组件 5 5 5 5)需要查询任一组件的价格。)需要查询任一组件的价格。)需要查询任一组件的价格。)需要查询任一组件的价格。public class Part private String name;private long number;private Double cost;public Part(String _n
47、ame,long _numbr,double _cost)name=_name;number=_number;cost=_cost;public String getName()return name;public long getNumber()return number;public double getCost()return cost;问题问题潜在需求:仓库零件非常多,这样设计的问题有:1、对象属性冗余,造成内存浪费以及维护上的困难。2、仓库中没有零件无法记录零件类型。针对需求针对需求NO1-3的设计的设计public class Part private CatalogueEntry
48、 entry;public Part(CatalogueEntry e)entry=e;ScrewsBolts上述问题的解决方案上述问题的解决方案public class Part private CatalogueEntry entry;public Part(CatalogueEntry e)entry=e;public double cost()return entry.getcost();Part成本查询的相应调整成本查询的相应调整针对需求针对需求NO4的设计:组合表示的设计:组合表示场景描述:场景描述:p3和和p2组成组成a2,a2和和p1组成组成a1潜在需求:一个assembly可
49、以对应多个part或assembly。设计要求:引用上存在多样性现象。Vector链表中的每个单元可引用任何对象,因而Assembly或Part的引用都可以放入。但组合物中加入构件时有两种方案,很明显方案2较好。public class Assembly private Vector components=new Vector();public void addAssemble(Assembly c)components.add(c);public void addPart(Part c)components.add(c);public void add(Object c)components
50、.add(c);方案1方案2多样性上图中的组合关系又可以表示如下:上图中的组合关系又可以表示如下:为解决解决“黑洞黑洞”问题,同,同时也也为了了Vector中中组成成对象能用一象能用一致的接口致的接口进行行调用,用,Assembly以及以及Part必必须具有后天的具有后天的“血血缘”关系(而不是天然的关系(而不是天然的Object的的“血血缘”关系)。因而关系)。因而Object的角色最好由自定的角色最好由自定义的抽象的抽象类Component充当,它有一充当,它有一个抽象接口方法个抽象接口方法cost()。类图语义:凡是Object的子类都可加入Assembly当中。但这样设计后,加入Ass