《Java面向对象程序设计(第2版)第17章课件.ppt》由会员分享,可在线阅读,更多相关《Java面向对象程序设计(第2版)第17章课件.ppt(65页珍藏版)》请在三一办公上搜索。
1、统一建模语言UML,统一建模语言UML,UML模型系统体系结构,UML: Unified Modeling Language,Unified:,UML模型系统体系结构 UML: Unified Mo,Booch,Rumbaugh,Jacobson,UML由世界著名的面向对象技术专家G. Booch、J. Rumbaugh、I. Jacobson发起,在Booch方法,OMT方法和OOSE方法基础上,广泛征求意见,汲众家之长,几经修改而完成的。,1997年被OMG(Object Management Group)采纳为业界标准。,BoochRumbaughJacobson UML由世,Model
2、ing: 建模,UML用于建模,即表达模型设计,而且自身拥有四层体系结构。,模型是系统一个抽象的概括,强调系统设计特定的重要方面,同时忽略大量底层的编程细节。而建模就是为了捕捉、描述系统的核心。同一研究对象不同人建立的模型可能同样好或同样差。,Modeling: 建模UML用于建模,即表达模型设计,而且,Language: 是一种可视化建模语言,有语法和语义,消除了自然语言的歧义。,虽然与具体面向对象语言无关,但学会UML的关键之处是将UML模型与具体代码实现相互结合;,UML model,Source code,Object structures,Executing program,UML,
3、Programming language,Abstract view of,Abstract view of,Specifies,Specifies,模型与代码之间的关系,Language: 是一种可视化建模语言,有语法和语义,消除,四层元模型体系结构,Run-time Instance运行实例层,Model模型层,Metamodel元模型层,Metametamodel元元模型层,Class,person1:Person,Person,Tool,Association,Infrastructure Library:Core:Constructs:Class,Infrastructure Lib
4、rary:Core:Abstraction:Relationships,规定元模型的语言,规定模型的语言,定义描述语义域的语言,四层元模型体系结构Run-time Instance运行实例,UML的主要特点:,建模设计上的标准化与可视化的结合 建模设计上的语言无关性。建模设计上标准性与扩展性的统一。,UML的主要特点: 建模设计上的标准化与可视化的结合,UML视图(View):描述软件系统的不同方面,结构视域,实现视域,行为视域,环境视域,用户视域,4+1视图模型,不同开发者对视图的关心角度,UML视图(View):描述软件系统的不同方面所关心视图,UML图(Diagram):用于描述模型,是
5、模型元素的一个集合单元。,敏捷软件原则:需要时再添加,UML的主要图类型,UML图(Diagram):用于描述模型,是模型元素的一,活动图,用例图,协作图,对象图,类图,状态图,序列图,Workflow,Scenarios,Inter-class behavior,Inter-class behavior,Structure,Structure,Interaction equence between objects,UML图在设计过程中的演化关系,发现类方法:名词短语;公共类;用例导出;CRC(类、职责、协作)提炼类方法:系统范围内;清晰目的;不能孤立;有属性;类功能单一;,Associati
6、on&Generalization,Structure,活动图用例图协作图对象图类图状态图序列图WorkflowSc,UML图的类型划分,TypeDiagram用例模型图用例图静态模型图(状态模型),UML视图与图对应关系,UML视图与图对应关系图视图主要概念Use case d,B,A,B,A,Use case,B,A,用例图主要模型元素及其含义,参与者(角色),用例,包含关系,扩展关系,关联关系,泛化关系,参与者是针对用例所扮演的角色,可以人也可以是事物。,用例是功能,功能是完整的、外部可见的、相互独立的。完整含义:用例的执行逻辑必须完整,即有主要执行的流程,也有各种次要流程和意外处理流程
7、。外部可见的:不是内部功能,是参与者可以感知的。相互独立的:用例开始执行到最终结束不依赖于其他用例,是参与者和用例之间的通信渠道,如果没有箭头,则代表通信是双向的。,是用例与用例的一种依赖关系:它允许被包含用例中的公共行为从包含用例中分解出来。如B用例包含A用例,则意味着B用例要执行,必须先执行A用例。,是用例与用例的关系:B用例扩展A用例,表示A用例在某种条件满足下,可以执行B用例。因而B用例是A用例的额外功能;另外当B用例的执行可以由A用例而来,也可以由其他途径而来时(没有包含那种强制含义),B用例和A用例也是一种扩展关系。,是用例与用例、参与者与参与者之间的一种继承关系,表示一个用例(角
8、色)将继承另一用例(角色)的所有功能(语义含义)。,BABAUse c,用例图是对需求中系统功能的规格说明(不对系统约束进行说明),并被作为验收测试的依据。用例图模型的建立过程:确定参与者和用例;确定参与者与用例之间的关系,确定参与者之间的关系,确定用例之间的关系;确定需求边界,在用例图中用矩形框表示;对用例功能进行描述,形成文档。,【例】包含二个角色,四个用例。其中B用例和A用例之间的关系为包含,即B用例执行前必须先执行A用例;C和A的关系为扩展,即A用例在某种条件满足下,可以扩展出C用例;D用例和A用例的关系为继承,表明D将拥有A用例的所有功能。参与者1和参与者2之间的关系为继承,表示参与
9、者2除了可以驱动A、B用例外,还可以驱动参与者1的所有用例,即图中的D用例。,用例图是对需求中系统功能的规格说明(不对系统约束进行说明),,用例规格说明格式,用例规格说明格式用例说明要素说明简要描述概述参与者涉及的参与,表示类及其关联关系的图,类图,长短式;抽象类和具体类表示;类多重性表示;封装表示,Component,主要的模型元素:类、关联、泛化、依赖关系、接口、包。,表示类及其关联关系的图+ display()+ numCan,类中属性和操作的类范围和对象范围,+ Canister()+ display()- getNumOpenSlots()+ setStatus(),+ numCan
10、isters: int - numWafers: int- size: float,Canister,静态属性,构造方法,静态方法,此三者专属于类,其他属性和方法虽然在类中定义,实际为对象而服务。,类中属性和操作的类范围和对象范围+ Canister()+,对象图为类图实例,是类图的一个快照,对象图,长式,属性=值,对象名:类名,对象名:类名,短式,类图和对象图的比较,对象图为类图实例,是类图的一个快照对象图长式属性=值对象名:,类是数据类型,UML在表示所有语言数据类型上不够;用构造型(stereotype)进行数据类型(模型元素)的扩展。,基本int数据类型,MyInterface,Jav
11、a语言的接口,用户自定义枚举类型,类是数据类型,UML在表示所有语言数据类型上不够;typ,泛化:抽象类与继承关系的UML表示 泛化构造型:、 抽象类在编程上的可替换(Interchageable)与多态性,Account ac;ac = new CurrentAccount();System.out.println(ac.getBalance();ac = new DepositAccount();System.out.println(ac.getBalance();,可替换性,多态性,泛化:抽象类与继承关系的UML表示CurrentAccoun,关联(一): 关联名、关联方向、关联角色、关
12、联多重性,class Person Compony employer; . . . . .,class Company Person employee; . . . . .,类A,类B,角色a,角色b,关联名,关联多重性,关联多重性,关联(一): 关联名、关联方向、关联角色、关联多重性类A类,关联(二)实现:类图为关联,对象图为链接,代码实现为引用;,类图中的关联关系将决定对象图、序列图中对象的交互关系,关联(二)实现:类图为关联,对象图为链接,代码实现为引用;类,用代码表示类图多重性含义 (一),class A B b; . . . . .,class B A a; . . . . .,A、
13、B两个类对象可以引用对方也可以不引用,总之可自由选择;,用代码表示类图多重性含义 (一),用代码表示类图多重性含义 (二),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; voi
14、d setA(A _a) if(_a=null)/throw NullLinkError a=_a; ,先产生B类对象,再产生A类对象,只要A类对象产生时,二者就构成了相互引用;如果产生对象的方式反过来,如法炮制。,用代码表示类图多重性含义 (三),关联(三):关联的元数(一元关联或自关联或递归关联、二元关联、三元关联),关联(三):关联的元数?对象存在一元链接和三元链接吗Serv,MailMessage,Attachment,*,composition,*,Computer,Processor,*,1,aggregation,关联(四):聚合(部分是整体的一部分) 组合(整体拥有部分),Ma
15、ilMessageAttachment*composit,关联(五):关联约束,委员会,人,subset,*,1,成员,主席,主席是成员中的一员:委员会有一个成员的引用集合,有一个“主席引用”,主席对象被“主席引用”引用外,在成员引用集合中也存在一个引用指向主席对象。,多边形,线段,*,ordered,多边形中存在一个线段的引用集合,多个线段对象的引用是以有序的方式加入集合当中。,购房合同,人,公司,xor,购房合同的主体只能有一个,要么是人,要么是公司。,关联(五):关联约束约束关键词含义subset一个关联是,老板:人,工人1:人,工人2:人,A:公司,老板:人,工人1:人,工人2:人,A
16、:公司,B:公司,约束条件下的对象链接图,没有约束条件下的可能存在的对象链接关系图,人公司雇主0.1*工人*0.1老板人.雇主=人.老板.雇,关联(六):关联类;产生条件(多重性中的多对多;将对应关系进行存储 ),class 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
17、 st) registrations.addElement(new Registration(st); ,关联(六):关联类;产生条件(多重性中的多对多;将对应关系进,关联(七):关联与类的泛化,CustomerAccountCurrentAccountD,class Directory private Hashtable theFiles; . . . . .,关联(八):受限(qualified)关联的表示及实现;,name是theFiles中的Key,Directory,File,*,Directory Filename0.1关联(八):受,interface,MyClass,MyInt
18、erface,interface MyInterface . . . . class MyClass implements MyInterface . . . . .,MyClass,MyInterface,接口表示及实现,interfaceMyClassimplementati,class MyDependentClass . . . . . void myFunction1( MyReferencedClass r ) . . MyReferencedClass myFunction2( ) . . void myFunction3( ) MyReferencedClass m ,depe
19、ndence(reference to a class),parameter,or return type,or local variable type,MyDependentClass,MyReferencedClass,依赖的表示和实现,class MyDependentClassdependen,依赖的表示和实现,MyClass,MyInterface,UseClass,class UseClass void myFunction(MyInterface mi) ,Student,jack:Student,依赖的表示和实现MyClassMyInterfaceUseC,包及包图,包是UML
20、的模型元素之一,是一种分组机制,把一些模型元素组织成语义上相关的组。包可以包含类、接口、组件、结点和其他包,包之间有引入、依赖、继承的关系。,包图用来描述系统模型的体系结构层次, 一个包就是一个子系统,包图是设计中的概念,在建模时起到归类的作用,对于实际系统没有意义,不需要转化成可执行的系统。,包图中涉及到的注解到包名边的构造型主要有: 系统模型 子系统模型是其他包的一个访问接口视图包另一个包的代理由模式组成的包,包名,可含有包路径包层次,A包在类定义层次使用了B包继承了D包,在对象层次调用了C包中的对象。,包及包图包是UML的模型元素之一,是一种分组机制,把一些模型,顺序图(序列)图,顺序图
21、又称为序列图,描述对象之间动态的消息交互关系,体现对象间消息传递的时间顺序。图顶层的水平轴为交互的对象,对象下的虚线代表对象生命线,虚线上的矩形框表示对象接受消息后被激活期,代表方法的执行,对象间消息交互从图的最顶端开始,自上向下体现的是消息交互的时间顺序。,Client端是消息的发送端,拥有myObject的引用,Operation()是MyClass的方法,该方法中有myClass1对象的引用,Operation1()是MyClass1的方法,a是MyClass的声明 a.Operation(),b是MyClass1声明 b.Operation1(),顺序图(序列)图顺序图又称为序列图,描
22、述对象之间动态的消息交,交互图中的消息,1)消息格式:序号条件重复次数回送值:=操作名(参数表),2)消息四种类型:简单消息、同步消息、异步消息和返回消息,消息的类型,内部消息的表示方法,3)内部消息和循环消息表示方法,4)消息中的构造型:创建消亡用同步消息,、,交互图中的消息1)消息格式:序号条件重复次数回,建立顺序图步骤,1.确定交互的类对象2.在序列图左上角画一个矩形框代表该对象,使用 UML标记方法: object:Class3. 画一个延长矩形框在该对象下面表示一个操作的执行。4. 画一个箭头指向右边。,myObject:MyClass,myObject1:MyClass1,oper
23、ation1(),建立顺序图步骤1.确定交互的类对象myObjectmyObj,合作图(协作)图,用于描述相互合作的对象间的交互关系,模型元素由类元或对象、链接、消息构成。,类元角色:描述对象在交互中扮演的角色,winner:Account,链接:用实线表示两个类元(对象)之间的链接,用构造型表明链接的种类,合作图(协作)图用于描述相互合作的对象间的交互关系,模型元素,消息:格式同顺序图,合作图中的循环消息表示法,对象的创建与撤销,new:合作中新产生的对象或链接destroy:合作中销毁的对象或链接transient:合作中产生又销毁的对象或链接,消息构造型,链接撤销,对象撤销,消息:格式同
24、顺序图:Component*Client:Ass,顺序图和合作图的相互转化,顺序图和合作图的相互转化,活动图,活动图用于描述系统需求各用例内活动的执行顺序或类方法中主要活动的执行流程。,活动:活动由子活动或动作构成,动作是不可再分的活动,其执行不能被打断,动作不能象活动那样拥有入口动作、出口动作和内部迁移,活动和动作都拥有相同的UML表示符号。,模型元素,活动,迁移,分支与合并,开始活动,结束活动,分叉,汇合,迁移:由带箭头的实线表示,表示动作状态的转移,当迁移上无条件时,称为无条件动作流,当有条件时,条件满足迁移发生。分支与合并:一个入迁移,多个具有互斥条件的出迁移,迁移沿判定条件为真的分支
25、迁移;合并:将多个具有互斥条件的入迁移合并成一个出迁移,即当有一个入迁移发生时,就会引起出迁移。迁移也可以分叉和汇合,分叉形成并发迁移,汇合则对迁移进行同步。,开始活动与结束活动:开始活动是活动图的开始,只能有一个,结束活动是活动图的结束,一个活动图可以存在多个结束活动。,活动图活动图用于描述系统需求各用例内活动的执行顺序或类方法中,状态图,描述系统或类可能有的不同状态及其引起状态迁移的事件,对象的状态决定了对象的行为。,模型元素,迁移,开始状态,结束状态,状态,状态:由状态名和活动组成。在状态图中,状态名唯一;活动是在该状态下执行的事件和动作,是可选项。每个状态有有入口、执行和出口三个标准事
26、件,每个事件对应一个动作。如果在状态的活动区还画有一个或多个状态图,则称为嵌套状态。,迁移:由带箭头的实线表示,表示状态的转移,迁移的完整描述为“事件(参数)条件/动作” ,迁移可以接判断,判断一入多出,且出迁条件互斥。,条件判断,开始状态与结束状态:开始状态是状态图的开始,对于同一层次状态图而言只能有一个(嵌套的状态图可以有自己的开始状态和结束状态),结束状态是状态图的结束,一个状态图可以有多个结束状态。,状态图描述系统或类可能有的不同状态及其引起状态迁移的事件,模,状态图与活动图的相同点和不同点,相同点: 1)图中的建模元素有相似之处。 2)对系统或对象在生存周期的状态和行为进行描述。,不
27、同点: 1)状态图中迁移发生时,必须有事件发生或条件满足,而活动图的迁移可以无条件或没有事件发生。 2)状态图对于系统状态的描述可以横跨多个用例,而活动图则是针对同一用例内部的动作执行给出描述。,状态图与活动图的相同点和不同点相同点:不同点:,构件图,构件图描述构件及其相互依赖关系,用于将系统逻辑设计与物理模块进行对应。,模型元素,构件,接口,依赖,构件:相对逻辑设计上的类和对象,构件是和物理系统相关的一个概念,不同的语言对构件的定义有所不同,UML中的构件含义包括代码文件,也指数据库、动态链接库、web页面等。依赖:构件中的关系以依赖的形式表达,可分为编译依赖和调用依赖两类。接口:构件和接口
28、存在实现和调用两种关系。,构件构造型:、 、,构件依赖中使用的含义,构件图构件图描述构件及其相互依赖关系,用于将系统逻辑设计与物,部署图,部署图描述了构件在物理硬件上的分布情况。,模型元素,构件,结点,关联,结点:表示某种计算资源的物理对象,包括计算机、外部设备(打印机、读卡器、通信设备等),结点内部放置构件,表示构件部署在该结点上,同一个结点内部的构件关系用依赖表达。关联:结点之间的关联表示结点之间物理连接以及其上用的通信协议。,依赖,部署图中的构造型:用来表达结点通讯使用的协议等。,部署图部署图描述了构件在物理硬件上的分布情况。模型元素构件C,经典案例,经典案例,案例1 工厂仓库管理信息管
29、理需求,案例1 工厂仓库管理信息管理需求1)对仓库每种零件进行编,public class Part private String name; private long number; private Double cost; public Part(String _name,long _numbr,double _cost) name =_name; number=_number; cost=_cost; public String getName() return name; public long getNumber() return number; public double getC
30、ost() return cost; ,问题,潜在需求:仓库零件非常多,这样设计的问题有:1、对象属性冗余,造成内存浪费以及维护上的困难。2、仓库中没有零件无法记录零件类型。,针对需求NO1-3的设计,问题潜在需求:仓库零件非常多,这样设计的问题有:针对需求NO,public class Part private CatalogueEntry entry; public Part(CatalogueEntry e) entry = e; ,Screws,Bolts,上述问题的解决方案,public class Part private CatalogueEntry entry; public
31、Part(CatalogueEntry e) entry = e; public double cost() return entry.getcost(); ,Part成本查询的相应调整,public class Part ScrewsBolts,针对需求NO4的设计:组合表示,场景描述:p3和p2组成a2,a2和p1组成a1,潜在需求:一个assembly可以对应多个part或assembly。设计要求:引用上存在多样性现象。,Vector链表中的每个单元可引用任何对象,因而Assembly或Part的引用都可以放入。但组合物中加入构件时有两种方案,很明显方案2较好。,public clas
32、s 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.add(c); ,方案1,方案2,多样性,针对需求NO4的设计:组合表示场景描述:p3和p2组成a2,,上图中的组合关系又可以表示如下:,为解决“黑洞”问题,同时也为了Vector中组成对象能用一致的接口进行调用,Ass
33、embly以及Part必须具有后天的“血缘”关系(而不是天然的Object的“血缘”关系)。因而Object的角色最好由自定义的抽象类Component充当,它有一个抽象接口方法cost()。,类图语义:凡是Object的子类都可加入Assembly当中。但这样设计后,加入Assembly当中的对象都失去原来的特征,只剩Object的特征,且因为集合结构Vector中对象引用多样性,无法进行准确还原, 好似“黑洞”。,针对需求NO5的设计:组合物成本查询,上图中的组合关系又可以表示如下:为解决“黑洞”问题,同时也为,最终的类图和对应的代码,遍历,动态绑定,发统一消息,抽象类的定义保证了cost
34、()接口在子类定义和对象调用中的一致性,最终的类图和对应的代码public abstract cla,案例1 总结,案例1 总结1)当对象数量较大时,可以将属性信息放置在另一个,案例2图形编辑器需求,图形编辑器用例图,图形编辑器界面,案例2图形编辑器需求图形编辑器用例图图形编辑器界面,1)软件初始启动:处于创建长方形的状态;编辑区域默认产生第一个编辑图层;图形编辑提示区域提示为“第一页”。2)创建图形:创建图形用例:用于创建直线、椭圆、矩形。用户首先选择创建图形的类型,之后将鼠标移至图形编辑区域,按下鼠标确定起始点,之后拖动鼠标,在绘图区域动态绘出相应图形,当鼠标释放时,在起始和终止点所包含的
35、长方形区域内,将图形绘制在当前的图层上。3)选择图形:主事件流是,对已创建的图形进行选择,可单选也可多选,选择的图形应标出选中状态。当图形嵌套时,在其内部点击,可按图形创建的先后依次进行选择;备选流:如果要取消当前的选择状态,可在图形编辑层中的任一空白点点击,便可取消原先的所有选择状态。4)删除图形:前置条件为选择要删除的图形,再点击“删除元素”按钮,可删除选择的所有图形。,1)软件初始启动:处于创建长方形的状态;编辑区域默认产生第一,5)改变图形主事件流是,在选择的图形中点击图形的控制点并移动,进行图形尺寸的改变。备选流:可对图形尺寸直接放大缩小。 6)移动图形:主事件流是选择图形之后拖动图
36、形至指定位置;备选流:当整个图形编辑器移动时,编辑器中所有图形也相应移动。7)创建图层:主事件流是可在图形编辑区域进行新图层的创建,新图层创建后,自动为当前图层,在其上可进行图形创建和管理工作。新图层产生的同时,图形编辑层提示给出编号提示。备选流:如果产生的图层超过16个,则不能再产生新的图层,同时,图形编辑层提示给出相应的提示信息。后置条件:新图层的处于创建“长方形”状态。 8)管理图层:主事件流是可在图形编辑区域针对多个图层进行切换选择,并将选择的图层作为当前层,在其上可进行图形创建和管理工作。切换时,图形编辑层提示给出当前层的编号提示。备选流:如果当前图层为最后一个图层,则再切换时,当前
37、图层为第一页图层。后置条件:当图层切换时,图层的操作状态重新处于创建“长方形”状态。,5)改变图形主事件流是,在选择的图形中点击图形的控制点并移动,Panel,DiagramEditorControls,Button,Choice,DiagramEditorApplet,Applet,Canvas,Tool,DiagramEditor,Diagram,CreationTool,SeletionTool,Element,LineTool,EllipseTool,WrectangleTool,Ellipse,Wrectangle,Line,Label,类图,1,1,*,current,1,1,1,1,1,1,1,*,0.1,subset,subset,selected,tool,1,resizing,owns,cur_own,select,cur_select,PanelDiagramEditorControlsButt,序列图:刷新,序列图:刷新,创建图形以创建矩形为例,创建图形以创建矩形为例,序列图:移动图形,序列图:移动图形,序列图:改变图形尺寸,序列图:改变图形尺寸,状态图,选择图形状态图,创建图形状态图,状态图选择图形状态图创建图形状态图,序列图:删除图形,序列图:删除图形,