java基础学习(三):UML统⼀建模语⾔
3.1 UML(统⼀建模语⾔)介绍
⾯向对象软件开发需要经过OOA(⾯向对象分析)、OOD(⾯向对象设计)和OOP(⾯向对象编程)三个阶段。OOA对⽬标系统进⾏分析,建⽴模型,并将之⽂档化;OOD⽤⾯向对象的思想对OOA的结果进⾏细化,得出设计模型。OOA和OOD的分析、设计结果需要统⼀的符号来描述、交流并记录,UML就是这种⽤于描述、记录OOA和OOD结果的符号表⽰法。
如图,UML2.0⼀共包括13种正式图形:活动图(activity diagram)、类图(calss diagram)、通信图(communication diagram)、组件图(component diagram)、复合结构图(composite structure diagram)、部署图(deployment diagram)、交互概观图(interactive overview diagram)、对象图(object diagram)、包图(package diagram)、顺序图(sequence diagram)、状态机图(state machine diagram)、定时图(timing diagram)、⽤例图(use case diagram)。
真的太多了,谁设计的,头⽪发⿇。其实很少有⼀个软件系统在分析、设计阶段对每个细节都使⽤13种图形来表现。记住⼀点:不要把UML表⽰法当成是⼀种负担,⽽应该把它当成⼀种⼯具,⼀种⽤于描述、记录软件分析设计的⼯具。最常⽤的UML图包括例图、类图、组件图、部署图、顺序图、活动图和状态机图等。
3.1.1 ⽤例图
⽤例图⽤于描述系统提供的系列功能,⽽每个⽤例则代表系统的⼀个功能模块。⽤例图的主要⽬的是帮助开发团队以⼀种可视化的⽅式理解系统的需求功能,⽤例图对系统的实现不做任何说明,仅仅是系统功能的描述。
⽤例图包括⽤例(以⼀个椭圆表⽰,⽤例的名称放在椭圆的中⼼或椭圆下⾯)、⾓⾊(Actor,也就是与系统交互的其他实体,以⼀个⼈形符号表⽰)、⾓⾊和⽤例之间的关系(以简单的线段来表⽰),以及系统内⽤⼒之间的关系。⽤例图⼀般表⽰出⽤例的组织关系——要么是整个系统的全部⽤例,要么是完成具体功能的⼀组⽤例。
⽤例图通常⽤于表达系统或者系统范畴的⾼级功能。如图所⽰,很容易看出该系统所提供的功能。这
个系统允许注册⽤户登录、发帖和回复,其中发帖和回复需要依赖于登录;允许管理员删除其他⼈的帖⼦,删帖也依赖于登录。
⽤例图主要在需求分析阶段使⽤,主要⽤于描述系统实现的功能,⽅便与客户交流,保证系统需求的⽆ 性,⽤实例图表⽰系统外观,不要指望⽤例图和系统的各个类之间有任何联系 不要把⽤例做得过多,过多的⽤例将导致难以阅读,难以理解:尽可能多地使⽤⽂字说明。
3.1.2 类图
类图是最古⽼、功能最丰富、使⽤最⼴泛的UML图。类图表⽰系统中应该包含哪些实体,各实体之间如何关联;换句话说,它显⽰了系统的静态结构,类图可⽤于表⽰逻辑类,逻辑类通常就是业务⼈员所谈的⾷物种类。
类在类图上使⽤包含三个部分的矩形来描述,最上⾯的部分显⽰类的名称,中间部分包含类的属性,最下⾯的部分包含类的⽅法。
特别好理解这个,类图除可以表⽰实体的静态内部结构之外,还可以表⽰实体之间的相互关系。类之间有三种基本关系:关联(包括聚合、组合)
泛化(与继承同⼀个概念)
依赖
1. 关联
客观世界中两个实体之间总是存在⼀定的关系。当两个实体抽象到软件系统中时,两个类之间必然存在关联,关联具有⼀定的⽅向性。如果仅能从⼀个类单⽅向地访问另⼀个类,则被称为单向关联,;如果两个类可以互相访问对象,则被称为双向关联。⼀个对象能访问关联对象的数⽬被称为多重性,例如,建⽴学⽣和⽼师之间的单向关联,则可以从学⽣访问⽼师,但从⽼师不能访问学⽣关联使⽤⼀条实线来表⽰,带箭头的实线表⽰单向关联。
关联关系包括两种特例:聚合和组合,它们都有部分和整体的关系,但通常认为组合⽐聚合更加严格。当某个实体聚合成另⼀个实体时,该实体还可以同时是另⼀个实体的部分,例如,学⽣既可以是篮球俱乐部的成员,也可以是书法俱乐部的成员 当某个实体组合成另 个实体时,该实体则不能同时是⼀个实体的部分。聚合使⽤带空⼼菱形框的实线表⽰,组合则使⽤带实⼼菱形框的实线表⽰。
如图,Teacher和Student之间的关联关系:他们是双向关系,⽽且使⽤了多重性来表⽰Teacher和Student之间存在1:N的关联关系(1…*表⽰可以⼀个到多个),即⼀个Teacher实体可以有1个或多个关联的Student实体;Student和BasketBallClub存在整合关系,即⼀个或多个Student实体可以聚合成⼀个BasketBallClub实体;⽽Arm(⼿臂)和Student之间存在组合关系,2个Arm实体组合成⼀个Student实体。
2. 泛化
泛化与继承是同⼀个概念,都是指⼦类是⼀种特殊的⽗类,类与类之间的继承关系是⾮常普遍的,继承关系使⽤带空⼼三⾓形的实践表⽰。
零基础学java编程 如图可以看出,Student是Person的⼦类,即Student类是⼀种特殊的Person类。
3. 依赖
如果⼀个类的改动会导致另⼀个类的改动,则称两个类之间存在依赖。依赖关系使⽤带箭头的虚线表⽰,其中箭头所指向被依赖的实体。依赖的常见可能原因如下:
(1)改动的类将消息发送给另⼀个类
(2)改动的类以另⼀个类作为数据部分
(3)改动的类以另⼀个类作为操作参数
通常⽽⾔,依赖是单向的,尤其是当数据表现和数据模型分开设计时,数据表现依赖于数据模型。
其中当DefaultTableModel发⽣改变的时候,JTable将相应地发⽣改变。记住,跟我们理解有点反向,JTable是受改变⽅。3.1.3 组件图
对于现代的⼤型应⽤程序⽽⾔,通常不只是单独⼀个类或单独⼀组类所能完成的,通常会由⼀个或多个可部署的组件完成。对Java程序⽽⾔,可复⽤的组件通常打包成⼀个JAR、WAR等⽂件;对C/C++应⽤⽽⾔,可复⽤的组件通常是⼀个函数库,或者是⼀个DLL(动态链接库)⽂件。
组件图提供系统的物理视图,它的⽤途是显⽰系统中的软件对其他软件组件(例如,库函数)的依赖关系。组件图可以在⼀个⾮常⾼的层次上显⽰,仅显⽰系统中的粗粒度的软件,也可以在组件包层次上显⽰。
组件图通常包含组件、接⼝和Port等图元,UML使⽤带两个矩形加⼀个⼤矩形的符号表⽰(如下图所⽰),使⽤圆圈代表接⼝,使⽤位于组件边界上的⼩矩形代表Port。
组件的接⼝表⽰它能对外提供的服务规范,这个接⼝通常有两种表现形式。
(1)⽤⼀条实线连接到组件边界的圆圈表⽰
(2)使⽤位于组件内部的圆圈表⽰
组件除可以对外提供服务接⼝之外,组件还可能依赖于某⼀个接⼝,组件依赖于某个接⼝使⽤⼀条带半圆的实线来表⽰。
如图所⽰,本系统绘制电⼦购物平台的⼏个核⼼组件,其中Order组件提供OrderQuery接⼝,该接⼝允许Dispatch组件查询系统中的订单及其状态,Order组件⼜需要依赖于Customer组件的CustomerLookup接⼝,通过该接⼝查询系统中的顾客信息;Order组件也需要依赖于Inventory组件的ProductQuery接⼝,通过该接⼝查询系统中的产品信息。
3.1.4 部署图
现代的软件⼯程早已超出早期的单机程序,整个软件可能是跨国家、跨地区的分布式软件,软件的不同部分可能需要部署在不同地⽅、不同平台上。部署图⽤于描述软件系统如何部署到硬件环境中,它的⽤途是显⽰软件系统不同的组件将在何处物理允许,以及它们将如何彼此通信。
因为部署图是对物理运⾏情况进⾏建模,所以系统的⽣产⼈员就可以很好的利⽤这种图来进⾏安装、部署软件系统。
部署图中的符号包括组件图中所使⽤的符号元 ,另外还增加了节点的概念:节点是各种计算资源的通⽤名称,主要包括处理器和设备两种类型,两者的区别是处理器能够执⾏程序的硬件构件(如计算机主机) ,⽽设备是 种不具备计算能⼒的硬件构件(如打印机 UML 中使⽤ 维⽴⽅体来表⽰节点,节点的名称位于⽴⽅体的顶部 17 显⽰了 个简单的部署图。
整个应⽤分为5个组件:Student、Administrator、应⽤持久层、Student数据库和UI界⾯组件,部署图准确地表现了各组件之间地依赖关系。其中普通客户端⽆须部署任何组件,直接使⽤客户端浏览器即可 管理者客户机上需要部署 UI 界⾯ 应⽤服务器上需要部署
Student Administrator应⽤持久层 个组件:⽽数据库服务器上需要部署 Student 数据库。
3.1.5 顺序图
顺序图显⽰具体应⽤(或者是⽤例地⼀部分)的详细流程,并且显⽰流程中不同对象之间的调⽤关系,同时还可以很详细地显⽰对不同对象地不同调⽤。顺序图描述了对象之间的交互(顺序图和通信图都被称为交互图),重点在于描述消息及时间顺序。
顺序图有两个维度:垂直维度,以发⽣的时间顺序显 消息 调⽤的序列;⽔平维度,显⽰消息被发送到的对象实例 顺序图的关键在于对象之间的消息,对象之间的信息传递就是所谓的消息发送,消息通常表现为对象调⽤另 个对象的⽅法或⽅法的返回值,发送者和接收者之间的箭头表⽰消息。
顺序图的绘制⾮常简单 顺序图的顶部每个框表⽰每个类的实例(对象) 框中的类实例名称和类名称之间⽤冒号或空格来分隔 ,例如myReportGenerator : ReportGenerator 如果某个类实例向另 个类实例发送⼀条消息,则绘制 条指向接收类实例的带箭头的连线 ,并把消息/⽅法的名称放在连线上⾯。
对于某些特别重要的消息,还可以绘制 条带箭头的指向发起类实例的虚线上, 将返回值标注在虚线绘制带返回值的信息可以使得序列图更易于阅读。
当绘制顺序图时,消息可以向两个⽅向扩展,消息穿梭在顺序图中,通常应该把消息发送者与接收者相邻摆放,尽量避免消息跨越多个对象。对象的激活期不是其存在的时间,⽽是它占据 PU 的执⾏时间,绘制顺序图时,激活期要精确。
阅读顺序图也⾮常简单,通常从最上⾯的消息开始(也就是时间上最先开始的消息) ,然后沿消息⽅向依次阅读。
PS:与顺序图相似的还有通信图,⼀般来说,通信图可以描述的内容,顺序图都可以描述,但是顺序图⽐通信图多了时间观念。
3.1.6 活动图
活动图和状态机图都被称为演化图,其区别和联系如下:
活动图:⽤于描述⽤例内部的活动或⽅法的流程,如果除去活动图中的并⾏活动描述,它就变成流程图。
状态机图:描述某⼀对象⽣命周期中需要关注的不同状态,并会详细描述刺激对象状态改变的事件,以及对象状态改变时所采取的动作。
演化图的5要素如下:
状态 :状态是对象响应事件前后的不同⾯貌,状态是某个时间段对象所保持的稳定态,⽬前的软件计算都是基于稳定态的,对象的稳定态是对象的固有特征, 个对象的状态 般是有限的有限状态的对象是容易计算的,对象的状态越多,对象的状态迁移越复杂,对象状态可以想象成对象演化过程中的快照。
事件 :来⾃对象外界的剌激,通常的形式是消息的传递,只是相对对象⽽⾔发⽣了事件。事件是对象状态发⽣改变的原动⼒。
动作:动作是对象针对所发⽣事件所做的处理,实际上通常表现为某个⽅法被执⾏。
活动:活动是动作激发的后续系统⾏为
条件:条件指事件发⽣所需要具备的条件
对于激发对象状态改变的事件,通常有如下两种类型:
内部事件:从系统内部激发的事件,⼀个对象的⽅法( 动作)调⽤(通过事件激活)另 个对象的⽅法(动作)
外部事件 从系统边界外激发的事件,例如⽤户的⿏标、键盘动作。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论