UML,统一建模语言,是一种用来对真实世界物体进行建模的标准标记,这个建模的过程是开发面向对象设计方法的第一步,UML不是一种方法学,不需要任何正式的工作产品。

UML提供多种类型的模型描述图,当在某种给定的方法学中使用这些图时,她使得开发中的应用程序更容易别我们所理解,UML的内涵远不只是这些模型描述图,但是对于我们来说,这些图对这门语言及其用法背后的基本原理提供了很好的介绍,通过把标准的UML图放进工作产品中,熟练UML的人员就更加容易加入项目并迅速进入角色。在UML这个大家族中用例图,类图,时序图是我们最常用的。米老师常说,学习是一个不断循环往复的过程,随着第一次文档图的验收,各位师傅的讲解,这些图在我心目中重新定义,而我对她的认识也在一步一步的加深,再一次回首用例图,类图和时序图。

首先, 我们来看一下用例图。用例图由于参与者(Actor),用例(User Case),关系,系统边界以及箭头组成,需要特别注意的是他们之间的关系,也就是泛化(Generalization),其中泛化从某种程度上可以分为扩展(Extend)和包含(Include)。扩展(Extend)是对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能,Extend的基用例中将存在一个扩展点,只有当扩展点被激活时,子用例才能被执行。我们以为机房收费系统为例,看看扩展是如何被应用的。

在机房收费系统中,一般用户和操作员均有导出Excel这个功能,从上图中我们可以看出来操作员和一般用户扩展了导出表格这个功能,导出表格是一般用户和操作员在某些情况下触发产生的,导出表格并不是一般用户和操作员所必须存在的部分,一般用户和操作员可以单独存在,一般用户和操作员知道有导出表格这个功能的存在,但是导出表格这个功能不知道一般用户和操作员的存在,因为导出表格不知到底是谁扩展了她,一般用户和操作员是对导出表格在一些基本功能上具体的扩展。简单的来说,就是A
Extend B表示B是A在系统某些情况下触发产生的,B不是A中必须存在的部分,B可以单独存在,B知道A的存在,但是A不知道B的存在,因为A不知道是谁扩展了她,B是对A在一些基本功能上具体的扩展,需要注意的是,箭头从子用例指向基用例。我们再来了解一下Include,仍然以机房收费系统为例,如下图:

Include为包含关系,当两个或多个用例中公用一组相同的动作,这是可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例共享,因为子用例被抽出,基用例并非一个完整的用例,所以Include关系中基用例必须和子用例一起使用才够完整,子用例也必然被执行。从上图中我们了解到,学生查询信息包含了学生查询余额,查看上机记录,查看充值记录以及上机状态查询,这些查询都是学生查询信息整个过程中不可或缺的一部分,注意画法,箭头从基用例指向子用例。用例图的基础理论知识就先介绍到这里,接下来,以机房收费系统为例,我修改过的用例图:

介绍完用例图,我们在来看看我们的类图,对于类图,我们要十分清楚明白的知道,类图中的四种关系,关联,依赖,泛化,实现,其中关联包括聚合和组合。首先,我们来看一下关联中的聚合,聚合,从她的字面上的意思就是大家伙聚到一起没有特别强的约束力,强调的是整体与部分之间的关系,下面我们来看一张聚合的图:

我们来看看在代码中是怎么样实现的呢?

Public class GooseGroup
{
    public Goose goose;
    public GooseGroup(Goose Goose)
    {
    this.Goose=Goose;
    }
}

大雁和大雁群她们之间的关系就属于聚合关系,大雁进行迁徙的时候,一只大雁属于一个大雁群,一个雁群可以有很多大雁,大雁离开了雁群还是大雁,雁群离开了其中某一只大雁,照样还有其他的大雁,大雁可以脱离雁群独立存在。接下来,关联中的组合关系,从她的字面上,我们很容易理解,大家伙组装在一起,具有很强的约束力,下面我们来看一张组合的图:

我们再来看看组合在代码中又是如何实现的呢:

Public class Goose
{
   public Wings wing;
   public Goose()
   {
      wing=new wing();
   }
}

大雁与翅膀之间的关系就是组合,没有大雁就没有翅膀,只有翅膀也不可能是大雁,翅膀离开大雁没有了存在的意义,大雁离开了翅膀也不能构成大雁,翅膀不能脱离大雁独立存在。组合是聚合的一种形式,她具有更强的拥有关系,强调整体与部分的生命周期是一致的,整体负责部分的生命周期的管理,如果整体被销毁,部分也必须跟着一起被销毁,如果所有者被复制,部分也必须一起被复制。聚合和组成我们就先介绍到这里,预知后面的关系如何,且听下回分解,UML未完,待续(再回首UML之下篇).........

