因为,最近换了一个老大,老大要我和他一起研究VS 2010 UML里的类图和活动图。中文资料真的少的可怜,看csdn上面的E文,看着看着就想跑路。。
下午的时候,偶然看到一篇台湾人写的,很好,特拿过来:
原文地址:微軟VS2010能支援6款UML圖
最新的UML2中包含了十四款图,你可以看到图1中UML规格书对所有图款的分类。
图一 14个 UML 图
图2 VS 2010 支持的UML图
接着,我们可以从图2中看到,VS2010表面上支援了五款图,分别为:类别图(Class Diagram)、循序图(Sequence Diagram)、用例图(Use Case Diagram)、活动图(Activity Diagram)、元件图(Component Diagram)。但是,类别图中可以放置套件图(Package Diagram)相关的元素,所以VS2010实际上可以让开发人员绘制六款图的。 另外,还有几款图共用的情况,我也做了确认。总而言之,VS2010对这十四款UML图的支援情况,归纳如下。
类别图(Class Diagram)
类别图,VS2010有支援。
类别图在表达系统内部的静态结构,可以用来将程式码分门别类,对开发人员而言,是非常重要的UML图。如果要执行自动产码,或者反向工程、依码产图,类别图通常都是首选。
用例图(Use Case Diagram)
用例图,VS2010有支援。
用例图在表达系统对外提供的服务或功能,是开发人员可以用来跟使用者沟通的主要图款之一。
循序图(Sequence Diagram)
循序图,VS2010有支援。
循序图用来表达系统内部一群物件之间互传讯息的状况,搭配用例来使用的话,可以针对每一个用例,设计系统内部一群物件实现用例的运作情况。
对於程序员的编码作业,类别图和循序图是最值得参考的两款图。UML工具的自动产码功能中,最常见参考类别图产码,参考循序图产码通常是较为高阶的功能,虽然依据循序图产码一点都不难。
活动图(Activity Diagram)
活动图,VS2010有支援。
活动图就是一般常用的工作流程图,非常容易上手。我个人认为,活动图和用例图是UML图款中,最适合拿来跟使用者沟通的两款图,其余图款使用者理所当然是看不懂得啦!
元件图(Component Diagram)
元件图,VS2010有支援。
顾名思义,元件图在表达系统的组成元件(component)、元件所提供的介面(interface)或者是所需要的介面、以及元件之间的依赖关系。元件是指一个具体的模组单元(modular unit),但是必须具备定义明确的介面(well-defined interface),并且能够易於抽换(replaceable)。 如果把UML图依照需求、分析设计、实作、部署来区分的话,用例图和活动图偏向需求图款,元件图则偏向实作图款,等会谈到的「部署图」偏向部署图款,而其余的UML图款则大多可以归类在分析设计图款中。
部署图(Deployment Diagram)
部署图,VS2010未支援。
元件图和部署图都是用来表达实体元素的图款,前者表达实体的软体程式,後者表达实体的硬体设备。在实务上,部署图最常用来表达系统的硬体设备以及架构。
其实,对於软体开发人员而言,部署图已经比较偏向工程人员所需的图了,距离软体有点远了。所以,老实说,VS2010没有支援部署图,我个人是觉得还可以接受啦。
物件图(Object Diagram)
物件图,VS2010未支援。
物件图用来呈现系统在某一时刻下的快照(snapshot),快照内容主要包含一群物件(object),以及这些物件之间的连结(link)。由於,物件图只能表达系统在特定时刻下的物件关系,所以并不实用,没太大价值,实务上也鲜少使用物件图。因此,我个人是认为VS2010没有支援物件图,其实也无妨啦!
此外,有些UML工具中,套件图、物件图和类别图三款图,会共用类别图的工具箱(toolbox),所以仔细看工具箱中的元素,可以发现其他图款的元素。
图 3 类图工具箱
不过,我仔细看了VS2010的类别图工具箱中,有套件图的元素,但是没有物件图的元素,如图3所示。所以,确定是无法用VS2010来绘制物件图了。
通讯图(Communication Diagram)
通讯图,VS2010未支援。
通讯图跟循序图的功用相似,都是用来表达一群物件互传讯息的互动情况。只是,通讯图采用网状图形,强调物件之间的连结。而循序图采用栅栏状图形,强调依序发送讯息。
两款图所包含的资讯相似,所以很多UML工具有提供两款图互转的功能。因此,虽然VS2010没有支援通讯图,其实也没什麽关系,有循序图就可以了。况且,在实务使用上,循序图远比通讯图普及、好用。
状态图(State Machine Diagram)
状态图,VS2010未支援。
状态图用来表达某一种物件,在其生命周期中,因为事件(event)刺激导致状态(state)的变化。开发人员常用状态图来设计某一种物件的行为。
如果开发一般的商用系统的话,其实很少使用到状态图。但是,要开发即时系统(Real-Time System)的话,状态图就很重要了。有些UML工具甚至可以参考状态图,自动产出程式码,不过这类的UML工具通常偏向支援即时系统的开发,而不是商用系统。
总之,类别图、用例图、循序图、活动图、元件图、部署图、物件图、通讯图、状态图,这九款UML图,在UML1版就已经提出了。UML後续的改版中,大概就是状态图的名称变了一、两次,还有原先的「合作图」(Collaboration Diagram)後来更名为现在的「通讯图」。再来,就是针对这几款图的元素,做一些增修。其中的循序图和活动图,它们包含的元素,增修幅度最大。
图 4 循序图
虽然,表面看起来VS2010支援的UML图款属於UML1。不过,也不能因此而断定VS2010只支援到UML1,因为有些UML2才提出的元素,在VS2010中也是有支援。比方说,循序图中「引用片段」(InteractionUse)的概念,就属於UML2的新元素,但是VS2010是有支援的,如图4所示。
至於,接着要谈的套件图(Package Diagram)、组合结构图(Composite Structure Diagram)、互动概观图(Interaction Overview Diagram)、时序图(Timing Diagram)和造型图(Profile Diagram),这五款UML图则是在UML2才提出来的。特别是最後一款「造型图」,其中的元素虽然在UML2就已经提出来了,可是一直到最近的UML2.2新版中,才正式把造型图列入UML图款之一。
套件图(Package Diagram)
套件图,VS2010有支援。
UML一直都有「套件」(package)的概念和相关元素,只是没有特别提出一款套件图,直到UML2才正式提出套件图。
套件是一种很常见的群集机制(grouping mechanism),用来将相关的元素群集起来。常见开发人员用套件来表达「次系统」(subsystem),并且使用套件图来表达次系统之间的依赖关系。 如前述,VS2010虽未列出,但是其实是有支援的,它的相关元素放置在类别图的工具箱中。
组合结构图(Composite Structure Diagram)
组合结构图,VS2010未支援。
我个人认为,除了套件图外,组合结构图算是UML2中比较实用的图款,但是它的实用性,并不是在一般的商用系统中,而是偏向即时系统或嵌入式系统。
先来回顾一下类别图和物件图。类别图用来表达系统内部的静态结构,而且它表达的不是系统某一个时刻的静态结构喔,它表达的是系统在任何时刻下都必须遵守的静态结构。那麽物件图呢,物件图则是用来表达某一个时刻下,系统内部一群物件结构。 回过头来看组合结构图,它用来表达某一物件的内部结构,其内部由一群小物件所以组成。这款图有两个特色,其一、它锁定的范围是物件内部,而不是一般商用系统的系统内部;其二、它强调物件内部的组成物件,一般在商用系统中,物件通常是平等的,组合的结构比较少些。 也因为组合结构图的实用价值,不在一般的商用系统上头,所以,我个人认为VS2010把它剔掉,其实也无妨。
互动概观图(Interaction Overview Diagram)
互动概观图,VS2010未支援。
互动概观图是活动图和循序图的混合版,主要结构像活动图,表达流程,但是参与流程的节点,不是一般的动作(action),取而代之的是「互动」(interaction)片段。一个互动片段的内容,正是循序图的一小段互动片段。 对於复杂的物件互动,互动概观图可以用来呈现互动片段之间的控制流程,其实是可以补足循序图不易表达控制流程的缺点。不过,换个角度来看,倘若循序图复杂到需要搭配互动概观图的话,这张循序图可能就需要拆解成两张图,或者重构已降低复杂度了。 再说,以控制流程为主要结构,拆解的互动片段为节点的话,另一个问题是,程序员可能无法直接按图施工,因而降低了这款图的实用效益。
时序图(Timing Diagram)
时序图,VS2010未支援。
前面提到过状态图,用来表达物件因为事件的刺激,而转换状态,所以着重在事件与状态的关系。而时序图也是在表达状态变化,但是它着重在状态与时间的关系,用来表达物件在某一状态停留了多久的时间後,将转换到下一个状态,时序图很像心电图,透过高高低低的曲线来强调时间。
同样的,在商用系统上,并不是这麽重视时间的上上下下,所以时序图如果用在商用系统上头,无法带来太大的效益。但是,如果把时序图放到即时系统或嵌入式系统上头,应该会令人眼睛一亮。 回顾一下,状态图、组合结构图、时序图都较为偏向用在即时系统或嵌入式系统上头。还有,UML2中的活动图,其实有许多新添的概念,也都是用在即时系统或嵌入式系统上头,而不是用在商用系统上头。
我在猜想,或许这类系统的开发人员也会认为通讯图和互动概观图,很有价值,这也说不一定。UML这样发展,也不令人惊讶,本来UML就想跨领域通吃,所以加入一些关於即时系统或嵌入式系统的模式元素,也不为过啦!
造型图(Profile Diagram)
造型图,VS2010未支援。
造型图,跟前面提到的十三款图,截然不同,而且它也是UML2.2最新提出的图款。造型图主要用来扩充UML,让UML可以成为另一套以UML为基底的方言,像是扩充UML 成为表达晶片设计的模式语言。
想当然尔,一般的开发人员不会用到造型图,就连UML官方认定上,造型图的相关概念都归属於中级认证范围。所以,老话一句,我个人认为VS2010没有支援造型图,也OK啦!
总之,归纳起来,虽然VS2010支援的图款多属於UML1,但是各图款内部的元素,有些是在UML2才提出的新元素。所以,如果要说VS2010支援到UML2,也是勉强可以接受的啦!
再者,虽说VS2010只支援类别图、用例图、循序图、活动图、元件图,外加一个隐藏版的套件图,不过这几款图各个都是强棒。而且,除了元件图外,其余五款图也都是UML官方认定的初级认证范围,也就是说,VS2010挑中的这六款UML图,不仅兼具实用价值,同时也具备初学特性。
在这六款图中,我们将从活动图开始学习UML,也将从活动图开始着手分析设计。活动图是一个非常实用的图款,适合用来具体呈现「企业流程」(Buisness Process)或「工作流程」(Workflow)等等的活动流程观点。
虽然,以物件导向的实作技术而言,程序员无法「按图施工」,直接将活动图的设计内容对应成程式码。但是,以分析师的角度来看,活动图光是用来协助厘清并具体呈现繁杂的企业流程,其实就已经值回票价了。
活动图涵盖较少的物件导向思维和特徵,倘若以初级和中级概念来看,分析师根本不需要具备物件导向思维,就可以绘制出活动图了。
我个人认为,这是活动图容易学习和上手的最主要原因之一,所以,下一期我将从活动图开始,带你用VS2010进入UML的世界。