[注] 本文不是包图的基础教程, 只是包图的图形总结.

学习UML图形

推荐阅读<UML参考手册>第2版. http://www.umlchina.com/

推荐微软的开发软件设计模型 http://msdn.microsoft.com/zh-cn/library/dd409436.aspx

包图主要用来表现包和它所包含元素的组织, 包图最常用的用途是用来组织用例图和类图, 尽管它不局限于这些UML元素.

〇 概述

包图可使用的工具集(EA工具箱)有:

一 包图元素 

1. 包

Package, 图形表示为一个文件夹, 包的版型(StereoType)有:

1) 普通包, 表示为一个文件夹, 如图Package1和Package4

2) 其它包, 表示为一个文件夹+书名号包含的具体版型或特殊符号, 如图Package2和Package3

2. 类

Class, 图形表示为一个实心矩形或圆形(椭圆)[+一系列附加符号], 类的版型(StereoType)有:

1) 普通类, 表示为一个实心矩形, 如图Class1

2) 边界类, 表示为一个实心圆形+实竖线, 如图Class2

3) 实体类, 表示为一个实心圆形+实横线, 如图Class3

4) 控制类, 表示为一个实心圆形+在圆周上的箭头, 如图Class4

5) 其它类, 表示为一个实心矩形或圆形(椭圆)+书名号包含的具体版型或特殊符号, 如图Class 5, 6, 7 ...

[注1] 类图标变化最大, 版型最多, 必须根据所属的视图或图形进行识别, 如Class2在包图和类图中称为边界类, 在活动图中同样的图标应称为边界对象.

[注2] 类图标的矩形表示和Artifact相似, 都是实心矩形, 区别方法是Artifact图标会含有Icon, 而类图标一般几何元素拼凑.

[注3] 类图标的椭圆表示和用例相似, 都是实心椭圆, 但用例不会出现在类图上, 类也不应该出现在用例图上, 因此不会冲突.

[注4] 包图上的类一般引用类图, 类图内部的画法, 参见类图部分. (下同)

3. 接口

Interface, 图形表示为一个实心矩形+书名号包含的interface字样, 接口没有版型(StereoType).

接口是特殊的类, 因此图标和类相同, 书名号包含的interface是其区别与类的唯一方式.

注意: 接口如果没有明确的详细操作,也可以画成一个圆环。当画成圆环的时候,到这个环形标柱的实现连接没有目标箭头。

4. 数据类型

DataType, 图形表示为一个实心矩形+书名号包含的datatype(或其它)字样, 数据类型的版型(StereoType)有:

1) 数据类型, 表示为一个实心矩形+书名号包含的interface字样, 如图DataType1

2) 基本类型, 表示为一个实心矩形+书名号包含的interface字样, 如图PrimitiveType1

3) 枚举类型, 表示为一个实心矩形+书名号包含的interface字样, 如图Enumeration1

4) 表格类型, 表示为一个实心矩形+书名号包含的interface字样, 如图Table1

5) 信号类型, 表示为一个实心矩形+书名号包含的interface字样, 如图Signal1

6) 其它类型, 表示为一个实心矩形+书名号包含的其它字样, 如图DataType 2, 3, 4 ...

[注4] 数据类型用来描述形如枚举, 结构, 表格等特殊的数据类型或类, 同样的, 使用不同的版型是为了定义更准确.

5. 关系

5.1 包与包之间的关系 

1) 合并 merge, 表示为一条虚线+单向空心箭头+书名号包含的merge字样, 箭头指向被合并的包, 如图Controller合并GenApply

包合并定义了一个包的内容是如何被另一个包扩展的关系(包合并定义了源包元素与目标包同名元素之间的泛化关系).

2) 导入(引入) import/access, 表示为一条虚线+单向空心箭头+书名号包含的import/access字样, 箭头指向被合并的包, 如图Controller导入Interger

包导入是一种允许采用非限定性名称访问来自于另一个命名空间中的元素的关系.

3) 嵌套 nesting, 表示为一条实线+带十字线的实心圆, 圆远离被合并的包, 如图Controller嵌套ConnSeq(即ConnSeq被嵌套)

源包和目标包间的嵌套连接符说明目标包完全包含源包.

5.2 类与类(接口/数据类型)之间的关系

本图中使用的例子来自 http://blog.csdn.net/tianhai110/article/details/6339565

1) 实现 realization, 表示为一条虚线+单向空心箭头, 箭头指向被实现的接口

2) 泛化 generalization, 表示为一条实线+单向空心箭头, 箭头指向被泛化的基(父)类

3) 依赖 dependency, 表示为一条虚线[+单向或双向开口箭头], 单向箭头表示单向依赖

4) ① 关联 association, 表示为一条实线[+单向或双向开口箭头], 单向箭头表示单向关联

4) ② 聚合 aggregation , 表示为一条实线[+单向空心菱形], 空心菱形箭头指向目标类或父类

4) ③ 组合 composition, 表示为一条实线[+单向实心菱形], 实心菱形箭头指向目标类或父类

[注5] 应避免双向依赖.

[注6] 几种关系所表现出的强弱程度从弱到强依次是: 依赖<关联<聚合<组合(即耦合度: 组合>聚合>关联>依赖).

6. 可见性

6.1 包的可见性 

Package Visibility, 使用版型(StereoType)表示, <<import>>表示public, <<access>>表示private

[注] import VS access:

Ordering在import导入Products和Pricing后可直接使用Products和Pricing包内的元素;

Ordering在access导入Storage后仍可直接使用Storage包内的元素;

而当Ordering被其它包引用时, 其它包只能直接使用Products和Pricing包内的元素, 不能直接使用Storage包内的元素; 但仍可采用Storage::Goods这样的限定性名访问Storage包中的元素.

6.2 类(接口/数据类型)的可见性 

Class Visibility, 使用 +/-/#/~ 符号表示

1) 公共 public, 用 + 号表示, 如图Storage包内Goods类的GetCount成员

2) 私有 private, 用 - 号表示, 如图Storage包内Goods类的Count属性

3) 保护 protected, 用 # 号表示, 如图Storage包内Goods类的SetCount成员

4) 包 package, 用 ~ 号表示, 代表包内可见, 如图Storage包内Goods类的Test成员

二 UML通用元素

参见UML参考手册中的特性描述部分, 如一些注释元素, 不单只能画到用例图中, 而是通用的可以画到任何UML图形上的.

如图边界右上角的注释元素

三 包图总结 

本节中出现的建议可应用到任何一种UML图的包应用上, 并非只是包图上.

1. 包的命名要简单, 具有描述性

例如Shipping, Customer, Enrollment和Manage, 这样包包含了些什么就非常的清楚了.

2. 应用包是为了简化图

通常在一个图变得笨重, 单一页中打印不下的时候引入包. 换句话说, 遵循通用指南一一把大的图重新组织为较小的图, 你需要对模型使用分而治之的方法.

3. 包应该连贯

你插入包中的任何东西都应该有意义, 都需要考虑包中的其余内容. 为了确定一个包是否连贯, 一个好的经验法则是你是否能够用一个短的, 描述性的名称为包命名.

如果你做不到这一点, 你或许就已经把几个不相关的事务放到包中了.

4. 在包上用版型注明架构层

我们通常会把设计组织到架构层次中, 例如user interface, business/domain, persistence/data和infrastructure/system.

5. 避免包间的循环依赖

包A依赖于包B, 包B依赖于包C, 而包C依赖于包A, 这就形成了循环: A-B-C-A, Knoernschild (2002)建议尽量避免出现这种情况.

因为包之间彼此紧密耦合, 将来的维护和改进将变得困难. 循环依赖是一个很好的信号, 意味着你需要重构一个或多个的包, 把导致循环依赖的因素从包中除掉.

6. 包依赖应该反映内部关系

当一个包依赖于另一个时, 这意味着两个包的内容间存在着一个或多个的关系. 例如: 如果是一个用例包图, 那么就有可能两个用例之间存在includes, extends, 或继承关系, 而两个用例分别处于不同的包中.

总结来自 http://developer.51cto.com/art/201007/209059.htm

相关链接:

UML 结构图之用例图 总结 http://www.cnblogs.com/snowyying/p/UML_UseCase.html