再回首UML之上篇的更多相关文章

  1. 再回首UML之下篇

    接着我们上篇博客再回首UML之上篇说,在类图中有四种关系,关联.依赖.泛化.实现,接下来,我们来看看依赖,依赖--描述的是一种使用关系,她说明一个事物的规格说明的变化可能影响到他使用的另一个事物,反之 ...

  2. UML——再回首

    概述     在画图的过程中,发现自己还是有好多不懂的地方,对于四大关系理解的不是特别透彻,所以画图的过程中总是"剪不断,理还乱!"再一次整理四大关系,再回首必然丰收~~~ 1.实 ...

  3. JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

    JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...

  4. 再回首,Java温故知新——开篇说明

    不知不觉在IT界从业2年了,两年时间足够一个人成长很多,当然也会改变很多事.在这两年时间里,随着对技术的深入了解,知识面的拓展以及工作难度的增大,渐渐的感觉自己技术方面根基不稳,多数问题也只是做到知其 ...

  5. 再回首,Java温故知新(一):Java概述

    Java发展历程 Java的发展要追溯到1991年,Patrick Naughton(帕特里克·诺顿)和James Gosling(詹姆斯·高斯林)带领Sun公司的工程师打算为有线电视转换盒之类的消费 ...

  6. 再回首,Java温故知新(八):Java基础之字符串

    字符串是Java中使用频率最高的类,但是它却不属于基本类型,而是预定义了String类来表示.从String类的源码可以看到,String是基于char[]实现的,而且Java中的String是不可变 ...

  7. 再回首,Java温故知新(七):Java基础之运算符

    常规算数运算符 包括+.-.*./.%分别对应着加.减.乘.除.取余,算数运算符所处理的两个数字必须为同种类型,如果是不同类型且无法进行自动类型转换的话必须进行强制类型转换,不过强制类型转换可能会丢失 ...

  8. [二十六]JavaIO之再回首恍然(如梦? 大悟?)

    流分类回顾 本文是JavaIO告一段落的总结帖 希望对JavaIO做一个基础性的总结(不涉及NIO) 从实现的角度进行简单的介绍 下面的这两个表格,之前出现过 数据源形式 InputStream Ou ...

  9. MySQL数据库再回首

    前言: 数据库是程序员的数据源泉,加上近期 要开发DB可视化.性能分析的功能 重新回顾一下MySQL知识,以下是笔记: MySQL架构 MySQL基础理论 1.什么是关系型数据库? 关系型数据库,这个 ...

随机推荐

  1. MMORPG战斗系统随笔(一)

    前言 很久没有更新博客,中间迁移过一次博客,后来一直忙于项目的开发,忙的晚上回去没时间写博客,周日又要自我调整一下,所以空闲了很久没有继续写博客.最近终于慢慢放慢节奏,项目也快上线了,可以有空写一些个 ...

  2. testng生成自定义html报告

    转自:https://blog.csdn.net/kdslkd/article/details/51198433 testng原生的或reportng的报告总有些不符合需要,尝试生成自定义测试报告,用 ...

  3. ansible copy 模块的使用

    copy copy 模块是将 ansible 管理主机上的文件拷贝上远程主机中,与 fetch 相反,如果目标路径不存在,则自动创建,如果 src 的目录带“/” 则复制该目录下的所有东西,如果 sr ...

  4. 彻底搞懂Scrapy的中间件(一)

    中间件是Scrapy里面的一个核心概念.使用中间件可以在爬虫的请求发起之前或者请求返回之后对数据进行定制化修改,从而开发出适应不同情况的爬虫. "中间件"这个中文名字和前面章节讲到 ...

  5. pip install rrdtool

    fatal error: rrd.h: No such file or directory apt-get install librrd-dev

  6. Linux下对lvm逻辑卷分区大小的调整(针对xfs和ext4不同文件系统)

    当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间.如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷分区 ...

  7. centos 设置中文环境

    方法1: [hl@localhost ~]$ LANG=zh_CN.UTF-8 #只对当前shell有效,临时设置 [hl@localhost ~]$ ll 总用量 drwxrwxr-x. hl hl ...

  8. go语言处理文件上传和多个文件上传

    uploadOne.html代码如下: <!doctype html> <html lang="en"> <head> <meta cha ...

  9. redis集群主流架构方案分析

    Redis在互联网大数据平台有着广泛的应用,主要被用来缓存热点数据,避免海量请求压垮数据库,同时可以提升服务节点的响应速度和并发量.随着数据量的增多,由于redis是占用单台物理机或虚机的内存,内存资 ...

  10. 2018.09.07 bzoj1911: [Apio2010]特别行动队(斜率优化dp)

    传送门 斜率优化dp经典题. 题目中说的很清楚,设f[i]表示前i个数分配出的最大值. 那么有: f[i]=max(f[j]+A∗(sum[i]−sum[j])2+B∗(sum[i]−sum[j])+ ...