- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
531 依赖关系
Page ? * 5.4 阅读包的方法 5.4 阅读包的方法 Page ? * 图5-5 阅读包图 5.4 阅读包的方法 Page ? * 对上面包的理解如下: 根据《use》关系可以发现Client包使用Server包,Server包使用System.Data.SqlClient包,根据它们所包含的元素语义,可以得知Client包负责Order(订单)的输入,并通过Server包来管理用户的登录(LoggingService)和数据库存储(DataBase);而Server包还通过.Net的SQL SERVER 访问工具包,来实现与数据库的连接和通讯。 看《import》关系,从RULE包所包含的元素语义可知,该包负责处理一些规则,并引用一个具体的窗体(Window);而Client包通过引用RULE来实现整个窗体和表单的显示,输入等,并且还将暂存Order(订单)信息。 接着来看包的泛化关系。GUI有两个具体实现:一个是针对C/S的WindowsGUI,一个是实现B/S的WebGUI. 5.5 创建包图 Page ? * 绘制包图的基本过程主要有三个步骤:第一,寻找包;第二,确定包之间的关系;第三,标出包内元素的可见性。 绘制包图的“最小化系统间的耦合关系”的原则:最大限度减少包之间的依赖,包封装时,避免包之间的循环依赖;最小化每个包的public、protected元素的个数,最大化每个包中private元素的个数。 5.5.1 寻找包 通过把具有很强语义联系的建模元素分组,找出分析包。分析包必须反映元素的真实的语义分组,而不仅是逻辑架构的理想视图。 我们以对象模型和用例模型为依据,把关系紧密的类分到同一个包中,把关系松散的类分到不同的包中。 Page ? * (1)把类图中关系紧密的类放到一个包中; (2)在类继承类层次中,把不同层次的类放在不同的包中。 也可以把用例模型作为包的来源。然而,用例横跨分析包是非常普遍的——一个用例可以由几个不同包中的类实现。 1. 标识候选包原则 在已经识别一组候选包后,然后减少包间依赖,最小化每个包的public、protected元素的个数,最大化每个包中private元素的个数。做法是: (1) 在包间移动类; (2) 添加包或删除包。 2. 调整候选包 5.5.1 寻找包 良好包结构的关键是包内高内聚,包间低耦合。 通常,当创建分析包模型时,应该尽量使包模型简单。获得正确的包集合比使用诸如包泛化和依赖构造型的特征更加重要,这些特征可以以后再添加,仅当使用诸如包泛化和依赖构造型的特征使得模型更加容易理解时,才使用这些包整理技术。除了保持简单,还应该避免嵌套包。物件在嵌套包结构中埋藏得越深,模型变得越晦涩。 作为经验法则,希望每个包具有4~10个分析类。然而,对于所有的经验法则,却存在例外,如果打破某个法则使得模型更加清晰,就采用这个法则!有时,你必须引入只带有一个或者两个类的包,因为你需要断开包模型中的循环依赖。在这种情况下,这是完全合理的。 Page ? * 5.5.2 消除循环包依赖 应该尽量避免包模型中的循环依赖。如果包A以某种方式依赖包B,并且包B以某种方式依赖包A,就应该合并这两个包,这是消除循环依赖非常有效的方法。但是经常起作用的、更好的方法是,努力分解公共元素成为第三个包C。重新计算依赖关系,以消除循环依赖。示例显示在图5-6中。 很多建模工具允许自动验证包间依赖。如果一个包中的元素访问另一个包中的元素,但两个包间却没有依赖关系,那么工具产生访问冲突列表。 在分析模型中,不可能创建没有访问冲突的包图。 Page ? * 5.5.2 消除循环包依赖 Page ? * 合并 分解 A,B包合并 图5-6 5.6 包图建模 包图主要用于两种不同层次的用途:一是对成组元素建模;二是对体系结构建模。 5.6.1 对成组元素建模 对成组元素进行建模可以说是包图最常见的用途,它将建模元素组织成组,然后对组进行命名,在对成组元素建模时,应遵循以下几个策略: 每个包都应该是由在概念上,语义上相互接近的元素组成。 对于每个包,找出应标记为公共的元素,但应尽可能地少。 一般使用默认的《use》构造型,在实现类时,才用《import》构造型代替《use》构造型。 采用泛化来对特殊包进行建模。 Page ? * 5.6 包图建模 5.6.2 对体系结构建模 Page ? * 5.6 包图建模 Page ? * 图5-7 用包分层 5.7 小结 Page ? * 首先解释了几种常见的包图表示法之后,通过了一个简单的例子来说明包的可见性、依赖关系、泛化等概念 ;其次,概要地说明了五种包的构造型 。说明如何寻找包、
文档评论(0)