4软件构造中的设计讲解.pptVIP

  1. 1、本文档共62页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 3.2 形成一致的抽象 抽象是关注某一概念的同时忽略其中一些细节的能力 基类是一种抽象,它关注一组派生类所具有的共同特性 接口也是一种抽象,它关注于接口本身而不是其内部工作方式 抽象是处理现实世界复杂度的一种好的方法 62 * * 3.3 封装实现细节 封装填补了抽象的空白,抽象关注外部,封装关注内部 封装将对象的复杂性隐藏在内部,对外部则不可见 62 * * 3.4 信息隐藏 信息隐藏是结构化程序设计与面向对象设计的基础 隐藏的内容包括: 隐藏复杂度 隐藏变化源,将变化源的影响限制在局部 62 * 问题 抽象、封装和信息隐藏之间是什么关系? 62 * * * 3.4.1 信息隐藏的障碍 信息隐藏的障碍如下: 信息过度分散,比如在程序中到处使用数值常数:100,20等等 循环依赖,比如A调用B,B又调用A 把类内数据误认为全局数据 可以察觉的性能损耗 62 * * 3.5 找出容易改变的区域 好的设计就是要适应变化,目标是隔离易变区域,方法如下: 找出看起来容易变化的项目 把容易变化的项目分离出来 把看起来容易变化的项目隔离开来 62 * 问题 你认为你的程序中哪些部分容易改变? 62 * * * 3.5.1 容易变化的区域 程序中容易变化的区域如下: 业务规则,比如银行利率 对硬件的依赖性,更换硬件 输入输出 非标准的语言特性 困难的设计区域和构建区域 状态变量(使用枚举或判定函数) 数据量的限制(比如数组大小) 62 * * 3.6 保持松散耦合 耦合度表示类与类之间,子程序与子程序之间关系的紧密程度 耦合度的设计目标是创建出小的、直接的、清晰的类或子程序,使它们与其它类或子程序之间关系尽可能地灵活,即“松散耦合” 模块之间好的耦合关系会松散到恰好能使一个模块很容易被其它模块使用 62 * * 3.6.1 耦合标准 衡量耦合度的标准如下: 规模 模块之间的连接数,比如接口数,子程序的参数数等 可见性 可见性指的是两个模块之间的连接显著程度,比如直接传递参数而非全局量进行耦合 灵活性 灵活性指模块之间的连接是否容易改动 62 * * 3.6.1.1 可见性举例 下面代码为什么要调用Set_Status()函数? ///1.------------------ 实时状态下的暂停标志为真,简单设置暂停标志为假即可. if( ( m_System_Status.Get_Status() == SYSTEM_REAL_TIME_SAMPLE ) ( m_System_Status.Get_Pause_Flag() ) ) { ///1.1 ------------ 设置系统暂停标志. -------------------------------- m_System_Status.Set_Pause_Flag( false ); ///1.2 ------------ 告知显示类系统暂停. ------------------------------ m_pWaveRightView-PostMessage( WM_SYSTEM_PAUSE, 0, ( LPARAM )( false ) ); m_System_Status.Set_Status( SYSTEM_REAL_TIME_SAMPLE ); return( true ); } 62 * * 3.6.1.2 Set_Status函数内部 Set_Status()函数中包含不可见的耦合关系 void CSystem_Status::Set_Status(short shStatus) { ///1.------------------ 修改状态. ---------------------------------------- m_shStatus = shStatus; ///2.------------------ 通知注册窗口系统状态发生变化. ---------- Notify(); } 62 * * 3.6.2 耦合的种类 从松耦合到紧耦合: 简单数据参数耦合 两个模块之间传递简单数据类型的参数,这种耦合关系是正常的 简单对象耦合 一个模块实例化一个对象,这种耦合关系也是正常的 62 * * 3.6.3 耦合的种类(续) 对象参数耦合 以对象为参数在模块之间传递称为对象参数耦合,这种耦合关系比较紧密,要求了解传入对象的情况 语义上的耦合 一个模块不仅使用了另一个模块的语法元素,还需要使用其内部工作细节的语义知识,这是最紧密的耦合,也非常危险,需要尽量避免 62 * * 3.6.4 语义耦合的方式 语义耦合的例子如下 Mo

文档评论(0)

shuwkb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档