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. fatal error C1083: Cannot open precompiled header file: 'Debug/xxoo.pch': No such file or directory

    fatal error C1083: Cannot open precompiled header file: 'Debug/xxoo.pch': No such file or directory ...

  2. Spring动态切换多数据源解决方案

    Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性.而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时 ...

  3. [Matlab+C/C++] 读写二进制文件

    introduction 因为Matlab操作简单.方便,它被应用于很多领域:音频处理,图像处理,数值计算等.尽管MATLAB容易操作,但受限于他的语言解释机制,MATLAB的执行速度通常较低.C/C ...

  4. ubuntu ssh 防止登陆断开

    client 端: echo -e '\nServerAliveInterval 30' >> ~/.ssh/ssh_config server 端: echo -e '\nClientA ...

  5. EBS多组织结构

    1. 业务组: 它代表组织结构的最高层次, 它分离了人力资源的信息. 例如, 当你查询人员时, 它会列出所有分配给相应业务组的成员, 而你自己所属于的组织只不过是业务组的一份子. 这样说可能造成一种误 ...

  6. git中status指令总是提示内容被修改的解决

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近在用git提交项目修改时发现一个问题,就是多次 git a ...

  7. android的activity栈管理

    在进行BlackBerry程序开发的时候,BlackBerry提供了一个管理Screen的栈,用来从任何地方来关闭位于最上一层的Screen,使用UiApplication.getUiApplicat ...

  8. Hive-ORC文件存储格式

    ORC文件格式是从Hive-0.11版本开始的.关于ORC文件格式的官方文档,以及基于官方文档的翻译内容这里就不赘述了,有兴趣的可以仔细研究了解一下.本文接下来根据论文<Major Techni ...

  9. WINDOWS系统注册表取得管理权限研究

    有的时候开发我们需要取得系统管理员权限,可以通过修改注册表实现,研究网上的各种方法,整理得一下脚本实现取得管理员权限 脚本如下 Windows Registry Editor Version 5.00 ...

  10. C/C++的mem函数和strcpy函数的区别和应用

    mem系列函数是面试的时候常考的知识点,我们需要熟练掌握这三个函数的原理和代码实现,要能准确无误的写出代码. memcpy.memset和memset三个函数在使用过程中,均需包含以下头文件: //在 ...