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

学习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 

转载于:https://www.cnblogs.com/snowyying/p/UML_Package.html

UML 结构图之包图 总结相关推荐

  1. 【设计模式】UML建模之包图、组件图和部署图学习笔记

    UML建模中包图.组件图和部署图学习笔记 对于较大的项目进行UML建模,由于有很多的类和用例,仅仅利用类图和用例图的话,常常会使结构变得更为复杂.此时如果可以以功能模块划将类图和用例图进行封装,可以很 ...

  2. UML—对象图、包图

    一.对象图 1.对象图是什么 在UML中,对象图表示在某一时刻一组对象及它们之间关系的图,对象图可以被看作是类图在系统某一时刻的实例. 2.对象图长什么样子 在图形上,对象图由节点以及连接这些节点的连 ...

  3. 【UML学习】--包图

    [前言] 包图是怎么来的? 在面向对象开发的概念里,类是构造整个系统的基本构造块.但是一个庞大的系统中包含的类是成百上千个的,而且这些类之间的关系也是阡陌交错,所以处理起来十分复杂,这时候就引入了&q ...

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

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

  5. UML 建模步骤 用例图 类图 对象图 包图 顺序图/时序图 状态图 活动图 协作图

    统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明.可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言. UML是面向对象设计的建 ...

  6. java 包图_九步实现UML包图创建

    本文和大家一起讨论一下UML包图的概念,包是一个UML结构,它使得你能够把诸如用例或类之类模型元件组织为组.包被描述成文件夹,可以应用在任何一种UML图上. UML包图简介 一个"包图&qu ...

  7. UML 的九种模型图.UML用例图.ER图.UML项目结构图总结

    UML 的九种模型图 一.作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分. UML语义:描述基于UML的精确元模型定义. UML表示法:定义UML符号的表示法,为开发者或开发工具使 ...

  8. UML设计图(包含用例图,类图,对象图,包图,构件图,部署图)精华汇总,设计师必备

    UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明.可视化.和编制文档的一种标准语言.下面将对UML的九种图+包图的基本概念进行介绍以及各 ...

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

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

最新文章

  1. 高可靠性的php通信框架,跨平台PHP高可靠性通信框架,OHSCE_V0.1.25 发布
  2. mfc cimage加载显示图片_在微信小程序里实现图片预加载组件
  3. 下列有关计算机图形的叙述中错误的是,计算机图形学(9-16)-中国大学mooc-题库零氪...
  4. 设计基于计算机的机械手控制系统,基于PLC的工业机械手控制系统设计
  5. [渝粤教育] 西安交通大学 土力学 参考 资料
  6. 优麒麟安装qq (Ubuntu)
  7. 基于JAVAWeb美食网站设计计算机毕业设计源码+数据库+lw文档+系统+部署
  8. 磨金石教育摄影干货分享|风光摄影后期教程:冷色调变暖色调
  9. 转载《由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断》的解决方案
  10. RPG Maker MV 路标,随机移动,随机对话
  11. Web——CSS页面背景
  12. python提示unmatched_Python: Unmatched group exception
  13. oracle dbms_crypto,dbms_crypto函数包的简单介绍
  14. 关于php内部编码与mysql字符差异问题的研究
  15. Linux浏览器拉起应用程序
  16. 测试用例:对吃鸡游戏进行压力测试
  17. 用友软件T3数据库表结构表名、数据字典
  18. linux创建用户到指定分区,2016年Linux认证考试试题及答案
  19. CSS中Body背景图片的自适应
  20. java的workspace_创建eclipse新的workspace并设置workspace共享配置

热门文章

  1. 相分离相关文章阅读Liquid–liquid phase separation in cellular signaling systems
  2. 在cad如果用计算机,CAD如何使用快速计算器为中的变量区域功能
  3. linux实验二目录与文件查看相关命令,Linux文件和目录管理相关命令(二)
  4. android mvp模式例子_[Android] MVP设计模式及实例
  5. 1至100之和用c语言表达方式,C语言菜鸟基础教程之求1到100的和
  6. 【Ubuntu18.04】Seetaface6人脸识别部署
  7. 代理模式的原理解析入门
  8. Your branch is ahead of ‘origin/main‘ by 1 commit.
  9. hdfs开机启动流程
  10. flume正则拦截器