您的位置:首页 > 其它

UML类图

2015-12-16 16:01 183 查看

前言:

在谈类图之前,我们有必要回顾下什么是类:类是具有相似结构、行为和关系的一组对象的描述符。类是面向对象思想中最重要的一环,可以说我们正是借助类来实现对现实世界的可视化抽象的。没有类的面向对象思想是苍白的;而类图则是实现类可视化的一个工具。类图不但是设计人员关心的核心,还是实现人员最关注的的一环。因为建模的主要依据就是类图。

构成:

类在类图中由类名、属性和操作这三个要素构成。至于如何理解属性和操作,我们可以通过练习客观世界进行理解。属性的话,特指一些静态的东西,例如我们头发的颜色;操作的,特指一些我们发出的动作,如我们的老师的一个操作是讲课,诸如此类等等。比较有趣同时也是比较无趣的一点是,由于可见性的问题,类图中的类有好几种形式。从这一点来说,其他八种图简直屌丝。。。。

关系

言归正传,扯得有点远了。下面我们来说类图中用到的的关系。个人认为,相对于用例图,类图中的关系要求的更为精准。具体来说,类图中用到的关系有关联、泛化、依赖和实现,其中关联又包括普通关联、聚合和组合。而关于前面提到的类图对关系要求的更为具体,主要体现在这样一个原则上:第一点,能用关联描述的关系绝对不能用依赖应付;第二点,可以使用聚合表示的绝对不能使用组合表示,这两点可以概括为精准和强内聚弱耦合。关于类图中的具体关系的详细情况,请参看下面这张导图:



就我目前的能力来看,类图中的关系时最复杂并且要求的最严格的了,所以我们有必要了解下类图中的关系。总体来说,类图用到了UML关系中的所有:关联、泛化、依赖和实现。而且类图是将泛化这一概念用到了机智的一张图。其他八张图大多只是对各自的属性和方法进行了泛化;而类图不仅仅只是对各自类的属性和方法进行了泛化,还对类本身进行了泛化,即所谓的继承。下面我们来看一下关于这四种关系的具体介绍。

泛化

我们先从在类图中出现频率最多的泛化开始。所谓泛化其实就是我们经常提到的面向对象思想中的继承。而继承就是继承者从被继承者那里获得一些属性和方法,这里说的获得指的是继承者只需要知道被继承者的属性和方法的接口就可以具有被继承者相应的属性和方法,而不必要在对这些属性和方法进行代码编写。此外,继承者就是所谓的子类,被继承者就是所谓的父类。另外一点需要我们注意的是,泛化中有单重继承和多重继承这两个概念。单重继承指的是子类只能选择一个父类进行继承,而多重继承指的是子类可以选择多个父类进行继承。

表示

泛化在图中是用一个空心箭头来表示的:箭尾部分的是子类、箭头部分的是父类。如下图



下面我就给出具体的例子来展示下单重继承和多重继承的例子。

单重继承



多重继承



这里我们展示下操作员的代码:
Option Explicit

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''
''  操作员.cls
''  Implementation of the  Class 操作员
''  Generated by Enterprise Architect
''  Created on:      16-十二月-2015 10:50:25
''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Implements Interface1

Public m_Class3 As Class3

Public Sub 打印报表()

End Sub


从代码里面我们可以看出来:类的属性和方法都是经过封装处理后通过调用来实现的。

关联

关联强调的是一种结构性关系。至于什么是结构性关系,在网上查了好久只找到一条比较靠谱的解释:Java编程语言中,类A关联B的含义是:如果实例化一个A类的对象,同时会有一个B类的对象被实例化,关联—百度百科



表示

普通关联是用一条直线表示的;聚合是用一条空心菱形指引方向的直线表示的;而组合则是通过一条实心菱形引导方向的直线进行表示。我们需要注意的是,相对于聚合和组合来说,普通关联一种地位比较平等的关系,例如朋友之间的关系:我是你的朋友,相反你也是我的朋友,我们两个是平等;而聚合和组合则更偏向于一种部分和整体或者说是上下级的关系。此外因为聚合是一种弱耦合关系,所以聚合关系中整体和部分时可以分离的,也就是说他们可以有各自的生命期,例如笔记本和硬盘之间的关系就是聚合关系;而组合则不一样,组合是一种强耦合关系,整体和部分是不可以分离的,整体生命期的结束同时也是部分生命期的结束,树和叶子之间就是这种组合关系。
聚合举例:



组合举例



正像上图提到的笔记本和硬盘以及树和叶子:笔记本损坏了硬盘不一定损坏,即硬盘离开笔记本依旧能长时间稳定存在;但树和叶子不同,树死了叶子不可能长期的保持活力。

混合举例

我对类中出现比较频繁的泛化和关联理解就先到这里。下面我们通过一张图来实际观察下泛化、关联、依赖和实现的表示。



总结:

以上就是我对类图的一部分理解了。其实不仅角色可以用类图进行表示,功能和窗体以及控件同样可以用类图进行表示。使用类图重点是有一个清晰的用例图作指导并且能够很好地进行抽象,此外还要处理好各个类之间的关系:力求描述的精准;能够聚合的绝对不用组合应付;能够适用关联描述的绝对不用依赖泛泛而谈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: