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

学习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. htmlparser使用例子(全) 转载

    1.import java.net.URL;  2.  3.import junit.framework.TestCase;  4.  5.import org.apache.log4j.Logger ...

  2. 如何使用eclipse进行嵌入式Linux的开发

    如何使用eclipse进行嵌入式Linux的开发 作者:曾宏安,华清远见嵌入式学院高级讲师. 如何使用eclipse进行嵌入式Linux的开发 习惯了在windows环境下开发的程序员在转到Linux ...

  3. vpn分配多ip的配置

    1,创建vpn路由和远程访问 --配置并启用和路由远程访问--自定义配置--选择“vpn访问”,“nat和基本防火墙. 2,vpn配置ip路由选择(nat/基本防火墙)--新增接口(选择本地网卡)-- ...

  4. FZU 2092 收集水晶 dp+bfs

    定义dp[t][x1][y1][x2][y2]为在t时刻,人走到x1,y1,影子走到x2,y2所获得最大价值 最终就是所有的dp[max][..][..][..][..]的最大值 然后递推也很自然,枚 ...

  5. Visual Studio 2015 下载地址

    Visual Studio 2015  发行说明: https://visualstudio.com/zh-cn/news/vs2015-vs.aspx Visual Studio  2015 特性简 ...

  6. 【原】Spark中Client源码分析(二)

    继续前一篇的内容.前一篇内容为: Spark中Client源码分析(一)http://www.cnblogs.com/yourarebest/p/5313006.html DriverClient中的 ...

  7. bzoj 3196 Tyvj 1730 二逼平衡树(线段树套名次树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1807  Solved: 772[Submit][Stat ...

  8. ACM编程技巧--常用字符操作函数

    字符串与基本数据类型的转换 int sscanf(buff,"%d%d",&a,&b); //返回值是参数个数 int sprintf(buff,"%d% ...

  9. phpMyAdmin安装设置

    phpMyAdmin是一种MySQL的管理工具,它直接从web上去管理MySQL.   假设你的web(网页存放)根目录是 /var/www/ 假设你的主机web访问是这样的 http://192.1 ...

  10. Storm系列(五)架构分析之Nimbus启动过程

    启动流程图   mk-assignments 功能:对当前集群中所有Topology进行新一轮的任务调度. 实现源码路径: \apache-storm-0.9.4\storm-core\src\clj ...