耦合的分类代码实例

耦合的分类代码实例

ID:39678385

大小:197.35 KB

页数:4页

时间:2019-07-09

耦合的分类代码实例_第1页
耦合的分类代码实例_第2页
耦合的分类代码实例_第3页
耦合的分类代码实例_第4页
资源描述:

《耦合的分类代码实例》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、6.4.2耦合的分类【例题分析】视频讲解课堂练习课程讲解本章测试内容耦合示例:例:在宠物商店的例子中,假设有一个的产品类Product,该类有一个用来记录宠物单价的实例变量unitPrice,如果该变量是Public的,那么其它类(如订单类)就可以轻易的修改该变量,甚至将单价改为一个负数。代码如下所示publicclassProduct{publicfloatunitPrice;„}publicclassOrder{privateProductmyProduct=newProduct();publicvoidsetItem(){myProduct.unitPrice

2、=-100;}}Public类和Order类之间构成了内容耦合。为了避免这种耦合,Java的做法是将其变为私有变量,并提供get和set方法,.Net则将该变量变为属性,在属性内部提供get和set方法。这两种方法大同小异,使用get方法可以访问变量,而恰当地使用set方法能够保证“合法地”修改变量。本例中,将unitPrice变量改为属性,并提供get和set方法。上面的Product类的代码可以修改为:publicclassProduct{privatefloat_unitPrice;publicfloatunitPrice{get{return_unitPrice;}se

3、t{if(value<0){//codeheretothrowanexception}else_unitPrice=value;}}}公共耦合示例:例:一个公共耦合的例子如图6.20所示,其中模块A、E和G两两之间是公共耦合。可以通过封装来对公共耦合降耦。例如将所有全局变量封装到一个包含公有方法的类中,通过调用这些方法来获取和设置“合法的”数据。但这只能在一定程度上减小全局变量的危害。仍然不能避免对使用全局变量的模块之间的耦合所引起的副作用。外部耦合示例:例:在宠物商店的例子中使用的是SqlServer数据库,设计人员考虑要使这个系统也能支持其他数据库,例如Oracle。如果系

4、统中的多个模块都直接读写数据库,则外部耦合严重。为了支持Oracle数据库,需要修改大量代码。如果再要支持DB2,系统还有再度修改代码。这种作法不但工作量大,而且容易出错,不便于维护。一个可行的方法是将系统分成多层构架,即表示层、业务逻辑层和数据访问层。其中数据访问层的模块负责与数据库进行交互,这些模块在功能上和业务逻辑层相互独立。其他层中所有与数据库打交道的模块都要通过数据访问层来对所需要的数据进行访问。因为与数据库相关的外部耦合被限定在少量的数据访问层的模块中,所以为了支持其它数据库而需要的代码改动工作量被降低,控制耦合示例:例:在宠物商店的例子中,商店经理希望每月底得到一

5、份当月销售报表,该报表可以是一个Excel文件,也可以是一个Word文件。假设有两个模块,如图6.21所示,其中模块A传递的参数决定了模块B内部的执行逻辑。模块B的代码如下:publicvoidB(stringf){if(f==”Excel”){saveAsExcel()}else{saveAsWord()}}模块B实际上是某个类的一个方法。当模块A增加一个新的命令时,如需要保存为XML或文本文件时,就得修改模块B中的逻辑,否则不能正确地响应新命令。同样,当模块A删除一个命令时,模块B也应修改,否则就存在无用的垃圾代码。如果模块A直接调用saveAsExcel、saveAsWo

6、rd、saveAsXML或saveAsText方法,可以达到降耦目的。另一种降耦方法是使用多态操作,设计几个独立的报表类,每个报表类都有save方法,由系统决定调用哪个类的save方法,这种降耦方法更好一些。印记耦合示例:例:在宠物商店的例子中,订单类(Order)有一个方法(getTotalMoney)是计算用户订单的总金额。该方法要根据用户的级别(如1-钻石级、2-白金级和3-黄金级等)和消费总积分而采用不同的折扣策略。为了获得用户级别和消费总积分,在下面的程序中User类的一个实例作为一个参数传入了Order类的calcTotalMoney方法中。这样,Order类和Us

7、er类构成了印记耦合。publicclassOrder{publicfloatcalcTotalMoney(Useruser){intuserLevel=user.getLevel();intuserConsumeScore=user.getConsumeScore();//计算订单总金额}„}上面主要问题在于:1)calcTotalMoney方法只需要使用user的getLevel方法和getConsumeScore方法,然而user作为一个User类的实例传入calcTotalMoney

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。