关于UML图的理解[入门]

这几天在复习软件工程UML,真的是一门很奇怪的科目。

复习的时候在网上搜索资料才意识到这门课是以JAVA为基础的,问题是都没学过JAVA。之前写过JAVA的程序,不过也只是依葫芦画瓢。现在看来,JAVA在面向对象这一块贴合的非常紧密。UML更体现了JAVA在工程方面的优势。(虽然我一直都还没理解透面向对象,虽然UML被人说是没有用的东西。。。)


UML=Tings+Relationships+Diagrams,简单来说是一种建模语言,特别之处是它有各种各样的图,体现了对一个工程,一个模型的不同视角。


1. Use Case Diagrams

用例图:从用户的角度完整的描述了系统的功能。

上图就是一个简单的用例图,用例是所有的圆圈。passenger 也是描述的一部分,passenger,准确来说是actor的一个实例,actor是与用例进行联系的外界影响,在这里不能算是用例。

如何描述一个用例图呢,或者说一个用例应该具有哪些属性呢。

以PurchaseTicket为例

描述它应该要有

1.Name:Purchase ticket

2. Participating actor: Passenger
3. Entry condition:
乘客站在了购票机面前
乘客有钱

4.exit condition

乘客拿到票了

5.flow of events

乘客选择目的地

购票机现实票价

乘客投入钱

购票机找零

购票机吐出车票

6.sepecial requirements : none


描述一个用例真是要用好多废话,其实这部分也不重要,重要的是用例图怎么画,他们之间的关系是怎样的。

关系,没错,关系是UML中的关键,无论是用例图还是接下来的活动图,顺序图,还是类,关系都是不可缺少的。


extend关系

在上面的用例图中,可以看到 extend这样的关系:extend 用来扩展用例。

对于购票机来说,应该要考虑到用户不按照flow of events来操作该怎么办。对于这些exceptional的情况,用extend来扩展用例是比较方便的表示。

购票机应该要有应对超时,无操作,取消等特殊情况。购票机在设计的时候原本就只是让你规规矩矩用的,但是在实际使用中,当然会有这样的特殊情况,

但是这些特殊处理按道理来讲也不应该归到购票机里面去,所以就在外部对购票机进行扩充。这样的特殊操作在其他用例中也常常用来扩充。


include 关系:


如果划分细点,把购票机划分为单程票和多程票两个购票用例,那么就会发现他们都有一个共同的功能,那就是收钱。

这个时候就可以用到include 关系,两个用例都包含collectmoney这个用例。


inheritance 关系

继承关系。c++中也会常常用到。子类继承父类,子类有父类全部的特性(属性值,操作),同时又可以进行扩充,一代更比一代强嘛。平衡树就是二叉树的子类,堆也是二叉树的子类。

在做数据结构作业的时候,写了二叉树,后来写平衡树的时候,就直接继承的之前写过的二叉树的类,然后进行扩充。

在用例中也有这样的关系。



如上图,订票是父类,电话订票和网上订票都可以看做是对订票的补充,是子类。注意表示继承,是用线条带一个三角。


还有一些关系是在其他种类的UML中用的比较多,先直接介绍其他的UML图吧


2.类图:

展示系统结构。


用一个包含三个格子的矩形表示。从上到下分别是名字,属性,操作。


关系:

一对多,多对多,继承,聚合关系:


线条上的1和*表示一个和多个的关系:一个作者可能有多个出版物,一个出版物也可能有多个作者。

线条加三角表示继承:书和期刊都是继承的出版物。

菱形表示聚合:多个文章聚合为一个期刊。


聚合通常和组成容易混淆


组成是实心的菱形,组成比聚合关系更强。其实很容易分辨。比如一个公司由人聚合而成。公司没了 ,人还在,所以是聚合。一个公司也可以说是由各个部门组成,公司没了,部门也就没了,这就是组成。


对于类的具体实现叫做实例。

比如对于书这个类的实例 软件工程 表示如下


注意格式,冒号前是实例名字冒号后是类的名字。


3.交互图

UML的交互图有两种,一种是顺序图,一种是协作图。协作图不讲,因为上课讲的少。

一个交互图能把一个事件流完整的展示出来,同时也能展示各个实例,对象之间的交互。


上图是设定手表时间的交互图。

四个对象。从上到下的看,就能看出整个事件流。

这个图我觉得是最难画的,如果就让你直接画一个设定手表时间的交互图。你能想到最顶上一行有哪几个对象吗?

这个是有分类的。一个交互图是需要实体,边界,控制对象的。

实体表示需要长期跟踪记录的对象。

边界是用户最先能接触到的对象。

控制对象是内部控制其他对象的对象。

这个例子其实不完整,只能看到实体(时间)和边界对象(输入,显示),应该加入一个控制对象,用来接收输入传递,控制显示。

交互图细讲真是要讲很多,我还没学好呢,以后有时间再补充。


4. 状态图

大概就是状态机,侧重于系统会处于那几个状态,以及状态之间的转化条件


细节:起点是实心黑点,终点是同心圆黑点。


5.活动图

同样是展示一个具体事件,与交互图不同,并不关注交互的对象,关注的是活动本身。比如订购披萨的例子。想一想用交互图写一个订购披萨的例子真的很麻烦。用活动图就很方便了


分为两个泳道,不同泳道是由不同的对象执行的,加粗横线表示同步,需要上面的活动全部完成后才能通过同步线。

活动图也可以加入分支处理多种情况,比如在披萨图中加入意外处理情况


啊。。。真是麻烦。。。


6.包图:

用来聚合管理用例。


妈的写完这个之后感觉自己简直是个傻逼,写的又乱又不详细。明天要考试了 。

还是这个博客写的好http://blog.csdn.net/jiuqiyuliang/article/details/8552956/



你可能感兴趣的:(软件工程)