转载请保持原文完整. http://www.cnblogs.com/snowyying/p/3898567.html 

UML 结构图之包图 总结的更多相关文章

  1. UML对象图和包图

    UML九已经介绍过的基本图,然后,我们再来看看对象图和包图.  一.对象图 谈到对象.我们不得不说一下对象.对象(Object)是对象类的实例(Instance),用于模型化特定的实体.对象是唯一的. ...

  2. UML对象图、包图

    对象图(Object Diagram)显示了一组对象和他们之间的关系.使用对象图阿狸说明数据结构,类图中的类或组件等实例的快照.对象图和类图一样,反应了系统的静态过程,但它是以实际的或原型化为基础来表 ...

  3. UML精粹4 - 对象图,包图,部署图,用例

    对象图object diagram 对象图是某个时间点上的对象在系统中的快照,也经常被称为实例图.一般在展示组合对象结构时比较有用.例如 组合结构的类图 一个时刻的对象图 包图package diag ...

  4. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  5. UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  6. <十四>UML核心视图静态视图之类图和包图

    一:类图(行为类和实体类) --->类图用于展示系统中的类及其相互之间的关系 --->概念层类图 --->说明层类图   二:概念层类图 --->概念层的观点认为:在这个层次的 ...

  7. 使用包图 (UML Package Diagram) 构建模型架构

    包图用于以包包含层次结构的形式显示模型的组织方式.包图还可以显示包包含的模型元素以及包与其包含的模型元素之间的依赖关系. 在项目开发中,模型元素可能会很快达到大量数量,因此需要以某种方式构建它们,即使 ...

  8. UML 用例图、顺序图、状态图、类图、包图、协作图、流程图

    ​用例图.顺序图.状态图.类图.包图.协作图 面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling La ...

  9. [UML]UML系列——包图Package

    系列文章 [UML]UML系列——用例图Use Case       [UML]UML系列——用例图中的各种关系(include.extend)       [UML]UML系列——类图Class   ...

随机推荐

  1. NSString 转换 float 的精度问题, 换double类型可以解决

    @"0.01" 转换成float时, 经常会变成  0.009999799 这种形式, 因为float类型无法精准保存, 系统会选一个接近的值来代替. 而double类型则可以有更 ...

  2. 【转】java中静态代码块的用法 static用法详解

    原文网址:http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html (一)java 静态代码块 静态方法区别一般情况下,如 ...

  3. Android自定义组合控件

    今天和大家分享下组合控件的使用.很多时候android自定义控件并不能满足需求,如何做呢?很多方法,可以自己绘制一个,可以通过继承基础控件来重写某些环节,当然也可以将控件组合成一个新控件,这也是最方便 ...

  4. Android Activity管理类

    public class AppManager { private static Stack<Activity> activityStack; private static AppMana ...

  5. STL总结之functor

    STL中仿函数是重要的组成部分.所谓的仿函数就是通过重载括号运算符实现的, 如下: STL库中都是泛型仿函数如小于操作: STL中定义了许多有用的操作,如less(小于), less_equal(小于 ...

  6. 图文教您轻松学会用PS设计制作名片

    图文教您轻松学会用PS设计制作名片 http://jingyan.baidu.com/article/49711c614e7370fa441b7ca3.html

  7. Git分支管理的基本操作

    首先从远端版本库clone下来一个全新的库: git clone username@xxx:/xxx/xxx.git 此时clone下来的,只是master分支,没有其他分支. 查看分支: git b ...

  8. 在windows下创建基于github的hexo静态博客

    最近边上的人都突然买起了域名搭起了个人网站,渣渣的我介于期末没事干也跟风搭了个静态博客.虽说博客基本不更新T T,嘛嘛回归正题. 首先准备工作: 1)安装nodejs 2)安装msysgit(虽然现在 ...

  9. [codevs2152]滑雪

    题目来源 http://www.tyvj.cn/p/1004 http://www.luogu.org/problem/show?pid=1434# http://codevs.cn/problem/ ...

  10. Android Studio 导入项目错误

    Gradle DSL method not found: 'Android()' 错误原因: android studio 引进项目时,自动查找本机是否有项目设置的SDK版本,若发现没有,我们会在pr ...