华南理工大学UML—7.包图.ppt_第1页
华南理工大学UML—7.包图.ppt_第2页
华南理工大学UML—7.包图.ppt_第3页
华南理工大学UML—7.包图.ppt_第4页
华南理工大学UML—7.包图.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,软件需求分析与建模-包图和架构建模,姓名:苏锦钿(SuJD)单位:计算机科学与工程学院时间:2020年5月29日,华南理工大学,软件需求分析与建模,2,静态图:类图、对象图和包图,类和对象的基本概念;三个层次的观点;类图和对象图的基本要素;包图的基本要素;小结。,华南理工大学,软件需求分析与建模,3,包图的基本要素,引言;类关系中的依赖性;包图;包图关系中的依赖性;一个更复杂的包图;包图的可见性;包图的应用。,华南理工大学,软件需求分析与建模,4,引言,大系统将问题复杂化。“攻克”复杂问题的经典方法是“分而治之”。结构化方法采用功能分解来解决这个问题,但传统的结构化方法将过程与数据分离。面向对象技术解决这个问题的基本思路是将许多类集合成一个高内聚、低耦合的类的集合。UML把这种分组机制称为包。不仅类可以运用包的机制,任何模型元素都可运用包的机制。,华南理工大学,软件需求分析与建模,5,什么是包,包是把包元素和图组织到组中的通用机制。每个包具有它自身的名字空间,它用于:分组语义上相关的元素。定义模型中“语义边界”。提供配置管理单元。在设计中,提供并行工作的单元。提供封装的名字空间,其中所有名称必须唯一。,华南理工大学,软件需求分析与建模,6,分析包,UML包的语法非常直接,包图标是文件夹。分析包可以包含:用例。分析类。用例实现。,华南理工大学,软件需求分析与建模,7,例子,华南理工大学,软件需求分析与建模,8,模型包是对模型元素进行分组的机制,它把模型元素划分为子集。模型包可以拥有的建模元素包括类接口部件结点协同用例模型图,华南理工大学,软件需求分析与建模,9,模型包甚至可以包含其它的模型包。模型包拥有某个元素,就意味着此元素是定义在该模型包内的。任何一个模型元素只能被一个模型包拥有。如果一个模型包被从模型中删除,则此模型包拥有的所有模型包都将被同时删除。模型包本身为其所拥有的模型元素构成类了一个名字空间(namespace),这意味着同属于一个模型包的各个同类建模元素不得具有相同的名字,而分属于不同模型包的建模元素可以具有相同的名字,而且它们代表了不同的建模元素。,华南理工大学,软件需求分析与建模,10,在同一个模型包内,不同种类的建模元素可以具有相同的名字,但不建议这样做。模型包可以被嵌套,一个模型包还可以拥有另一个模型包。一般,模型包的嵌套深度应该控制在2至3层之内,过深的嵌套层数将妨碍对模型的理解。,华南理工大学,软件需求分析与建模,11,类关系中的依赖性,UML指导将类组成包的原则是依赖性:设有两个元素X、Y,如果修改(语法的或语义的)元素X的定义引起对元素Y的定义的修改,则称元素Y依赖于元素X。在类的关系中导致依赖性的原因:一个类向另一个类发送消息;一个类是另一个类的数据成员;一个类用另一个类作为它的某个操作的参数等。,华南理工大学,软件需求分析与建模,12,包图,华南理工大学,软件需求分析与建模,13,包图关系中的依赖性,包图显示类的包以及这些包之间的依赖关系。它们都是类图中的元素,因此包图是另一种类图。如果两个包中的任意两个类之间存在依赖关系,则这两个包之间存在依赖关系。但包的依赖是不传递的。如图示,订单获取应用包屏蔽了订单包的变化对订单获取界面包的影响。,华南理工大学,软件需求分析与建模,14,一个更复杂的包图,华南理工大学,软件需求分析与建模,15,华南理工大学,软件需求分析与建模,16,模型包的可见性和类的可见性是类似的,它用来控制模型包外界的建模元素对模型包内含元素的可访问的权限。它分为三种:(1)公有访问(public)一个模型包的内含元素如果是公有的,就意味着此模型元素可以被任何输入了此模型包的其它模型包的内含元素访问。,华南理工大学,软件需求分析与建模,17,(2)保护访问(protected)如果一个内含元素具有保护访问权限,则它只能被此模型包在继承关系上后继模型包的内含元素访问。(3)私有访问(private)具有私有访问权限的内含元素则只能被属于同一个模型包的内含元素访问。,华南理工大学,软件需求分析与建模,18,包的可见性的图形表示如果包采用了直接在图标上罗列内含元素的表达方式,则以下的表示形式:可用前缀于内含元素名字的加号(+)表示此内含元素为公有元素用减号(-)表示此内含元素为私有元素用井号(#)表示此内含元素是保护元素。,华南理工大学,软件需求分析与建模,19,包图的可见性,当一个包包含子包时,指向该包的依赖可采用构造型transparent和opaque来表明嵌套包的可见性。一个指向该包的子包的依赖能看见该包中的公有类、这些类的公有方法以及该子包的类及其方法。将包中与外界有联系的操作组成一个表示包的公有行为的类,以减小包与外界接口。包有助于发现在何处存在依赖。然后,通过分组打包等手段来减少依赖关系。,华南理工大学,软件需求分析与建模,20,包图的表示,当不需要显示包的内容时,将包的名字放入主方框内;否则将包的名字放入左上角的小方框(称作标签)中,而将内容放入主方框内。标以global的包叫通用包,表示系统的所有其他包都依赖于该包。使用泛化概念时把基类型包定义为一个抽象包,标明abstract,而在其子类型包中定义实现体。,华南理工大学,软件需求分析与建模,21,华南理工大学,软件需求分析与建模,22,包依赖,包通过依赖彼此相关。包定义了封装的名字空间。它的真正意义是包创建了边界,其中所有元素名称必须唯一。同时,它也意味着,一个名字空间中的元素引用另一个名字空间的元素,必须说明所需的元素名称以及通过嵌套名字空间导航到可以找到所需元素的名字空间的方法。这就是元素的路径名。,华南理工大学,软件需求分析与建模,23,四种不同类型包依赖的语义,华南理工大学,软件需求分析与建模,24,传递性,传递性是用于关系的术语,这意味着,如果物件A和物件B间存在关系,物件B和物件C间存在关系,那么物件只和物件C间隐式地存在关系。注意access包关系与import包关系没有传递性,这允许你主动管理和控制模型中的耦合和内聚,不能访问或导入任何东西,除非显式地访问和导入。,华南理工大学,软件需求分析与建模,25,例子,包A中的元素可以看到包B中的元素。包B中的元素可以看到包C中的元素。包A中的元素不能看到包C中的元素。,华南理工大学,软件需求分析与建模,26,嵌套包,包可以在任何深度被嵌套到另一个包中。嵌套包能够看见它的外层包的所有公共元素。外层包不能看见嵌套包的任何元素。注意:如果存在太多嵌套层次,模型变得难以理解和定位。,华南理工大学,软件需求分析与建模,27,两种嵌套表示方法,华南理工大学,软件需求分析与建模,28,包泛化,在包泛化中,特殊子包继承了父包的所有公共元素和保护元素。子包可以添加新元素以及通过提供相同名称实现覆盖父包中的元素。就像类继承一样,包继承必须适用可替换性原则。,华南理工大学,软件需求分析与建模,29,例子,华南理工大学,软件需求分析与建模,30,包构造型,UML为特定目的提供一些标准构造型以裁剪包的语义,如下表所示,华南理工大学,软件需求分析与建模,31,和,系统(system)是模型包的一个变体,它代表当前模型描述的整个软件系统。子系统(subsystem)是模型包的一个变体,它代表软件系统的模型中的一个独立的组成部分。子系统代表软件系统内一个语义内聚的元素的集合,可以用接口为它指定和外界的联系和其外部行为特征。,华南理工大学,软件需求分析与建模,32,外表模型包(facade)是模型包的一个变体,此模型包内只拥有对其它模型包内含元素的引用(通过导入和访问关系描述),它本身不包括任何定义在其中的模型元素。外表模型包用来为某种目的提取其它模型包内的重要元素,并将他们加以呈现。例如,需要将模型中涉及系统外部特性的模型内容呈现给软件的使用者,而将相关的内部实现的模型内容隐藏;而在另一个情形下,可能反之需要将模型中涉及内部实现的内容呈现给软件系统的开发人员,而将系统的外部特性隐藏。,华南理工大学,软件需求分析与建模,33,框架(framework)是一个只包含模式(pattern)的模型包。它是模型包的一个变体。,华南理工大学,软件需求分析与建模,34,在设计开发较为复杂的软件系统时,软件系统的各组成部分可能被分解为不同的模型包,由在空间上处于不同地点的开发小组共同完成,或者这些组成部分将在时间上的不同时刻分阶段地完成。但是,这些处于空间或时间上的不同位置的尚未最终完成的模型包不应影响其它模型包的设计和实现。,华南理工大学,软件需求分析与建模,35,这意味着存根模型包是其它模型包在当前设计模型上的代替物(proxy),而此代替物所代表的模型包目前可能尚未完成。这意味着其它相关模型包应该能够随时参考和引用这些当时尚未完成的模型包。为此,可以把当前正在时间或空间上处于不同位置上的模型包设定为存根模型包(stub)。,华南理工大学,软件需求分析与建模,36,存跟模型包是UML支持团队设计开发的重要概念。在有些工具中,存根的概念被转换为模型包文件的交换机制,这时,每个模型包可以被赋予一个交换文件(例如在ROSE里,交换文件是称为catologue的文件,其后缀名为cat(*.cat)),通过此交换文件的装入和卸出,可以实现模型包的定期交换和更新。,华南理工大学,软件需求分析与建模,37,应用UML:包图,UML包图通常用于描述系统的逻辑架构-层、子系统、包(就JAVA而言)等。层可以建摸为UML包。例如,UI层可以建模为名为UI的包。UML包提供了组织元素的方式。UML包能够组织任何事物:类、其他包、用例等。如果包内部显示了其成员,则在标签上标识包名;否则可以在包体内标识包名称。人们通常希望显示包之间的依赖性(耦合),以便开发者能够看到系统内大型事物之间的耦合。,华南理工大学,软件需求分析与建模,38,UML包代表命名空间,因此Date类可以定义于两个包内。如果要提供完全限定的名称,对于UML表示法,例如java:util:Date,其含义是名为”java”的包嵌套名为”util”的包,后者包含Date类。UML还提供另一种表示法来描述外部类和内部嵌套包。有时,在内部包外再绘制外部包的框图会显得不雅。图3展示的是另一种表示方法。,华南理工大学,软件需求分析与建模,39,表示嵌套包的另一种UML表示法,使用嵌套包、UML完全限定的名称及十字圆形符号,华南理工大学,软件需求分析与建模,40,UML工具;从代码逆向工程产生包图,在开发过程的早期,我们会画出UML包图的草图,然后根据这些草图来组织代码。随着时间的流逝,代码库不断增长,同时我们在编程上花费的时间更多,并减少了建模或绘制UML图的时间。此时,可以利用UMLCASE工具对源代码进行逆向工程,从而自动生成包图。,华南理工大学,软件需求分析与建模,41,准则:使用层进行设计,使用层的本质思想1)将系统的大型逻辑结构组织为独立的.职责相关的离散层,具有清晰、内聚的关系分离。这样“较低”的层是低级别和一般性服务,“较高”的层是与应用相关的。2)协作和耦合是从较高层到较低层进行的,要避免从较低层到较高层的耦合。,华南理工大学,软件需求分析与建模,42,使用层有助于解决的问题:,1.源码的变更波及整个系统大部分系统是高度耦合的。2.应用逻辑与用户界面交织在一起,因此无法复用于其他不同界面或分布到其他处理节点之上。3.潜在的一般性技术服务或业务逻辑与更特定于应用的逻辑交织在一起,因此无法被复用、分布到其他节点或方便地使用不同实现替换。4.不同的关注领域之间高度耦合。因此难以为不同开发者清晰地界定和分配任务。,华南理工大学,软件需求分析与建模,43,使用层的好处,1可以做到关系分离、高级服务与低级服务分离、特定于应用的服务与一般性服务分离。可以减少耦合和依赖性、增强内聚性、提高潜在的复用性并且使概念更加清晰。2封装和分解了相关的复杂性。3某些层能够用新的实现替换。4较低层包含可复用功能。5某些层(主要是领域层和技术服务层)可以是分布式的。6通过逻辑划分,有助于团队开发。,华南理工大学,软件需求分析与建模,44,代码:将代码组织映射为层和UML包,大部分流行的OO语言(Java、C#、C+.)都提供了对包(在C#和C+称之为命名空间)的支持。以下是使用Java将UML包映射为代码的例子。下图中描述的层和包能够以如下方式映射为Java包的名称。注意,Java包将层的名称作为其名称的一部分:,华南理工大学,软件需求分析与建模,45,/-UI层Com.mycompany.nextgen.ui.swingCom.mycompany.nextgen.ui.web/-领域层/特定于NextGen项目的包Com.mycompany.nextgen.domain.salesCom.mycompany.nextgen.domain.payments/-技术服务层/我们自己的持久(数据库)访问层Com.mycompany.service.persistence/第三方Org.apache.log4jOrg.apache.soap.rpc/-基础层/我们小组创建的基础包Com.mycompany.util,华南理工大学,软件需求分析与建模,46,UMLCASE工具可以将源代码进行逆向工程自动生成包图。如果在代码中使用推荐的约定,则可以加强这一实践。例如:代码中UI层的所有包名中加入.ui,则UMLCASE工具将会自动在ui包下组织和嵌套子包,这样代码和包图中的分层就可以相互对应起来。,华南理工大学,软件需求分析与建模,47,架构分析,在构架分析中,所有分析类被组织成一组内聚的分析包,进一步组织成分区和层。构架分析的一个目的是尽力最小化系统中耦合的数量。有三种方法可以做到:(1)最小化分析包间的依赖。(2)最小化每个分析包中的公共元素和保护元素的数目。(3)最大化每个分析包中的私有元素的数目。,华南理工大学,软件需求分析与建模,48,削减耦合,削减耦合是构架分析中最重要的考虑之一,因为表示出高度耦合的系统是复杂的和难以构造和维护的。你应该总是尽力保持必须的最小耦合。随着模型深入到设计模型时,层的数目将增加。然而,在分析中,你可以只把包组织成为特定应用和一般应用两层。特定应用层包含对特定应用来说完全特殊的功能。,华南理工大学,软件需求分析与建模,49,寻找分析包,通过识别具有很强语义联系的建模元素的分组找出分析包。分析包必须反映元素真实的语义分组,静态模型是包的最有用来源,包括:类图中类的内聚集群。继承层次。,华南理工大学,软件需求分析与建模,50,良好包结构的关键,(1)包内高内聚,包间低耦合。(2)包应该包含一组紧密相关的类。类通过继承最紧密相关,组合次之,然后是聚合,最后是依赖。(3)应该最小化包的公共和保护成员以及包间的依赖,做法是:在包间移动类。添加包。删除包。,华南理工大学,软件需

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论