- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计包的原则 怎么样打破这种循环依赖呢? 2) DIP与ISP设计原则 ISP(接口分隔原则)可以剔除没用到的接口。 DIP(依赖倒置原则)在类的调用之间引入抽象层。 如图,包A依赖包B(因为包A中的类U使用了包B中的类X);反过来,包B又依赖包A(因为包B中的类Y使用了包A中的类V)。包A,包B之间就形成了一种循环依赖。 设计包的原则 使用DIP设计原则为V抽象一个接口IVforY,并把该接口放在B包中。这样就把Y对V的调用转化为:V继承IVforYY调用IVforY如图: 包B中的类就不依赖任何包A中的类了 总结-分包的指导性原则 如果将元素分为三个包 A、B、C,那么被分入用一个包的那些元素应当是相互联系紧密,甚至不可分割的。同时这些元素又具有某些相同的性质,使得包也可以抽象出一些接口来代表包内事物与包外事物交互,以避免包外的事物频繁地直接访问包内元素,这样,称A、B、C三个包具有高内聚的性质。 包的最理想情况是修改A、B、C三个包中任意一个包的元素,其他的任何一个包中的内容都不受到影响,可称A、B、C三个包之间无依赖关系或松耦合关系,他们之间可以保持消息通信。 如果实际情况难以做到完全解除依赖关系,那么至少应当保证包之间的依赖关系不会被传递。 包之间的依赖关系应当是单向的,应当尽量避免双向依赖和循环依赖。 包的应用 基本功能: 对建模元素进行分组. Rose中,包可以提供其它功能: 数据建模中, 包表示模式和域 Web建模中, 包可以表示一个虚拟目录-虚包(包的构造型)只包含对其他包所具有的元素进行的引用的构造型包。它被用来提供一个包的某些内容的公共视图。虚包不包含任何它自己的模型元素。 作为控制单元方便团队开发和配置管理 阅读包图 在抽象包中定义一些接口和抽象类,在实现包中,定义一些包含实现这些抽象类和接口的具体类。需要注意的是,在《在UML用户手册》中将其归为泛化关系,而在《UML精粹》中却将其看作是实现关系。 在上图中,说明GUI有两种风格:一种是基于WinForm的C/S风格,一种是WebForm的B/S风格。 阅读包图 阅读包图的方法: 1.了解每个包的语义,它包含的元素语义。 2.理解包间的关系。 3.找到依赖关系复杂的包,从最复杂的包开始阅读,然后以此是简单的包。 创建包图 绘制包图的基本过程主要有三个步骤: 第一,寻找包; 第二,确定包之间的关系; 第三,标出包内元素的可见性。 绘制包图的“最小化系统间的耦合关系”的原则: 最大限度减少包之间的依赖,包封装时,避免包之间的循环依赖;最小化每个包的public、protected元素的个数,最大化每个包中private元素的个数。 创建包图 寻找包 通过把具有很强语义联系的建模元素分组,找出分析包。分析包必须反映元素的真实的语义分组,而不仅是逻辑架构的理想视图。 以对象模型和用例模型为依据,把关系紧密的类分到同一个包中,把关系松散的类分到不同的包中。 寻找包 1.标识候选包的原则: (1)把类图中关系紧密的类放到一个包中; (2)在类继承类层次中,把不同层次的类放在不同的包中。 也可以把用例模型作为包的来源。然而,用例横跨分析包是非常普遍的——一个用例可以由几个不同包中的类实现。 寻找包 2.调整候选包 在已经识别一组候选包后,然后减少包间依赖,最小化每个包的public、protected元素的个数,最大化每个包中private元素的个数。做法是: (1)在包间移动类; (2)添加包或删除包。 创建包图 良好包结构的关键是包内高内聚,包间低耦合。 通常,当创建分析包模型时,应该尽量使包模型简单。获得正确的包集合比使用诸如包泛化和依赖构造型的特征更加重要,这些特征可以以后再添加,仅当使用诸如包泛化和依赖构造型的特征使得模型更加容易理解时,才使用这些包整理技术。除了保持简单,还应该避免嵌套包。物件在嵌套包结构中埋藏得越深,模型变得越晦涩。 创建包图 作为经验法则,希望每个包具有4~10个分析类。然而,对于所有的经验法则,却存在例外,如果打破某个法则使得模型更加清晰,就采用这个法则!有时,你必须引入只带有一个或者两个类的包,因为你需要断开包模型中的循环依赖。在这种情况下,这是完全合理的。 消除循环包依赖 应该尽量避免包模型中的循环依赖。如果包A以某种方式依赖包B,并且包B以某种方式依赖包A,就应该合并这两个包,这是消除循环依赖非常有效的方法。但是经常起作用的、更好的方法是,努力分解公共元素成为第三个包C。重新计算依赖关系,以消除循环依赖。 很多建模工具允许自动验证包间依赖。如果一个包中的元素访问另一个包中的元素,但两个包间却没有依赖关系,那么工具产生访问冲突列表。 在分析模型中,不可能创建没有访问冲突
文档评论(0)