§8 包图、组件图、部署图

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.2.1 重用等价原则(REP)
重用等价原则指的是把类放入包中时,应考虑把包作为可重用的单元。 这种设计原则和用户的使用心理有关,对于可重用的类,其开发可能 比较快,开发人员会不断地推出这些可重用类的升级版本。 但对于可重用类的使用者来说,不会随着可重用类的每次升级而修改自 己的系统,不过,在需要升级的时候又会要求很容易地用新版本的可重用类 替换旧版本的可重用类。因此设计包的一个原则是把类放在包中时要方便重 用,方便对这个包的各个版本的管理。
1.4 小结 1.包就像一个“容器”,可用于组织模型中的相关元素。 2.包之间可以存在依赖关系,但这种依赖关系没有传递性。 3.在设计包时,应遵循重用等价原则、共同闭包原则、共同 重用原则、非循环依赖原则等。 4.包是一种很有用的建模机制,除了在OO设计中对建模元素 进行分组外,在数据建模、Web建模、支持团队开发等方 面有不可替代的作用。
2.2 组件图的作用
组件图可以对以下几个方面建模: (1)对源代码文件之间的相互关系建模,如图2.2所示。
(2)对可执行文件之间的相互关系建模。如图2.3所示表示的是某可运 行系统的部分文件之间的相互关系。
在图2.3中,IDriver是接口,组件path.dll和接口 IDriver之间是依赖 关系,而组件dirver.dll和接口 IDriver之间是实现关系。
包与包之间可以存在依赖关系,但这种依赖关系没有传递性。
如图1.2所示是包之间非传递依赖的例 子,包User Services依赖于包Business Services,包Business Services又依赖于包 Data Services,但包User Services并不依赖于 包Data Services。图中的依赖关系的版型都 是《import》,表示源包会存取目的包中的 内容,同时目的包中的内容是加到源包的名 字空间的。这样在引用目的包中的内容时不 需要加包名限定,直接用目的包中的元素名 字即可。
1 包(Package) 重点: 1.包的定义 2.在设计包时应遵循的原则
1.1 包的基本概念
定义:包是一种对模型元素进行成组组织的通用机制。 包用于定义一个名字空间或容器(Container)。它本身也是UML的一种 模型元素。
运用包可以把语义上相近的可能一起变更的模型元素组织在同一个包里, 对包中的元素作为一个整体对待,并且控制它们的可见性和存取。 软件开发时常见的一个问题是如何把一个大系 统分解为多个较小系统。分解是控制软件复杂性的重 要手段。在结构化方法中,考虑的是如何对功能进行 分解,而在OO方法中,需要考虑的是如何把相关的 类放在一起,而不再是对系统的功能进行分解。包在 开发大型软件系统时是一个非常重要的机制。包中的 元素不仅仅限于类.可以是任何UML建模元素。包 就像一个“容器”,可用于组织模型中的相关元素以 便更容易理解。 如图1.1所示是一个包的例子。
组件就是一个实际文件,可以有以下几种类型: 配置组件(deployment component),如 dll文件、exe 文件、COM十对 象、CORBA对象、EJB、动态Web页、数据库表等。 工作产品组件(work Product component ),如源代码文件、数据文件 等,这些组件可以用来产生配置组件。 执行组件(execution component),也就是系统执行后得到的组件。 组件图中的组件和类图中的类很容易混淆,下面是它们之间的几个不同点: 类是逻辑抽象,组件是物理抽象,即组件可以位于节点 (node)上。 组件是对其他逻辑元素,如类、协作(Collaboration) 的物理实现。 类可以有属性和操作,组件通常只有操作,而且这些操 只能通过组件的 接口才能使用。
2.4 小 结
1.组件表示的是一个具体的物理元素。 2.组件图用于显示一组组件以及它们之间 的相互关系。 3.使用组件图可以对源代码文件之间、可 执行文件之间的相互关系建模。
习题:
1.组件图是什么? 2.组件图中的组件和类图中的类有什么不同? 3.组件图的作用是什么?
3 部 署 图 3.1 什么是部署图
1.2 设计包的原则
在考虑如何对类进行分组并放入不同的包时,主要是根据类之间的依赖 关系进行分组。
包中的类应该是功能相关的,在建立包时,应把概念上和语义上相近 的模型元素纳入一个包。依赖关系其实是耦合的一种体现,如果两个包中 的类之间存在依赖关系,那么这两个包之间也就有了依赖关系,也就存在 了耦合关系。好的设计要求体现高内聚、低耦合的特性。 在设计包时,应遵循以下原则: 1. 重用等价原则(Reuse Equivalency Principle,REP) 2. 共同闭包原则(Common Closure Principle,CCP) 3. 共同重用原则(Common Reuse Principle,CRP) 4. 非循环依赖原则(Acyclic Dependencies Principle,ADP)
AWT +Window #Form -EvebtHandler 图1.1 AWT包
对包的命名有两种方式,即简单包名名(simple name)和路径包名(path name)。例如Vision)是一个简单的包名,而Sensors::Vision是带路径的包名。 其中Sensors是Vision包的外围包,也就是说,Vision包是嵌套在Sensors包中 的。包可以嵌套,但在实际应用中,嵌套层次不应太深。
AWT +Window #Form -EventHandler 图1.1 AWT包
包中可以包含其他建模元素,如类、接口、组件、节点、用例、包等。 就像对类的属性和操作可以进行可见性控制一样,对包中元素也可以进行 可见性控制。
图1.1中的AWT包有3个元素:Window、Form和 EventHandler。其中window的可见性为公有的(Public), 表示在任何导入(import)AWT包的包中,都可以引用 Window这个元素;Form的可见性为保护的(protected), 表示只有AWT包的子包才可以引用Form这个元素; EventHandler的可见性为私有的(privated),表示只有 在AWT包中才可以引用Event Handler这个元素。
1.2.2 共同闭包原则(CCP)
共同闭包原则指的是把那些需要同时改变的类放在一个包中。
例如,如果一个类的行为或结构的改变要求另一个类作相应的改变,则 这两个类应放在一个包中;或者在删除了一个类后,另一个类变成多余的, 则这两个类应放在一个包中;或者两个类之间有大量的消息发送,则这两个 类也应放在一个包中。
1.2.3 共同重用原则(CRP)
共同重用原则指的是不会一起使用的类不要放在同一包中。
这个原则和包的依赖关系有关。如果元素A依赖于包P中的某个元素, 则表示A会依赖于P中的所有元素。也就是说,如果包P中的任何一个元素做 了修改,即使所修改的元素和A完全没有关系,也要检查元素A是否还能使 用包P。 所以一个包中包含的多个类之间如果关系不密切,改变其中的一个类 不会引起别的类的改变,那么把这些类放在同一个包中会对用户的使用造 成不便。修改了一个对用户实际上毫无影响的类,却使得用户不得不重新 检查是否还可以同样方式使用新的包是不合理的。 注意:重用等价原则、共同闭包原则、共同重用原则这3个原则事实上是相 互排斥的,不可能同时被满足。它们是从不同使用者的角度提出的, 重用等价原则和共同重用原则是从重用人员的角度考虑的,而共同闭 包原则是从维护人员的角度考虑的。共同闭包原则希望包越大越好, 而共同重用原则却要求包越小越好。 一般在开发过程中,包中所包含的类可以变动,包的结构也可以相应地 变动。例如,在开发的早期,可以共同闭包原则为主。而当系统稳定后,可 以对包做一些重构(refashion),这时要以重用等价原则和共同重用原则为 主。
部 署 图 ( deployment diagram )也称配置图、 实施图,是对OO系统物理 方面建模的两个图之一 (另一个图是组件图), 它可以用来显示系统中计 算节点的拓扑结构和通信 路径与节点上运行的软构 件等。一个系统模型只有 一个部署图,部署图常常 用于帮助理解分布式系统。 部署图由体系结构设 计师、网络工程师、系统 工程师等描述。图所示是 一个部署图的例子。
来自百度文库
User Services
《import》
Business Services
《import》
Data Services
图1.2 包之间的非传递依赖关系
另外,与UML中其他建模元素类似,包之间也可以有泛化关系。子包继 承了父包中可见性为public和protected的元素。 如图1.3所示是包之 GUI 间泛化关系的例子,其中 +Window 包WindowsGUI泛化了包 +Form GUI,包WindowsGUI继 #EventHandler 承了包GUI中的Window 和EventHandler元素,同 时包WindowGUI重新定 WindowsGUI 义(即覆盖)了包GUI中 +GUI::Window 的Form元素,而VBForm +Form 是包WindowsGUI中新增 #GUI::EventHandler MacGUI +VBForm 加的元素。与子类和父类 之间存在替换原则一样, 子包和父包之间也存在替 图1.3 包之间的泛化关系 换原则,即子包可以出现 在父包能出现的任何地方。
习题: 1.什么是包? 2.什么是包的泛化、包的依赖? 3.包和类有何区别? 4.哪些模型元素可以组成包? 5.当把模型元素组成一个包时应该考虑哪些问题? 6.对超市管理系统绘制相应的包图。
2 组 件 图
2.1 什么是组件和组件图
组件(component)是系统中遵从一组接口且提供其实现的物理的、可 替换的部分。组件图(component diagram)则显示一组组件以及它们之间 的相互关系,包括编译、链接或执行时组件之间的依赖关系。组件图是对OO 系统物理方面建模的两个图之一(另一个图是配置图)。 如图2.1正所示是一个组件图的例子,表示.html文件、.exe文件、.dll 文件这些组件之间的相互依赖关系。
在一个大项目中往往会有很多包,对这些包的管理并不是一件容易的 工作。如果改动了一个包中的内容,则往往需要对这个包及依赖这个包的 其他包进行重新编译、测试、部署等,这往往会带来很大的工作量,因此 希望在改动或升级一个包的时候要尽量少影响别的包。显然,当改动一个 类时,如果那些受影响的类和这个类在同一个包中,则只对这个包有影响, 别的包不会受影响。 共同闭包原则就是要提高包的内聚性、降低包与包之间的耦合度。
1.2.4 非循环依赖原则 非循环依赖原则(ADP)指的是包之间的依赖关系不要形成循环。
也就是说不要有包A依赖于包B,包B依赖于包C,而包C又依赖于包A这 样的情况出现。如果确实无法避免出现包之间的循环依赖,则可以把这些有 循环依赖关系的包放在一个更大的包中,以消除这种循环依赖关系。
1.3 包的应用 除了在OO设计中对建模元素进行分组外,在Rose中,包 可以提供一些特殊的功能。如数据建模中,用包表示模式和 域,在数据模型和对象模型之间的转换是以包为单位进行的; 在Web建模中,包可以表示某一虚拟目录(virtual directory), 在该目录下的所有web元素都在这个包中;另外包在 Rose中 还可以作为控制单元(controlled unit),以方便团队开发和 配置管理。
但是在实际建模过程中,包之间的泛化关系很少用到。 包是UML中的建模元素,但UML中并没有一个包图,通常一些书上所 说的包图指的就是类图、用例图等这些图,只是在这些图中只有包这一元素。
UML中,包是分组事物(grouping thing)的一种,它是在建模时用来 组织模型中的元素的,在系统运行时并不存在包的实例。这点和类不一样, 类在运行时会有实例(即对象)存在。
相关文档
最新文档