- 1、本文档共78页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
耦合的九种形式: 3.控制耦合 如果一个构件通过传送开关、标志、名字等控制信息,明显地控制选择另一构件的功能,就是控制耦合。 这种形式耦合的主要问题在于B中的一个不相干变更,往往能够导致A所传递控制标记的意义必须发生变更。 11.2.4 耦合性 /** 控制耦合。* 根据年龄判断是否大于18岁,然后根据是否满18岁判断是否到达法定饮酒年龄*/ #include stdio.h static bool Signal; void AdultOrNot(int age){ if (age 18) Signal = 1; else Signal = 0; } void WineOrNot(){ if (Signal == 1) printf(%s\n, 您已到达法定饮酒年龄!); else printf(%s\n,您未到达法定饮酒年龄!); } int main(){ int Age = 0; printf(%s,请输入您的年龄:); scanf(%d, Age); AdultOrNot(Age); WineOrNot(); } 耦合的九种形式: 3.控制耦合 这种形式耦合的主要问题在于B中的一个不相干变更,往往能够导致A所传递控制标记的意义必须发生变更。 改善方法就是把B构件调用的函数直接写入A构件中,然后删除B构件。 11.2.4 耦合性 耦合的九种形式: 4.印记耦合 当类B被声明为类A某一操作中的一个参数类型时就会发生这种耦合。 由于类B作为类A定义的一部分,所以修改系统就会变得更为复杂。 11.2.4 耦合性 印记耦合示例: 例:在宠物商店的例子中,订单类(Order)有一个方法(getTotalMoney)是计算用户订单的总金额。该方法要根据用户的级别 (如1-钻石级、2-白金级和3-黄金级等)和消费总积分而采用不同的折扣策略。为了获得用户级别和消费总积分,在下面的程序中 User类的一个实例作为一个参数传入了Order类的calcTotalMoney方法中。这样,Order类和User类构成了印记耦合。 public class Order { public float calcTotalMoney(User user) { int userLevel = user.getLevel(); int userConsumeScore = user.getConsumeScore(); //计算订单总金额 } … } 上面主要问题在于: 1) calcTotalMoney方法只需要使用user的getLevel方法和getConsumeScore方法,然而user作为一个User类的实例传入calcTotalMoney中,它的所有公共方法和变量都暴露给了calcTotalMoney方法,显然授予了calcTotalMoney更大的、不必要的访问权限。这容易产生副作用。 2) 当开发人员修改User类时,必须得检查是否也要修改Order类,因为后者用到了前者的方法。 3) Order类可复用性较低,因为它依赖于User类。必须将二者“捆绑”在一起才能被复用到其它环境。 订单类(Order)的calcTotalMoney方法可以用两个简单变量类型的参数代替User类的实例,代码如下: public class Order { public float getTotalMoney(int userLevel, int consumeScore) { //... return 0; } } 显然,这种方法限制了Order类的访问权限,降低了Order类与User类的耦合。 耦合的九种形式: 5.数据耦合 当操作需要传递较长的数据参数时就会发生这种耦合。 11.2.4 耦合性 /* * 数据耦合 * 主函数main()和Multiply(int x, int y)之间为数据耦合关系 */ #include stdio.h int Multiply(int x, int y){ return(x * y); } void main(){ int x = 0; int y = 0; scanf(%d%d, x, y); printf(x * y = %d\n, Multiply(x,y)); } 耦合的九种形式: 6.例程调用耦合 当一个操作调用另一个操作时就会发生这种耦合。 这种级别的耦合很常见,并且常常是必要的。 11.2.4
您可能关注的文档
最近下载
- 2025云南省中职职教高考职业技能考试机械类专业理论模拟卷【⑧】.docx VIP
- 拼多多持平投产比计算公式(1).xlsx VIP
- 交往行为理论1.pdf
- 行政事业单位内部控制业务流程图.pdf VIP
- 中医儿科学—新世纪教材习题集(附答案).docx
- 医学伦理学(山东大学)智慧树知到期末考试答案章节答案2024年山东大学.docx
- 一般工业固体废物分类表(2021 年版).pdf
- 2023年中国本科生就业报告-麦可思.docx VIP
- 2023-2024学年江苏省盐城市亭湖区部编版四年级上册期末考试语文试卷(含答案解析).docx
- 广东省2023年第一次高中学业水平测试化学试题(含解析).pdf VIP
文档评论(0)