第8章:包图、构件图和部署图By王传栋南京邮电大学计算机学院软件工程系Chdwang@njupt.edu.cn课件下载:,E-Mail:Chdwang@njupt.edu.cn2包与包图包一种组合机制,用于模型的逻辑组织UML包对应于Java包一个Java包可能包含其他包或类包图描述包及其关系的图基本元素:包、注释、约束包可以拥有:类、接口、构件、节点、协作、用例、子包等元素一个元素只能属于一个包包间关系:依赖关系和泛化关系CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn3包的作用对语义上相关的元素进行分组如:把功能相关的用例放在一个包中提供配置管理单元如:以包为单位,对软件进行安装和配置设计时,提供并行工作的单元如:在设计阶段的多个设计小组,可以同时对几个相互独立包中的类进行详细设计提供封装的命名空间同一个包中,元素的名称必须惟一CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn4包的表示符号文件夹符号名称区别于其他包的表示符简单名称全名:外围包名作为前缀,说明包的命名空间元素说明包的组成,如类、接口、构件、节点、协作、用例、子包等每一个包都意味着一个独立的命名空间元素表示列出包含元素名画出包含元素的图形表示CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn5包的表示可见性控制包外部元素访问包内元素的权限3种可见性用“+”来表示“public”,即该元素是共有的用“#”来表示“protected”,即该元素是保护的用“-”来表示“private”,即该元素是私有的说明CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn6包的表示版型描述包的新特征,5种版型:system:表示整个系统subsystem:表示某个独立的子系统facade:表示某个包的视图,为复杂包提供简略视图(或此包只引用其他包内的元素)stub:表示代理包(桩),建模分布式系统,说明其它包的公共内容framework:表示框架,元素仅为可扩充的体系结构模式CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn7包的关系依赖关系虚线箭头,箭尾表示客户包,箭头表示提供者包版型use:默认的依赖关系,客户包依赖于提供者包,客户包的元素使用提供者包的公共元素import:最普遍的依赖类型,两个命名空间合并,提供者包的命名空间添加到客户包的命名空间客户包元素引用提供者包的元素,无需使用全称元素名称相同时,将会导致命名空间冲突access:两个命名空间不合并,客户包元素使用路径名,访问提供者包的公共元素trace:表示一个包到另一个包的历史发展CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn8包的关系泛化关系类似于类的泛化关系使用一般包的地方,可以用特殊包代替某一个特定功能,有多种实现方法,如:实现多数据库支持实现B/S和C/S双界面系统设计时,可以定义一些高层次的“抽象包”和实现高层次功能的“实现包”CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn9包图建模的作用对成组元素建模分组建模元素,并命名(仅标注核心元素)策略:浏览特定体系结构视图,以包分组“概念上、语义上相近的元素”对每一个包找出可以在包外访问的元素,并标记为公有元素(应尽可能地少),把其他元素标记为受保护的或私有的;若不确定,就隐藏该元素确定包之间的依赖关系,默认使用use版型,类实现时可以替换为import确定包之间的泛化关系,以及包的多重性和重载CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn10包图建模的作用对体系结构建模常用体系结构模式分层、MVC、管道、黑板、微内核分层体系结构的包建模表示层、逻辑层、数据层策略找出问题语境中一组有意义的体系结构视图找出描述每个视图语义的元素,并放入到合适的包确定包之间的依赖和泛化关系CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn11包图阅读与示例理解阅读包图了解包的语义和元素的语义理解包之间的关系找到依赖关系复杂的、包,从复杂包开始阅读,依次到简单包示例理解根据use依赖,Client包使用Server包,Server包使用System.Data.SqlClient包,语义解释:包Client负责Order录入,并使用包Server完成Order的存取和用户登录(LoggingService)包Server使用包System.Data.SqlClient调用SQLServer访问工具包,实现与数据库的连接和通讯CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn12包图阅读与示例理解阅读包图了解包的语义和元素的语义理解包之间的关系找到依赖关系复杂的、包,从复杂包开始阅读,依次到简单包示例理解根据import依赖,包Client引用包Rule,包Rule引用包GUI,同时包Client也间接引用了包GUI,语义解释:包RULE负责“规则处理”,并引用一具体Window窗体包Client包通过引用RULE来实现整个窗体和表单的显示和输入,并暂存Order信息CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn13包图阅读与示例理解阅读包图了解包的语义和元素的语义理解包之间的关系找到依赖关系复杂的、包,从复杂包开始阅读,依次到简单包示例理解根据泛化关系,抽象包GUI有两个具体的实现:针对C/S架构的WindowsGUI针对B/S架构的WebGUICopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn14绘制包图步骤寻找包确定包之间的关系标出包内元素的可见性原则:最小化系统间的耦合关系最大限度减少包之间的依赖包封装时,避免包之间的循环依赖最小化每个包的public、protected元素个数最大化每个包的private元素个数CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn15绘制包图寻找候选包以对象模型和用例模型为依据,分组建模元素,分组既能反映元素的真实语义,又能表达理想的逻辑架构语义联系密切的建模元素分到同一个包中关系松散的建模元素分到不同的包中候选包的标识原则类图中关系紧密的类放到一个包中把类继承中不同层次的类放在不同的包中注:用例模型常横跨分析包,即一个用例可以由几个不同包中的类来实现CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn16绘制包图调整候选包减少包间依赖,最小化包的public、protected元素的个数,最大化包的private元素的个数;方法:在包间移动类添加包或删除包优秀包结构:包内高内聚,包间低耦合尽量使包模型简单,泛化和依赖要得当,避免使用嵌套包根据经验,每个包内4~10个分析类是合理的CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn17绘制包图消除循环包依赖循环包依赖包A依赖包B,且包B依赖包A消除方法合并包,重新计算依赖关系分解公共元素成为第三个包C,重新计算依赖关系CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn18包图示例图书馆管理系统的包图CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn19构件与构件图构件定义是定义了良好接口的物理实现单元可以被支持相同接口的其他构件替换接口是被软件或硬件所支持的一个操作集合是系统设计中特定类的实现构件与类的区别构件可以部署,类不能部署,类是实体的抽象,构件是存在于计算机中的物理部件的抽象构件与类是不同的抽象级别,类是软件的逻辑组织;构件是软件的物理实现,由一组类协作完成类拥有操作和属性,构件仅拥有“可以通过其接口访问的操作”CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn20构件与构件图构件的5个要素接口声明,构件声明了2组接口供给接口,声明构件提供的服务需求接口,声明构件需要的服务接口实现,为供给接口所声明的服务提供功能实现构件标准,构件创建时,必须遵循的标准封装方法,构件遵循的封装标准部署方法,一个构件可以有多种部署方法CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn21构件与构件图构建的分类按照构件在系统中扮演的角色,分为:配置构件:组成系统的基础构件,是执行其他构件的基础平台,如OS、Java虚拟机(JVM)、DBMS等工作产品构件:开发过程的中间产物,如创建构件的源代码文件、数据文件等,不直接参与系统运行执行构件:系统运行时创建的构件,如由DLL实例化的COM+对象,Servlets、XML文档等CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn22构件与构件图构件表示没有标识接口的表示版型表示小图标表示图标表示(UML2.0舍弃)标识接口的表示接口分栏表示图标表示显示表示构件2component构件1构件3计划制定者provided更新计划required预订计划制定者更新计划预订计划制定者interface更新计划interface预订CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn23构件与构件图构件图描述软件构件之间的依赖关系构件图的元素构件依赖关系构件图的作用从架构角度描述系统主要功能(软件是构件的组装)利于开发人员了解系统物理部件,制定项目计划利于软件的打包与交付利于软件复用和维护(构件替换)CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn24构件图分类简单构件图个人图书馆管理系统的局部构件图CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn25构件图分类简单构件图个人图书馆管理系统的局部构件图以构件为单位,系统分为3层用户界面层版型JavaServerPage表示由边界类实现的JSP用户界面业务逻辑层版型JavaBeans表示由实体类实现的业务逻辑数据访问层所有数据访问操作都封装在一个JavaBeans中(大型应用封装在EJB中),是JDBC的一个实现CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn26构件图分类嵌套构件图收银系统的构件图销售管理服务器收银机系统交易处理程序财务接口财务系统销售信息接口接口接口CopyrightByChd.Wang,E-Mail:Chdwang@njupt.edu.cn27构件图分类嵌套构件图收银系统的构件图收银机系统通过销售管理服务器提供的接口发送销售信息销售管理服务器通过财务系统提供的接口发送相应的财务数据交易处理程序处理收银机发送来的销售信息,完成交易处理