应用软件设计 研究生幻灯片.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2.2 关于内聚 Cohesion 内聚(Cohesion)是一个模块内部各成分之间相关联程度的度量。从低到高: 1)偶然内聚。如果一个模块的各成分之间毫无关系,则称为偶然内聚。 2)逻辑内聚。几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。 3)时间内聚。如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。 3 关于内聚 Cohesion 4)过程内聚。如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。 5)通信内聚。如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。 6)顺序内聚。如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。 7)功能内聚。模块的所有成分对于完成单一的功能都是必须的,则称为功能内聚。 2.2 模块的内聚性类型 低 偶然内聚 弱 逻辑内聚 内 时间内聚 独 聚 过程内聚 立   性  通信内聚 性 顺序内聚 高 功能内聚 强 3 分析MFC各模块 App模块——作用:程序初始化和运行消息循环。 内聚特性:时间内聚。 消息循环:消息属于标记耦合,避免使用控制耦合(函数调用)。 消息通过以RUNTIME_CLASS为结构的消息链表传递,事先不必知道具体有哪些成员在链表上。 3 分析MFC各模块 MainFrm模块——作用:构造程序框架,创建菜单、工具栏、状态栏。响应用户操作,调用DOC或VIEW。 内聚特性:通信内聚。 创建或调用DOC或VIEW中函数:控制耦合。 3 分析MFC各模块 Doc模块——作用:创建、保存、读取文件。 内聚特性:功能内聚。 串行化:可将原来的内容耦合降低为数据耦合。 3 分析MFC各模块 View模块——作用:客户区作图。 内聚特性:功能内聚。 OnDraw:可将原来的内容耦合降低为数据耦合。 应用软件设计 关于CObList的Serialize CObList的Serialize是存储和提取CObList的数据的。 CObList能通过Serialize存取List吗? 下面是CObList的Node(结点)的定义: struct CNode { CNode* pNext; // point to next node CNode* pPrev; // point to prev node CObject* data; }; if (ar.IsStoring()) { ar.WriteCount(m_nCount); for (CNode* pNode = m_pNodeHead; pNode != NULL; pNode = pNode-pNext) { ar pNode-data; } } else { DWORD nNewCount = ar.ReadCount(); CObject* newData; while (nNewCount--) { ar newData; AddTail(newData); } } 保存count 保存node的数据data 读取count 读取node的数据data if (ar.IsStoring()) { ar.WriteCount(m_nCount); for (CNode* pNode = m_pNodeHead; pNode != NULL; pNode = pNode-pNext) { ar pNode-pShape; } } else { DWORD nNewCount = ar.ReadCount(); CObject* pNewShape; while (nNewCount--) { ar pNewShape; AddTail(pNewShape); } } 将data换成pShape 保存的是指针! 读取的也是指针! List指针存取的后果 如果是程序在调用Serialize的存储后不退出立即提取,则可恢复原指针。 如果是程序在调用Serialize的存储后退出,不关机重新运行程序进行提取,此时很危险。指针有可能正确,也有可能错误。 如果程序在调用Serialize的存储后关机,再启动后运行程序,这时指针完全无效。这时候读取的指针是完全错误的。 关于CObList的串行化 CObList类的特点: 1)

文档评论(0)

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

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

1亿VIP精品文档

相关文档