上篇博客总结了对象图:http://blog.csdn.net/wang18631061452/article/details/50183957,这次包图完成后,静态图就OK了。
包图
一、包
1.为什么要包?
1.1在面向对象软件开发的视角中,类显然是构建整个系统的基本构造块。但对于庞大的系统,其包含的的类成百上千,再加上类间的复杂的关联关系、多重性等,必然大大超出了人们可以处理的复杂度。于是引入了“包”这种分组事物构造块。
1.2包的作用:
1)对语义上相关的元素进行分类
2)定义模型中的“语义边界”
3)提供配置管理单元
4)在设计时,提供并行工作的单元
5)提供封装的命名空间,其中所有名称必须唯一
2.包的概念
一种名字空间(namespace)或容器(container).包在UML中,如图:
3.包的元素
在包中可以拥有其它各种元素,包括类、接口、构件、节点、协作、用例,甚至其它子包或图。意味着元素在这个包中声明的,因此一个元素只能属于一个包。
4.可见性
用“+”来表示“public”, 用“#”来表示“protected”, 用“-”来表示“private”
包内元素的可见性,标识了外部元素访问包内元素的权限
5.包的表示
二、包图
1.包图中的关系
包图有2种关系:依赖 、泛化
依赖关系
分4种。在依赖关系中,我们把箭尾端的包称为客户包,把箭头端的包称为提供者包
下面我们用一张图来说明
1.《use》关系
《use》关系是一种默认的依赖关系,说明客户包中的元素以某种方式使用提供者包的公共元素,也就是 客户包依赖于提供者包。例图中有2个《use》依赖,client包将通过server包来完成order的存储,而server包使用System.Data.sqlClient 包来实现数据库的存储。
2.《import》关系
《import》关系:最普遍的包依赖类型,说明提供者包的命名空间将被添加到客户包的命名空间中,客户包中的元素也 能够访问提供者包的所有公共元素。
《import》关系使命名空间合并,党提供者包中的元素具有与客户包中的元素相同的名称时,将会导致命名空间的冲突。这也意味着,当客户包的元素引用提供者包的元素时,将无需使用全称,只需使用元素名称即可。
例图中:Client包引用(import)了rule包,Rule包又引用了GUI包,同时,这还间接表明Client包引用了GUI 包。
3.《access》关系
如果只想使用提供者包的元素,而不想合并这两个包,则应该使用该关系。在客户包中必须使用路径名,才能访问提供者包中的所有公共元素
4.《trace》关系
想表示一个包到另一个包的发展历史,则需要使用《trace》关系表示。
泛化关系
泛化联系表达事物的一般与特殊的关系。如果两个包存在泛化,意指其中的特殊性包必须遵循一般性包的接口。
2.如何阅读包图?
1)根据《use》关系可以发现Client包使用server包,server包使用system.data.sqlclient包,根据它们所包含的元素,得知client包负责order(订单)的输入,并通过Server包管理用户的登陆( loggingservice)和数据库存储(database),而server包还通过.net 的SQL serve访问工具 包,来实现与数据库 的连接和通讯。
2)看《import》关系,从rule包的元素,得知该包负责处理一些规则,并引用了一个具体的窗体(Window);而client包通过引用rule来实现整个窗体和表单的显示,输入等,并且还将 暂存order(订单)信息
3)包的泛化关系。GUI有两个具体实现,一个C/s的WIndows GUI ,一个实现B/S的WebGUI.
3.如何使用rose创建包图?
良好包结构的关键是包内高内聚,包间低耦合。
包既可以在rose的"logic view "处创建,又可以在“component view”处创建。
双击“logic view”目录下“main"选项,在出现的工具栏选择按钮。
选中包,右击选择”select compartment ITems" ,包下面的类信息