包图是UML中用类似于文件夹的符号表示的模型元素的组合,系统中的每个元素都只能为一个包所有,一个包可嵌套在另一个包中,使用包图可将相关元素归入一个系统,一个包中包含附属包、图表或单个元素。简单的来说,我们可以直接将包理解为命名空间,文件夹,是用来组织图形的封装,包图可以用来表述功能组命名空间的组织层次

那么为什么会出现“包”这个概念呢?我们知道,在面向对象软件开发的视角中,类显然是构件整个系统的基本构造块,但是对于庞大的应用系统而言,其包含的类不计其数,再加上类之间阡陌交通的关联关系、多重性等,必然大大超出我们可以处理的复杂度,所以“包”由此而来。今天我们一起来学习一下包图的相关知识,首先,我们来看一下包图的主要内容:

对包图的主要内容有了一个整体的感知,接下来,我们一起来看看包图的简介以及包与包之间有着怎样微妙的关系呢:

我们来看看包与包之间的关系,首先,我们来看依赖关系,如下图

我们看看上述的图例,首先包与包之间的依赖关系跟我们平常所说的类的继承关系是不同的,包括包的访问域不能继承,用于在一个包中,引入另一个包输出的元素,因此A依赖B,包A引入包B中的B方法,B这里的访问权限是公共的,A中的方法是保护的。根据已学的知识,我们知道包和包之间也存在泛化关系,包与包之间的泛化关系,是体现在类与类的关系上,包之间不能画泛化关系,画依赖即可。接下来一张图,我们一起来了解一下包的访问限制:

我们知道了类图的基本概念,以及类图之间的关系,那么包图究竟有着怎样的目的,以及画包图又具有着怎样的准则呢:

了解了包图的目的以及准则,我们再来一起学习一下包图存在的问题以及包图的解决方法:

包图的基本知识就介绍到这里,现在以机房收费系统为例,在具体的系统当中,我们的包图又是如何得到应用的呢:

包是用来封装元素的通用机制,包不仅有助于建模人员组织模型中的元素,而且也使建模人员能控制对包中内容的访问,接下来我们以订单,结算、顾客、送货为例,画出一个详细的包的示例图:

双向箭头表示的意思,两个包之间互相依赖,箭头指向被依赖的一方,比如说订单依赖结算,订单和顾客相互依赖等等。初次接触包图,我用一个小小的例子这样来理解的,如下:

比如说,现在我们要搭一个小狗的窝,一个房屋,还有一个大厦,首先,小狗的窝并不复杂,有四面墙,其中一面墙上有一个能让小狗穿过的洞,还有一个顶棚,在搭小狗窝的时候,我们只需要一小堆木材,即可。再次,我们来看房屋,房屋比较复杂,墙、天花板和地板组成了较大的抽象体,称之为房间。甚至可以把这些房间组成更大的组块,如公共区、卧室区、工作区等 ,这些较大的组可能并不表明他们本身就是与物理房屋有关系的任何事物,而可能只是给出的在逻辑上有关的屋中一些房间的名称,当谈论怎样使用这栋房屋时就使用这些名称。最后我们再来看看大厦,大厦相对于小狗窝和房屋来说较复杂,大厦不仅有墙,天花板和地板等基本结构体,而且还有公共区,零售厅和办公区等较大的组块,这样的组块甚至还可能合并成更大的组块,例如出租区和大厦服务区。这些组块与最终的大厦本身无关,而只是用来组织大厦设计的产物。

所有的系统都是以这种方法组织的,事实上,理解复杂系统的唯一方法就是把抽象组织成更大的组,大多数适度规模的组块如房屋其本身都是像类那样的抽象。再者,如我们上面所说的零售厅,她是纯概念性的,没有实际的实例,他们不是实际系统中明确的对象,而仅仅表示系统本身的视图。

在UML中,我们把组织模型的组块称之为包,一如我们上面所说的例子当中,大厦所包含墙、天花板、地板、公共区、零售厅、办公区等。包是用来把元素组织成组的通用机制,包有助于组织模型中的元素,使得更容易理解。UML之旅,未完,待续......

UML之包图的更多相关文章

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

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

  2. UML:包图

    什么是包图?包图是对UML图进行“打包”,按照你期望的方式进行组织的一种图.包图用于展示宏观上的内容.往往利用包图对类进行“打包”,但包图其实可以对任何UML图进行“打包”.包图是逻辑上的概念,你可以 ...

  3. UML从需求到实现----包图

    上接:UML中图出现顺序 上回讲到用例图,UML中各个图之间的关系.接着根据UML建模中图出现的顺序来总结包图. 用例图确定以后.用户的需求基本上就确定了.接下来要根据用户的要求去设计系统.建模的顺序 ...

  4. [UML]UML系列——时序图(顺序图)sequence diagram

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

  5. [UML]UML系列——活动图activity diagram

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

  6. [UML]UML系列——状态机图statechart diagram

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

  7. 包图Package

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

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

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

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

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

随机推荐

  1. RDO Stack:VMs cannot access external network.

    Issue: There are many root causes to make your openstack vm instances cannot be reached from externa ...

  2. Git 处理tag和branch的命令

    最近想给GitHub 上的项目设置tag,可是使用GitHub Desktop,找了一圈都没找到快速设置Tag 的地方,最后只能通过终端命令来添加了. 想要查看Git 的命令,可以使用 git --h ...

  3. Android Topeka介绍

    概述 当你已经做Android开发一段时间,并苦于进入瓶颈,这个时候阅读一些优秀App的源码是最好的学习进阶方式,前几天,邀请去参加一个Android大会,我作为其中一个演讲者,专门讲解了Androi ...

  4. Windows Python requests 详细模块安装方法

    据说requests是一个很吊的处理网络问题的第三方库.我折腾了半天.终于在Win上安装好了. 网上找到的都不详细,我是反复尝试才成功的. 还是自己写一个傻瓜式的指南吧: 1.安装 Setuptool ...

  5. JAVA面向对象-----包机制

    JAVA面向对象-–包机制 问题: 当定义了多个类的时候,可能会发生类名的重复问题. 在java中采用包机制处理开发者定义的类名冲突问题. 怎么使用java的包机制呢? 1.使用package 关键字 ...

  6. Leetcode解题-树(5.0.0)基础类

    与第二章类似,LeetCode指定了TreeNode实现.为了方便后续习题的编写和测试,创建一个基础父类,包含TreeNode实现,以及create()和print()创建和打印树的方法.其中crea ...

  7. ScrollView的阻尼回弹效果实现(仿qq空间)

    玩过新浪微博,qq空间等手机客户端的童鞋,都应该清楚,在主界面向下滑动时,会有一个阻尼回弹效果,看起来挺不错,接下来我们就来实现一下这种效果,下拉后回弹刷新界面,先看效果图: 这个是编辑器里面的界面效 ...

  8. C语言与java语言中数据类型的差别总结

    在学习java的时候,看到char ch =  '男' ; 我就觉得很奇怪,char类型不是占用一个字节吗?为什么定义成一个汉字被说成是一个字符了? 原来,在C语言中,char在32位操作系统下占用1 ...

  9. iOS7 CookBook精彩瞬间(三)UIActivityViewController的基本使用及自定义Activity

    1.基本使用 UIActivityViewController主要用于分享内容,创建activityView的方法很简单,调用下面的方法创建: [[UIActivityViewController a ...

  10. API创建/更新员工联系电话

    DECLARE ln_phone_id PER_PHONES.PHONE_ID%TYPE; ln_object_version_number PER_PHONES.OBJECT_VERSION_NUM ...