- 1、本文档共145页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.3.1 模块特性 5.3.2 模块的深度、宽度、扇入和扇出 5.3.3 模块的控制范围和判定的作用范围 结构化设计(Structured Design, SD) 70年代中期提出; 采用结构图(Structure Chart, SC)和程序流 程图(Flow Chart, FC)作为描述工具。 1) 模块的分解 将问题分解为各个可独立解决的子问题 目标( Goal ) :使模块之间的依赖关系显式化和 最小化 强调一下: Few Interfaces: “Don’t talk to many!” 尽可能少的接口:“不要对太多人讲话…” Small Interfaces: “Don’t talk a lot!” 尽可能小的接口:“不要讲太多…” Explicit Interfaces: “Talk loud and in public! Don’t whisper!” 显式接口:“公开的大声讲话…不要私下嘀咕…” 3) 模块的信息隐藏 将可能发生变化的部分隐藏起来 5) 模块独立性之内聚性 模块独立性:用来判断模块构造是否合理的标准。 内聚强度的划分 (1) 偶然性内聚 偶然性内聚( Coincidental) : 构成模块的各组成部分无任何关联。 通常用于库函数管理,将多个相互无关但比较 功能类似的模块放置在同一个模块内。 (2) 逻辑性内聚 逻辑性(Logical)内聚: 一个模块中同时含有几 个操作,这些操作之间 既无顺序关系,也无数 据共享关系。 (3) 时间性内聚(Temporal cohesion) 时间性内聚: 模块的各个成分必须在同一时间段执行,但各 个成分之间无必然的联系。 (5) 通讯性内聚 通讯性内聚 (Communicational) 模块内各部分操作访问相同的数据 除此之外,再无任何关系 “无特定的次序,非单一功能” (6) 顺序性内聚 顺序性内聚(Sequential Cohesion) : 模块完成多个功能,各功能 都在同一数据结构上操作。 (7) 功能性内聚(Functional Cohesion ) 功能性内聚:模块中各个部分都是为完成一 项单一的功能而协同工作。 内聚强度的划分 小结 6) 模块独立性之耦合度(Coupling) 耦合强度的划分 (2) 数据耦合(Data) 一个模块访问另一个模块时,彼此之间是通过简单数据参数?(不是控制参数、公共数据结构或外部变量)?来交换输入、输出信息的。 public class Emailer { public void sendEmail(Employee e, String text){…} … } 降低标记耦合 如果不需要创建新的Addressee接口,也可使用Employee 的超类(如Person)作为sendEmail方法的参数类型,可 降低标记耦合。但使用接口更灵活。 有时控制耦合是没法或不应该完全避免的。 public routineX(String command) { if (command.equals(“drawCircle”) { drawCircle(); } else { drawRectangle(); } } (5) 外部耦合(External) 一组模块访问同一全局简单变量而不是同一全 局数据结构,而且不是通过参数表传递该全局 变量的信息,则称之为外部耦合。 (7) 内容耦合(Content Coupling) 如果发生下列情形,两个模块之间就发生了内容耦合 一个模块直接访问或修改另一个模块的内部数据; public class Line { private Point start, end; … public Point getStart() {return start; } public Point getEnd() {return end; } } public class Arch { private Line baseline; //假定 Line 的实例变量 baseline是不可修改的 … void slant (int newY) { Point theEnd = baseline.getEnd(); theEnd.setLocat
文档评论(0)