再回首UML之上篇
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之上篇的更多相关文章
- 再回首UML之下篇
接着我们上篇博客再回首UML之上篇说,在类图中有四种关系,关联.依赖.泛化.实现,接下来,我们来看看依赖,依赖--描述的是一种使用关系,她说明一个事物的规格说明的变化可能影响到他使用的另一个事物,反之 ...
- UML——再回首
概述 在画图的过程中,发现自己还是有好多不懂的地方,对于四大关系理解的不是特别透彻,所以画图的过程中总是"剪不断,理还乱!"再一次整理四大关系,再回首必然丰收~~~ 1.实 ...
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...
- 再回首,Java温故知新——开篇说明
不知不觉在IT界从业2年了,两年时间足够一个人成长很多,当然也会改变很多事.在这两年时间里,随着对技术的深入了解,知识面的拓展以及工作难度的增大,渐渐的感觉自己技术方面根基不稳,多数问题也只是做到知其 ...
- 再回首,Java温故知新(一):Java概述
Java发展历程 Java的发展要追溯到1991年,Patrick Naughton(帕特里克·诺顿)和James Gosling(詹姆斯·高斯林)带领Sun公司的工程师打算为有线电视转换盒之类的消费 ...
- 再回首,Java温故知新(八):Java基础之字符串
字符串是Java中使用频率最高的类,但是它却不属于基本类型,而是预定义了String类来表示.从String类的源码可以看到,String是基于char[]实现的,而且Java中的String是不可变 ...
- 再回首,Java温故知新(七):Java基础之运算符
常规算数运算符 包括+.-.*./.%分别对应着加.减.乘.除.取余,算数运算符所处理的两个数字必须为同种类型,如果是不同类型且无法进行自动类型转换的话必须进行强制类型转换,不过强制类型转换可能会丢失 ...
- [二十六]JavaIO之再回首恍然(如梦? 大悟?)
流分类回顾 本文是JavaIO告一段落的总结帖 希望对JavaIO做一个基础性的总结(不涉及NIO) 从实现的角度进行简单的介绍 下面的这两个表格,之前出现过 数据源形式 InputStream Ou ...
- MySQL数据库再回首
前言: 数据库是程序员的数据源泉,加上近期 要开发DB可视化.性能分析的功能 重新回顾一下MySQL知识,以下是笔记: MySQL架构 MySQL基础理论 1.什么是关系型数据库? 关系型数据库,这个 ...
随机推荐
- JavaScript学习笔记之数组(一)
数组基础篇 一.数组概述 1. 数组的语法 数组(array)是按次序排列的一组值.每个值的位置都有编号(从0开始). var arr=[1,2,3] //arr[0]=1 任何类型的数据,都可以放入 ...
- Rx系列二 | Observer | Observable
Rx系列二 | Observer | Observable 上节课我们对RX的一些基本概念和使用JAVA代码实现了一个观察者,但是这只是对思路的一个讲解,在我们JAVA中,其实是已经封装好了观察者对象 ...
- log4j日志记录级别是如何工作?
级别p的级别使用q,在记录日志请求时,如果p>=q启用.这条规则是log4j的核心.它假设级别是有序的.对于标准级别它们关系如下:ALL < DEBUG < INFO < WA ...
- UDP单播和组播使用SO_REUSEADDR 测试结果
UDP单播通信 一. 预置条件 A.B在同一台机器,网络中存在往A.B所在的机器的8888端口发送单播UDP数据 A:端口复用绑定在端口8888上 B:端口复用绑定在端口8888上操作步骤:(1)先启 ...
- self关键字
self关键字 self:当前类/对象的指针(指向当前对象/方法调用者) 作用1 当类里有变量名和成员变量名一样的时候,可以使用self区分 例: 我们写一个人的类,有一个年龄属性,在get方法里,我 ...
- Android适配难题全面总结
支持多种屏幕 Android 可在各种具有不同屏幕尺寸和密度的设备上运行.对于 应用,Android 系统在不同设备中提供一致的开发环境, 可以处理大多数工作,将每个应用的用户界面调整为适应其显示的 ...
- 手把手图文教你从Eclipse项目迁移Android Studio
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52937391 从Android的 ...
- Unity角色残影特效
残影特效在网上有很多例子,比如这个,我参考着自己整合了一下,算是整合了一个比较完整且特别简单易用的出来,只需要一个脚本挂上去无需任何设定就能用. 这里只针对SkinnedMeshRenderer的网格 ...
- vbs注册表增删改
vbs注册表增删改非常简单.过去竟然能忍受那么多次手动在注册表编辑器操作...应该认真反思自己的懒惰了. Dim op Set op=WScript.CreateObject("WScrip ...
- Linux 高性能服务器编程——Linux服务器程序规范
问题聚焦: 除了网络通信外,服务器程序通常还必须考虑许多其他细节问题,这些细节问题涉及面逛且零碎,而且基本上是模板式的,所以称之为服务器程序规范. 工欲善其事,必先利其器,这篇主要来探 ...