




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本资料来源 第五章面向对象的几个基本原则 1 抽象类和接口 1 抽象 abstract 类抽象 abstract 类具有如下特点 抽象类中可以有abstract方法 也可以有非abstract方法 抽象类不能用new运算符创建对象 如果一个非抽象类是某个抽象类的子类 那么它必须重写父类的abstract方法 即在子类中将abstract方法重新声明 但必须去掉abstract修饰符 同时要保证声明的方法名字 返回类型 参数个数和类型与父类的abstract方法完全相同 5 1面向抽象原则 2 接口接口 interface 具有如下特点 接口中只可以有public权限的abstract方法 不能有非abstract方法 接口由类去实现 即一个类如果实现一个接口 那么它必须重写接口中的abstract方法 即将abstract方法重新声明 但必须去掉abstract修饰符 同时要保证声明的方法名字 返回类型 参数个数和接口中的方法完全相同 2 面向抽象 所谓面向抽象编程 是指当设计一个类时 不让该类面向具体的类 而是面向抽象类或接口 即所设计类中的重要数据是抽象类或接口声明的变量 而不是具体类声明的变量 Circle javapublicclassCircle doubler Circle doubler this r r publicdoublegetArea return 3 14 r r Pillar javapublicclassPillar Circlebottom doubleheight Pillar Circlebottom doubleheight this bottom bottom this height height publicdoublegetVolume returnbottom getArea height Geometry javapublicabstractclassGeometry publicabstractdoublegetArea Pillar javapublicclassPillar Geometrybottom doubleheight Pillar Geometrybottom doubleheight this bottom bottom this height height publicdoublegetVolume returnbottom getArea height Circle javapublicclassCircleextendsGeometry doubler Circle doubler this r r publicdoublegetArea return 3 14 r r Rectangle javapublicclassRectangleextendsGeometry doublea b Rectangle doublea doubleb this a a this b b publicdoublegetArea returna b Application javapublicclassApplication publicstaticvoidmain Stringargs Pillarpillar Geometrybottom bottom newRectangle 12 22 pillar newPillar bottom 58 System out println pillar getVolume bottom newCircle 10 pillar newPillar bottom 58 System out println pillar getVolume 5 2开 闭原则 所谓 开 闭原则 Open ClosedPrinciple 就是让你的设计应当对扩展开放 对修改关闭 如果您的设计遵守了 开 闭原则 那么这个设计一定是易维护的 因为在设计中增加新的模块时 不必去修改设计中的核心模块 如果您的设计遵守了 开 闭原则 那么这个设计一定是易维护的 因为在设计中增加新的模块时 不必去修改设计中的核心模块 该设计中的Geometry和Pillar类就是系统中对修改关闭的部分 而Geometry的子类是对扩展开放的部分 当我们向系统再增加任何Geometry的子类时 对扩展开放 不必修改Pillar类 就可以使用Pillar创建出具有Geometry的新子类指定的底的柱体 通常我们无法让设计的每个部分都遵守 开 闭原则 甚至不应当这样去做 我们应当把主要精力集中在应对设计中最有可能因需求变化而需要改变的地方 然后想办法应用 开 闭原则 当设计某些系统时 我们经常需要面向抽象来考虑系统的总体设计 不要考虑具体类 这样就容易设计出满足 开 闭原则 的系统 5 3多用组合少用继承原则 之所以提倡多用组合 少用继承 是因为在许多设计中 人们希望系统的类之间尽量是低耦合的关系 而不希望是强偶合关系 即在许多情况下需要避开继承的缺点 而需要组合的优点 1 继承与复用 白盒 复用优点易于修改 扩展被复用的方法缺点无法在运行时改变从父类继承的方法的行为子类和父类是强耦合关系父类的内部细节对于子类而言是可见的 2 组合与复用 黑盒 复用 优点使用委托机制弱耦合关系运行时动态制定所包含的对象缺点容易导致对象过多必须仔细地设计接口 5 4高内聚 低耦合原则 如果类中的方法是一组相关的行为 则称该类是高内聚的 反之称为低内聚的 高内聚便于类的维护 而低内聚不利于类的维护 所谓低耦合就是尽量不要让一个类含有太多的其它类的实例的引用 以避免修改系统的其中一部分会影响到其它部分 比如在后面学习中介者模式时 就会体会到这一原则 应用模块化原理时 自然会产生的一个问题是 为了得到最好的一组模块 应该怎样分解软件呢 信息隐藏原理指出 设计和确定模块 使得一个模块内包含的信息 过程和数据 对于不需要这些信息的模块来说 是不能访问的 局部化的概念和信息隐藏概念是密切相关的 所谓局部化是指把一些关系密切的软件元素物理地放得彼此靠近 在模块中使用局部数据元素是局部化的一个例子 显然 局部化有助于实现信息隐藏 信息隐藏和局部化 模块独立的概念是模块化 抽象 信息隐藏和局部化概念的直接结果 开发具有独立功能而且和其他模块之间没有过多的相互作用的模块 就可以做到模块独立 换句话说 希望这样设计软件结构 使得每个模块完成一个相对独立的特定子功能 并且和其他模块之间的关系很简单 模块独立 模块的独立性重要性 主要有两条理由 第一 有效的模块化 即具有独立的模块 的软件比较容易开发出来 这是由于能够分割功能而且接口可以简化 当许多人分工合作开发同一个软件时 这个优点尤其重要 第二 独立的模块比较容易测试和维护 这是因为相对说来 修改设计和程序需要的工作量比较小 错误传播范围小 需要扩充功能时能够 插入 模块 总之 模块独立是好设计的关键 而设计又是决定软件质量的关键环节 模块的独立程度可以由两个定性标准度量 这两个标准分别称为内聚和耦合 耦合衡量不同模块彼此间互相依赖 连接 的紧密程度 内聚衡量一个模块内部各个元素彼此结合的紧密程度 以下分别详细阐述 1 耦合耦合是对一个软件结构内不同模块之间互连程度的度量 耦合强弱取决于模块间接口的复杂程度 在软件设计中应该追求尽可能松散耦合的系统 如果两个模块中的每一个都能独立地工作而不需要另一个模块的存在 那么它们彼此完全独立 这意味着模块间无任何连接 耦合程度最低 但是 在一个软件系统中不可能所有模块之间都没有任何连接 模块间的耦合程度强烈影响系统的可理解性 可测试性 可靠性和可维护性 1 如果两个模块彼此间通过参数交换信息 而且交换的信息仅仅是数据 那么这种耦合称为数据耦合 2 如果传递的信息中有控制信息 尽管有时这种控制信息以数据的形式出现 则这种耦合称为控制耦合 数据耦合是低耦合 系统中至少必须存在这种耦合 因为只有当某些模块的输出数据作为另一些模块的输入数据时 系统才能完成有价值的功能 一般说来 一个系统内可以只包含数据耦合 控制耦合是中等程度的耦合 它增加了系统的复杂程度 控制耦合往往是多余的 在把模块适当分解之后通常可以用数据耦合代替它 3 如果被调用的模块需要使用作为参数传递进来的数据结构中的所有元素 那么 把整个数据结构作为参数传递就是完全正确的 但是 当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时 就出现了特征耦合 在这种情况下 被调用的模块可以使用的数据多于它确实需要的数据 这将导致对数据的访问失去控制 从而给计算机犯罪提供了机会 4 当两个或多个模块通过一个公共数据环境相互作用时 它们之间的耦合称为公共环境耦合 公共环境可以是全程变量 共享的通信区 内存的公共覆盖区 任何存储介质上的文件 物理设备等等 5 最高程度的耦合是内容耦合 如果出现下列情况之一 两个模块间就发生了内容耦合 一个模块访问另一个模块的内部数据 一个模块不通过正常入口而转到另一个模块的内部 两个模块有一部分程序代码重叠 只可能出现在汇编程序中 一个模块有多个入口 这意味着一个模块有几种功能 应该坚决避免使用内容耦合 事实上许多高级程序设计语言已经设计成不允许在程序中出现任何形式的内容耦合 总之 耦合是影响软件复杂程度的一个重要因素 应该采取下述设计原则 尽量使用数据耦合 少用控制耦合和特征耦合 限制公共环境耦合的范围 完全不用内容耦合 2 内聚内聚标志一个模块内各个元素彼此结合的紧密程度 它是信息隐藏和局部化概念的自然扩展 简单地说 理想内聚的模块只做一件事情 设计时应该力求做到高内聚 通常中等程度的内聚也是可以采用的 而且效果和高内聚相差不多 但是 低内聚很坏 不要使用 内聚和耦合是密切相关的 模块内的高内聚往往意味着模块间的松耦合 内聚和耦合都是进行模块化设计的有力工具 但是实践表明内聚更重要 应该把更多注意力集中到提高模块的内聚程度上 低内聚有如下几类 1 如果一个模块完成一组任务 这些任务彼此间即使有关系 关系也是很松散的 就叫做偶然内聚 有时在写完一个程序之后 发现一组语句在两处或多处出现 于是把这些语句作为一个模块以节省内存 这样就出现了偶然内聚的模块 2 如果一个模块完成的任务在逻辑上属于相同或相似的一类 则称为逻辑内聚 3 如果一个模块包含的任务必须在同一段时间内执行 就叫时间内聚 在偶然内聚的模块中 各种元素之间没有实质性联系 很可能在一种应用场合需要修改这个模块 在另一种应用场合又不允许这种修改 从而陷入困境 事实上 偶然内聚的模块出现修改错误的概率比其他类型的模块高得多 在逻辑内聚的模块中 不同功能混在一起 合用部分程序代码 即使局部功能的修改有时也会影响全局 因此 这类模块的修改也比较困难 时间关系在一定程度上反映了程序的某些实质 所以时间内聚比逻辑内聚好一些 中内聚主要有两类 4 如果一个模块内的处理元素是相
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度环境保护项目环评环保技术咨询合同
- 2025版钢结构工程风险评估与管理合同
- 眉山市楼盘培训
- 培训通知提高专业知识课件
- 关于立春的课件
- 口腔修复产品知识培训课件
- 深度挖掘教材情境 落实生物学学科核心素养
- 初中生物学教学中融合新劳动教育的实践探究
- 培训计划所需知识课件
- 2025年医院附属养老护理院消毒灭菌设备租赁与维护合同
- 教师课堂管理方法和技巧课件
- 小学科学教师专题培训课件
- 伍德灯在寻找炎症性皮肤病变中的应用价值研究
- 新版药品管理法培训试题
- 合同的订立与有效性
- 钢结构长廊施工方案
- 临床检验专业医疗质量控制指标(2015版)
- 信保业务自查问题统计表
- 2023年大学试题(大学选修课)-创业:道与术考试历年真摘选题含答案
- 心理健康评定量表
- 河道修防工高级工试题
评论
0/150
提交评论