UML是一U通用的徏模语aQ其表达能力相当的强Q不仅可以用于Y件系l的建模Q而且可用于业务徏模以及其它非软gpȝ建模。UMLl合了各U面向对象方法与表示法的优点Q至提出之日起就受到了广泛的重视q得C工业界的支持?
本章按视图、模型元素、图以及公共机制依次介绍UML的构造和基本元素Q以使得读者对UML有一个M了解Q其具体l节在后箋章节中详l描q?/p>
d工具QeDraw、jude
Ƣ迎大家l箋支持和关注我的博客:
http://blog.csdn.net/IBM_hoojo
也欢q大家和我交、探讨IT斚w的知识?/p>
emailQ?a href="mailto:hoojo_@126.com">hoojo_@126.com
如果你觉得本文不错的话,请你点击屏幕右下方的
。如果你以后会用到这文章的或觉得以后要重新阅的话Q你可以点击屏幕右下角的
。如果你觉得我的博文不错或是惛_W一旉看到我的动态的话,你可以点dq右下角
。如果你惌点什么的话,你可以点dq右下方?a >
。如果你都点q了Q那真的太谢谢你了,兄弟太支持了。此Ӟ或许你可以点?a >
按钮Q然后看看博文的Dl箋览其他文章?/p>
1. UML的组?/font>
UMLp?View)、图(Diagram)?a name="OLE_LINK13">模型元素(Model Element)?a name="OLE_LINK14">通用机制(General Mechanism){几个部分组成?
a) 视图(View)Q?是表辄l的某一斚w的特征的UML建模元素的子集,由多个图构成Q是在某一个抽象层上,对系l的抽象表示?
b) ?Diagram)Q?是模型元素集的图形表C,通常是由弧(关系Q和点Q其他模型元素)怺q接构成的?
c) 模型元素(Model Element)Q代表面向对象中的类、对象、消息和关系{概念,是构成图的最基本的常用概c?
d) 通用机制(General Mechanism)Q用于表C其他信息,比如注释、模型元素的语义{。另外,UMLq提供扩展机Ӟ使UML语言能够适应一个特D的ҎQ或q程Q,或扩充至一个组l或用户?
2. UML视图的分c?/font>
UML是用来描q模型的Q用模型来描q系l的机构或静态特征,以及行ؓ或动态特征。从不同的视角ؓpȝ构架建模QŞ成系l的不同视图?
(1) 用例视图(Use Case View)Q?/strong>从用L角度看到的或需要的pȝ功能Q是被称为参与者的外部用户所能观察到的系l功能的模型图?
(2) 逻辑视图(Logical View)Q?/strong>展现pȝ的静态或l构l成及特征,也称为结构模型视?Structural Model View)或静态视?Static View)?
(3) q发视图(Concurrent View)Q?/strong>体现了系l的动态或行ؓ特征Q也UCؓ行ؓ模型视图(Behavioral Model View)或动态视?Dynamic View)?
(4) lg视图(Component View)Q?/strong>体现了系l实现的l构和行为特征,也称为实现模型视?Implementation Model View)?
(5) 配置视图(Deployment View)Q?/strong>体现了系l实现环境的l构和行为特征,也称为环境模型视?Environment Model View)或物理视?Physical View)?
视图是由囄?/b>的,UML提供9U不同的图:
(1) 用例?/a>(Use Case Diagram)Q描q系l功能;
(2) cd(Class Diagram)Q描q系l的静态结构;
(3) 对象?Object Diagram)Q描q系l在某个时刻的静态结构;
(4) lg?Component Diagram)Q描qC实现pȝ的元素的l织Q?
(5) 配置?Deployment Diagram)Q描qC环境元素的配|,q把实现pȝ的元素映到配置上;
(6) 状态图(State Diagram)Q描qCpȝ元素的状态条件和响应Q?
(7) 时序?Sequence Diagram)Q按旉序描述pȝ元素间的交互Q?
(8) 协作?Collaboration Diagram)Q按照时间和I间序描述pȝ元素间的交互和它们之间的关系Q?
(9) zd?Activity Diagram)Q描qCpȝ元素的活动;
建模Ҏ?b>建模语言和徏模过E?/b>两部分构成。其中徏模语a是用来表q设计方法的表示法,建模q程是对设计中所应采取的步骤的描q。UML是一U徏模语aQ它在很大程度上独立于徏模过E。在实际建模中,建模人员最好把UML用于以用案驱动的、以体系机构Z心的、P代的和渐增式的开发过E中?
一般而言QY件系l的体系l构l出了Y件系l的l织、组成系l的构造元素及其接口的选择、系l的行ؓ和体pȝ构风格等信息。也是_它不仅关心系l的l构和行为等功能性需求,而且也涉及系l的性能、易理解性、易复用性等非功能性需求。如下图所C,UML利用用户模型视图、结构模型视图、行为模型视图、实现模型视囑֒环境模型视图来描qY件系l的体系l构?
Ҏ它们在不同架构视囄应用Q可以把9U图分成Q?/b>
(1) 用户模型视图Q用例图Q?/a>
(2) l构模型视图Q类囑֒对象Q?
(3) 行ؓ模型视图Q状态图、时序图、协作图和活动图Q动态图Q;
(4) 实现模型视图Q组件图Q?
(5) 环境模型视图Q配|图?
用户模型视图׃门描q?b>最l用戗分析h员和试人员看到的系l行为的用案l成Q它实际上是从用戯?/b>来描q系l应该具有的功能。用h型视图所描述的系l功能依靠外部用h者另外一个系l来Ȁz,为用h者另一pȝ提供服务Q从而实现用h另一pȝ与系l的交互。系l实现的最l目标是提供用户模型视图中所描述的功能。在UML中,用户模型视图是由用案囄?/b>?
l构模型视图描述l成pȝ?b>cR对象以及它们之间的关系{静态结构,用来支持pȝ的功能需求,xq系l内部功能是如何设计的。结构模型视囄cd和对象图构成Q?b>主要供设计h员和开发h员?/b>?
行ؓ模型?/b>图主要用来描qŞ?b>pȝq发与同步机制的U程和进E?/b>Q其x的重Ҏpȝ的性能、易伸羃性和pȝ的吞吐量{非功能性需求。行为模型视囑ֈ用ƈ发来描述资源的高效用、ƈ行执行和处理异步事g。除了讲pȝ划分为ƈ发执行的控制U程之外Q行为模型还必须处理通信和这些线E及q程之间的同步问题。行为模型视图主要供pȝ开发h员和pȝ集成人员使用Q它?b>序列图、协作图、状态图和活动图l成?
实现模型视图用来描述pȝ的实现模块它们之间的依赖关系以及资源分配情况。这U视图主要用于系l的配置理Q它是由一些独立的构gl成的。实现模型视囄构g囄?/b>。其中构件是代码模块Q不同类型的代码模块形成不同的构件。实现模型视图主要供开发h?/b>使用?
环境模型视图用来描述物理pȝ?b>g拓扑l构。例如,pȝ中的计算机和讑֤的分布情况以及它们之间的q接方式Q其中计机和设备统UCؓ节点。在UML中环境模型视图是由部|图来表C的。系l部|图描述了系l构件在节点上的分布情况Q即用来描述软g构g到物理节点的映射。部|图主要?b>开发h员、系l集成h员和试人员使用?
上面每一U视囑֏映了pȝ的一个特定方面,不同人员可以单独的用其中每一U视图,从而可以关注特定的体系l构问题。但在通常情况下,׃pȝ的最l目标是提供用户模型视图中描q的功能以及其它一些非功能性需求,因此Q用h型视图是其它视图的核心基Q其它视囄构造都依赖与用h型视图中所描述的类宏V?
l心的读者已l发玎ͼ每一UUMLN是由多个囄成的Q每一U图都是体系l构某个侧面的表C,各种囑֮际上是一致的Q所有的囑֜一L成了pȝ的完整视图。如下图所C,UML中d提供了用案图、类图、对象图、序列图、协作图、状态图、活动图、构建图和部|图9U图。根据它们描q的是系l的静态结构还是动态行为,可以它们分为静态图和动态图两类。再q一步介l这9中UML图时Q先了解下什么是模型元素Q?
3. UML的徏模机?/b>
UML有两套徏模机Ӟ静态徏模机制和动态徏模机制。静态徏模机制包括用例图、类图、对象图、包、组件图和配|图。动态徏模机制包括状态图、时序图、协作图、活动图?
(1) 用例图:用例的可视化工具Q它提供计算机系l的高层ơ的用户视图Q表CZ外部zd者的角度来看pȝ是怎样使用的?
用例图(用案图)是用于描qCl用案,参与者以及它们之间的q接关系。一个用案图描述了一l动作序列,每一个序列表C系l的外部设施Q系l的参与者)与系l本w的交互。从一个特定参与者的角度看,一个用案完成对其有价值的工作。如?.5所C,用案图仅仅是从参与者用系l的角度来描q系l中的信息,即站在系l外部查看系l应该具有什么功能,而ƈ不描q该功能在Y件内部是如何实现的。用案可以应用于整个pȝQ也可以应用于系l的一个部分,包括子系l、单个的cL者接口。通常Q用案不仅代表这些元素所期望的行为,而且q可以把q些元素用作开发过E中试用案的基?
用例囑括以?斚w内容Q?
(a) 用例(Use Case)
(b) 参与?Actor)
(c) 依赖、泛化和兌关系
用例囄例:
(2) cdQ描q类、接口、协作以及它们之间关pȝ图?
cd是用于描qCl类、接口、协作以及它们之间的静态关pR在面向对象pȝ的徏模中Q类图是最为常用的图,它用来阐明系l的静态结构。事实上cL对一l具有相同属性、操作、关pd语义的对象的描述Q其中对cȝ属性和操作q行描述时的一个最重要的细节就是它的可见性?
cd以以多种形式q接Q例如关联、泛化、依赖和实现{。一个典型的pȝ中通常有若q个cd。一个类图不一定要包含pȝ中所有的c,一个类可以加到几个cd中?
cdCZQ?
(3) 对象图:表示在某一旉上一l对象以及它们之间的关系的图。对象图可以被看做是cd在系l某一时刻的实例?
对象图是cd的实例,用来描述特定q行时刻一l对象之间的关系。也是_对象用于描述交互的静态部分,它由参与协作的有兛_象组成。但不包括在对象之间传递的M消息?
在创建对象图Ӟ建模人员q不需要用单个的对象图来描q系l中的每一个对象。事实上Q绝大多数系l中都会包含成百上千的对象。用对象来描q系l的所有对象以及它们之间的关系一般是不太现实的。因此,建模人员可以选择所感兴的对象极其之间的关pL描述?
对象图中所使用的符号和cd中用的W号几乎完全相同Q区别仅在于对象囄对象名带有下划线Q而且cMcM间关pȝ所有的实例都要d来?
(4) lg?/a>Q描qY件组件以及组件之间的关系Q组件本w是代码的物理模块,lg囑ֈ昄了代码的l构?
lg图(构g图)是用于描qCl构件之间的l织和依赖关p,用于建模pȝ的静态实现视图。构件可以是可执行程序集、库、表、文件和文档{,它包含了逻辑cL者逻辑cȝ实现信息Q因此结构模型视囑֒实现模型视图之间存在映射关系?
构徏图中也可以包括包或子pȝQ它们都是用于将模型元素l成较大的组块?
lg图例图:
(5) 配置?/a>Q描q系l硬件的物理拓扑l构以及在此l构上执行的软g。配|图可以昄计算节点的拓扑结构和通信路径、结点上q行的Y件组件、Y件组件包含的逻辑单元Q对象、类Q等。配|图常常用于帮助理解分布式系l?
配置图(部v图)用来描述pȝq行是进行处理的节点以及在节点上zd的构件的配置。部|图用来对系l的环境模型视图q行建模。在大多数情况下Q部|图用来描述pȝg的扩普结构?
在UML中,建模人员可以用类图来描述pȝ的静态结构,可以用序列图、协作图、状态图、活动图来描q系l的动态行为,而用部v图来描述软g所执行所需的处理器和设备的拓扑l构?
(6) 状态图Q通过cd象的生命周期建立模型来描q对象随旉变化的动态行为?
状态图实际上是一U由状态、变q、事件和zdl成的状态机。状态图描述从状态到状态的控制,常用于系l的动态特性徏模。在大多数情况下Q它用来对反应型对象的行为徏模?
在UML中,状态图可以用来对一个对象按事g排序的行为徏模。一个状态图是强调从状态到状态的控制的状态机的简单表C。一般而言Q状态图是对cL描述的设施的补充说明Q它描述了类的所有对象可能具有的状态以及引L态变化的事g?
(7) 时序图:交互图描qC一个交互,它由一l对象和它们之间的关pȝ成,q且q包括在对象间传递的信息。交互图表达对象之间的交互,是描qCl对象如何协作完成某个行为的模型化工兗?
序列囑֒协作囄UCؓ交互图。其中,序列囄来描q对象之间消息发送的先后ơ序Q阐明对象之间的交互q程以及在系l执行过E中的某一具体时刻会发生什么事件。序列图是一U强调时间顺序的交互图,其中对象沿横轴方向排列,消息沿纵轴方向排列?
序列图中的对象生命线是一条垂直的虚线Q它表示一个对象在一D|间内存在。由于序列图中大多数对象都存在于整个交互q程中,因此q些对象全部排列在图的顶部,它们的生命线从图的顶部画到图的底部。每个对象的下方有一个矩形条Q它与对象的生命UK叠,它表C对象的控制焦炏V序列图中的消息可以有序P但由于这U图上的消息已经从纵轴上按时间顺序排序,因此消息序号通常予以省略?
(8) 协作图:包含cd角色和关联角Ԍ而不仅仅是类元和兌。协作图参加交互的各对象的组l。协作图只对怺间有交互作用的对象和q些对象间的关系建模Q而忽略了其他对象和关联。协作图也是一U交互图Q它收发消息的对象的l织l构?
协作囑֒序列图是协作的,它们可以互相转换。在多数情况下,协作图主要对单调的、顺序的控制徏模,但它也可以用来对包括q代和分支在内的复杂控制进行徏模?
一般而言Q徏模h员可以创建多个协作图Q其中一些是主要的,另外一些是可选择的\径或者异常条件。徏模h员可以用包来l织q些协作图,q给每个图v一个合适的名字Q以便与其它囑别开?
(9) zd图:用于展现参与行ؓ的类的活动或动作?
zd图是状态图的一U特D情况,其中几乎所有或大多数状态都处于zd状态,而且几乎所有或者大多数变迁都是由源状态中zd的完成触发的。活动图本质上是一U流E图Q它描述了从zd到活动的控制?
可以把活动图看作是新L交互图,但交互图观察的是传递消息的对象Q而活动图观察到的是对象之间传送的消息。尽两者在语义上的区别很细微,但它们用不同的方式来看pȝ的?
如果你觉得本文不错的话,请你点击屏幕右下方的
。如果你以后会用到这文章的或觉得以后要重新阅的话Q你可以点击屏幕右下角的
。如果你觉得我的博文不错或是惛_W一旉看到我的动态的话,你可以点dq右下角
。如果你惌点什么的话,你可以点dq右下方?a >
。如果你都点q了Q那真的太谢谢你了,兄弟太支持了。此Ӟ或许你可以点?a >
按钮Q然后看看博文的Dl箋览其他文章?/p>
最后,Ƣ迎大家l箋支持和关注我的博客:
http://blog.csdn.net/IBM_hoojo
也欢q大家和我交、探讨IT斚w的知识?/p>
在UMLcd中,常见的有以下几种关系: 泛化QGeneralizationQ? 实现QRealizationQ,兌QAssociation)Q聚合(AggregationQ,l合(Composition)Q依?Dependency)?
1.1?l承关系—泛化(GeneralizationQ?
指的是一个类Q称为子cR子接口Q承另外的一个类Q称为父cR父接口Q的功能Qƈ可以增加它自q新功能的能力Q承是cMcL者接口与接口之间最常见的关p;在Java中用extends关键字?
【泛化关pR是一U承关p,表示一般与Ҏ的关p,它指定了子类如何特化父类的所有特征和行ؓ。例如:猫头鹰是鸟的一U,x鸟的Ҏ也有猫头鹰的共性?
【箭头指向】带三角头的实U,头指向父类?
【描q】上图中的类bird有嘴、翅膀、羽毛等属性。会飞、会唧唧喛_的叫Q那么就有这些方法。而猫头鹰有大眼睛和捕捉老鼠的本领,q则是自w的Ҏ?/p>
1.2?实现关系QRealizationQ?
指的是一个classcd现interface接口Q可以是多个Q的功能Q实现是cM接口之间最常见的关p;在Java中此cdp通过关键字implements明确标识?
【实现关pR是一U类与接口的关系Q表C类是接口所有特征和行ؓ的实?
【箭头指向】带三角头的虚U,头指向接口?
【描q】上图中IFly是一个接口,接口中有旉、速度{常量,q有一个flyҎ。FlyImpll承了这个IFly接口后,需要实现flyҎQ同时实现类也可以拥有自q属性和Ҏ?/p>
1.3?依赖QDependencyQ?
可以单的理解Q就是一个类A使用C另一个类BQ而这U用关pLh偶然性的、时性的、非常弱的,但是Bcȝ变化会媄响到AQ比如某q河Q需要借用一条船Q此时h与船之间的关pd是依赖;表现在代码层面,为类B作ؓ参数、属性被cA在某个methodҎ中用;
【依赖关pR是一U用的关系Q即一个类的实现需要另一个类的协助,所以要量不用双向的互相依赖?
【代码表现】局部变量、方法的参数或者对静态方法的调用
【箭头及指向】带头的虚U,指向被用?
【描q】BirdcM有一个setFlyҎQ它需要用者用到IFly接口的实玎ͼ那么q种关系是依赖关系?/p>
1.4?兌
他体现的是两个类、或者类与接口之间语义别的一U强依赖关系Q比如我和我的朋友;q种关系比依赖更强、不存在依赖关系的偶然性、关pM不是临时性的Q一般是长期性的Q而且双方的关pM般是q等的、关联可以是单向、双向的Q表现在代码层面Qؓ被关联类B以类属性的形式出现在关联类A中,也可能是兌cA引用了一个类型ؓ被关联类B的全局变量Q?
【关联关pR是一U拥有的关系Q它使一个类知道另一个类的属性和ҎQ如Q老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的兌可以有两个箭头或者没有箭_单向的关联有一个箭头?
【代码体现】成员变?
【箭头及指向】带普通箭头的实心U,指向被拥有?
【描q】在BirdcM有一个IFlycd的fly属性,需要提供IFly的接口实现。Bird对象会利用IFly接口的实现完成flyҎ?/p>
1.4.1、双向关?
双方都知道对方的存在Q都可以调用Ҏ的公共属性、方法?
【关联关pR双斚w有关联的关系Q通过自n对对方关联的属性来讉KҎ的属性和Ҏ?/a>
【代码体现】成员变?
【箭头及指向】用不带头的实U连接双?
【描q】在中国一个妻子只能嫁l一个丈夫,一个丈夫也只能取一个妻子?
1.4.2、自w关?
自己兌自己Q这U情冉|较少出现但是也有用到?
【自兌关系】双斚w有关联的关系Q通过自n对自w关联的属性引用来讉KҎ的属性和Ҏ?
【代码体现】成员变?
【箭头及指向】用带普通箭头的实线q接自己
【描q】在盗梦I间中,演员需要在梦中再造梦Q这U梦中梦的情况跟上图描述很符合?
1.5?聚合QAggregationQ?
聚合是关联关pȝ一U特例,他体现的是整体与部分、拥有的关系Q即has-a的关p,此时整体与部分之间是可分ȝQ他们可以具有各自的生命周期Q部分可以属于多个整体对象,也可以ؓ多个整体对象׃nQ比如计机与CPU、公怸员工的关pȝQ表现在代码层面Q和兌关系是一致的Q只能从语义U别来区分;
【聚合关pR是整体与部分的关系Q且部分可以d整体而单独存在。如车和轮胎是整体和部分的关p,轮胎d车仍然可以存在。聚合关pL兌关系的一U,是强的关联关p;兌和聚合在语法上无法区分,必须考察具体的逻辑关系?
【代码体现】成员变?
【箭头及指向】带I心菱Ş的实心线Q菱形指向整?
【描q】birdChild一只鸟有很多鸟宝宝Q所以自引用。鸟有很多不同数量和颜色的羽毛,所以引用关pL0~*?/p>
1.6?l合QCompositionQ?
l合也是兌关系的一U特例,他体现的是一Ucontains-a的关p,q种关系比聚合更强,也称为强聚合Q他同样体现整体与部分间的关p,但此时整体与部分是不可分的,整体的生命周期结束也意味着部分的生命周期结束;比如你和你的大脑Q表现在代码层面Q和兌关系是一致的Q只能从语义U别来区分;
【组合关pR是整体与部分的关系Q但部分不能d整体而单独存在。如公司和部门是整体和部分的关系Q没有公司就不存在部门。组合关pL兌关系的一U,是比聚合关系q要强的关系Q它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期?
【代码体现】成员变?
【箭头及指向】带实心菱Ş的实U,菱Ş指向整体
【描q】一个学校由多个班l成Q班U离开学校也就不存在、而学校离开班也不成立。像q种不可分离的关pd需要用l合?/p>
l合CZ
对于l承、实现这两种关系没多疑问,他们体现的是一U类与类、或者类与接口间的纵向关p;其他的四者关pd体现的是cMcR或者类与接口间的引用、横向关p,是比较难区分的,有很多事物间的关p要惛_备定位是很难的,前面也提刎ͼq几U关p都是语义别的Q所以从代码层面q不能完全区分各U关p;但ȝ来说Q后几种关系所表现的强q度依ơؓQ泛?= 实现 > l合 > 聚合 > 兌 > 依赖?/p>