码迷,mamicode.com
首页 > 其他好文 > 详细

uml精粹——6.对象图 & 7.包图

时间:2015-05-24 15:45:50      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:

6.对象图object diagram
  一个对象图是系统在某一刻时对象的快照snapshot。他展示的实例而不是类,对象图也经常叫实例图instance diagram。  
  你可使用对象图来展示对象们的样例配置example configuration。在对象间的连接connection比较复杂的时候很有用。

  见图6.1.

技术分享

  你可以看出6.2是实例,因为名字都有下划线。每个名字都用 实例名:类名 的形式。两个部分的名字都是可选的,所以John, :Person, aPerson也是合法的名字。如果你只用类名,你需要包括这个冒号。你可以显示属性attribute和链接link的值。
  严格讲,一个对象图的元素是实例规格instances specification,而非真的实例。原因是 可以让托管的mandatory属性为空 或 显示一个抽象类的实例说明。你可以把一个实例说明 当做部分定义的实例partly defined instance。
  另外一个方式,可以把一个对象图当做一个没有消息的通信图communication diagram。
  很多时候,你可以精确的定义以一个类图的结构,但这些结构仍然很难理解。这时,一些对象图例子可以帮助理解。


7.包图package diagram
  类代表架构一个基于对象系统的基础形式。尽管很有用,但在架构更大的可能有很多类的系统时,可能还需要其他的。
  一个包package是一个组构造grouping construct,允许你使用uml里的任何构造construct,并把元素放到一起形成更高级的单元higher-level unit。他最普遍的用法是将类分组,当然也可以使用uml其他元素。
  在一个uml模型中,每个类是一个包的一个成员。包也可由很多其他包作为成员。这样会有一个层级结构——顶层包被分成很多子包,直到最底部是类。一个包可以包含子包或类。
  以程序术语,这里的包跟java里的package、c++和.net里的namespace对应。
  每个包代表一个命名空间namespace,代表每个类有一个独一无二的名字(被拥有的包)。为了清除谁是谁,可使用一个全资格名fully qualitied name。在uml里使用双冒号显示包名:
System::Date MartinFowler::Util::Date
  图中,包用一个tabbed folder表示。你可使用全符号或者简单的普通名。

  见图7.1

技术分享

  uml允许包里的类为public或private。一个公共的类是包里接口的一部分,并可被其他包使用。一个私有的类是被隐藏的。不同的语言类的可见性不同。
  一个有用的技术来减少包的接口 是在包的公关类的导出很少的操作子集。你可以让所有的类都私有,然后添加公共类来提供公共行为。这些类叫facades。
  你怎样选择类被放到哪个包里?2个有用的准则是:共同封闭原则(ccp = common closure principle)和共同重用原则(crp = common reuse principle)。共同封闭原则表示在一个包里的类应该 因为相似的原因而需要改变(一起修改)。共同重用原则表示一个包里的类应该全部一起被重用(一起被依赖)。将类分组的很多原因是为了处理包之间的依赖。


【包和依赖】
  一个包图显示包和他们的依赖。如果你有展示和业务的包,如果展示包里任何一个类依赖了业务包里的任何一个类,则展示包依赖业务包。就是包之间的依赖概括说就是其内容间的依赖。
  我觉得从没有原型化的依赖unstereotyped dependency开始会简单点。
  一个好的包结构有一个清晰的流向依赖。

  见图7.2

技术分享

  经常,你可以分辨出一个清晰的流动,因为所有的依赖都走一个方向。
  有些人说依赖不能闭合,但我说不绝对,但我认为循环依赖应该局部化localized,特殊的你不应该有跨层的循环依赖have cycles that cross layers。
  到一个包里的依赖越多,包的接口就需要越稳定。因为他接口的任何改变会连累到依赖它的所有包。经常,你会发现更稳定的包 会有更高比例的接口和抽象类。
  依赖关系不是可传递的。
  有些包在很多地方被使用了,如果绘制依赖线会很混乱。这时可在包上用关键字:<<global>>
  
【包方面package aspect】
  从上图中,你可看到两种结构。一个是层次结构:presentation、domain、data mapper、database。另外一个是子领域的结构:leasing和assets。

  见图7.3。分成两方面。

技术分享

  
【实现包】

  见图7.4.

技术分享

  一个包可由其他包实现。
  见图7.5
技术分享

【何时用】
  我发现在处理大规模系统时得到一张展示一个系统主要元素间依赖关系的图是很有用的。绘制包和依赖的图帮助你控制程序的依赖。
  包图代表一个编译时分组机制。要显示对象在运行时如何组成的,使用一个组合结构图composite structure diagram。

uml精粹——6.对象图 & 7.包图

标签:

原文地址:http://blog.csdn.net/adfansong/article/details/45952239

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!