`

三大基本面向对象设计原则

    博客分类:
  • OO
阅读更多
三大基本面向对象设计原则
    – 针对接口编程,而不是针对实现编程
    – 优先使用对象组合,而不是类继承
    – 封装变化点
    使用重构得到模式。敏捷软件开发实践提倡的“Refactoring to Patterns”是目前普遍公认的最好的使用设计模式的方法。
    附:面向对象设计原则
    面向对象设计的基石是“开—闭”原则。   
“开一闭”原则讲的是:一个软件实体应当对扩展开放,对修改关闭。
    这个规则说的是,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。
    从另外一个角度讲,就是所谓的“对可变性封装原则”。“对可变性封装原则”意味着两点:
    1 .一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里面。同一种可变性的不同表象意味着同一个继承等级结构中的具体子类。
    2.一种可变性不应当与另一种可变性混合在一起。即类图的继承结构一般不应超过两层。
    做到“开—闭”原则不是一件容易的事,但是也有很多规律可循,这些规律同样也是设计原则,它们是实现开—闭原则的工具。
    里氏代换原则
    里氏代换原则:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有对象o1都换成o2时,程序P的行为没有变化,那么类型T2是T1的子类型。
    即如果一个软件实体使用的是基类的话那么也一定适用于子类。但反过来的代换不成立。
    如果有两个具体类A和B之间的关系违反了里氏代换原则,可以在以下两种重构方案中选择一种:
    1 创建一个新的抽象类C,作为两个具体类的超类,将A和B共同的行为移动到C中,从而解决A和B行为不完全一致的问题。
    2 从B到A的继承关系改写为委派关系。
    依赖倒转原则
    依赖倒转原则讲的是:要依赖于抽象,不要依赖于具体。即针对接口编程,不要针对实现编程。针对接口编程的意思是,应当使用接口和抽象类进行变量的类型声明、参量的类型声明,方法的返还类型声明,以及数据类型的转换等。不要针对实现编程的意思就是说,不应当使用具体类进行变量的类型声明、参量的类型声明,方法 的返还类型声明,以及数据类型的转换等。
    依赖倒转原则虽然强大,但却不易实现,因为依赖倒转的缘故,对象的创建很可能要使用对象工厂,以避免对具体类的直接引用,此原则的使用还会导致大量的类。维护这样的系统需要较好的面向对象的设计知识。
    此外,依赖倒转原则假定所有的具体类都是变化的,这也不总是正确的。有一些具体类可能是相当稳定、不会发生变化的,消费这个具体类实例的客户端完全可以依赖于这个具体类。
面向对象设计模式与原则[5]
By IT Jack 发表于 2007-10-11 13:35:00  
接口隔离原则
    接口隔离原则讲的是:使用多个专门的接口比使用单一的接口要好。从客户的角度来说:一个类对另外一个类的依赖性应当是建立在最小的接口上的。如果客户端只需要某一些方法的话,那么就应当向客户端提供这些需要的方法,而不要提供不需要的方法。提供接口意味着向客户端作出承诺,过多的承诺会给系统的维护造成不必 要的负担。
    合成、聚合复用原则
    合成、聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部份,新的对象通过向这些对象的委派达到复用已有功能的目的。这个原则有一个简短的描述:要尽量使用合成、聚合,尽量不要使用继承。
    合成、聚合有如下好处:
    新对象存取成分对象的唯一方法是通过成分对象的接口。
    这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不到的。
    这种复用可以在运行时间内动态进行,新对象可以动态的引用与成分对象类型相同的对象。
    合成、聚合可以应用到任何环境中去,而继承只能应用到一些有限环境中去。
    导致错误的使用合成、聚合与继承的一个常见原因是错误的把“Has-a”关系当作“Is-a”关系。如果两个类是“Has-a”关系那么应使用合成、聚合,如果是“Is-a”关系那么可使用继承。
    迪米特法则
    迪米特法则说的是一个对象应该对其它对象有尽可能少的了解。即只与你直接的朋友通信,不要跟陌生人说话。如果需要和陌生人通话,而你的朋友与陌生人是朋友,那么可以将你对陌生人的调用由你的朋友转发,使得某人只知道朋友,不知道陌生人。换言之,某人会认为他所调用的是朋友的方法。
    以下条件称为朋友的条件:
    当前对象本身。
    以参量的形式传入到当前对象方法中的对象。
    当前对象的实例变量直接引用的对象。
    当前对象的实例变量如果是一个聚集,那么聚集中的元素也都是朋友。
    当前对象所创建的对象。
    任何一个对象,如果满足上面的条件之一,就是当前对象的朋友,否则就是陌生人。
    迪米特法则的主要用意是控制信息的过载,在将其运用到系统设计中应注意以下几点:
    在类的划分上,应当创建有弱耦合的类。类之间的耦合越弱,就越有利于复用。
    在类的结构设计上,每一个类都应当尽量降低成员的访问权限。一个类不应当public自己的属性,而应当提供取值和赋值的方法让外界间接访问自己的属性。
    在类的设计上,只要有可能,一个类应当设计成不变类。
    在对其它对象的引用上,一个类对其它对象的引用应该降到最低。

分享到:
评论

相关推荐

    23种 设计模式---面向对象的基本原则

    在面向对象编程中,设计模式基于一些基本原则,这些原则构成了良好设计的基础。本篇将深入探讨23种设计模式以及面向对象的基本原则。 面向对象的基本原则主要包括: 1. 单一职责原则(Single Responsibility ...

    面向对象设计的基本原则

    本篇文章将详细探讨面向对象设计的基本原则,这些原则对于创建可维护、可扩展且易于理解的代码至关重要。 1. **单一职责原则 (Single Responsibility Principle, SRP)** - 这个原则指出,一个类应该只有一个引起它...

    面向对象七大原则

    面向对象编程的七大原则是指在面向对象设计中所遵循的七个基本原则,它们是:开闭原则、依赖倒转原则、单一职责原则、接口隔离原则、迪米特法则、里氏替换原则和组合优于继承原则。 1. 开闭原则(Open-Closed ...

    C#面向对象设计模式纵横谈(1):面向对象设计模式与原则

    在C#中,面向对象设计模式可以分为创建型、结构型和行为型三大类。例如: - 创建型模式:单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。这些模式关注于对象的创建,使得对象的创建过程更加灵活和可...

    面向对象设计原则

    面向对象设计原则是软件工程领域中的重要组成部分,它旨在通过一系列设计准则来提高代码的质量、可维护性和可扩展性。本文将详细介绍面向对象设计的七大原则,并结合具体案例进行解析。 ### 面向对象设计原则概述 ...

    面向对象设计原则.pdf

    本文将深入探讨“面向对象设计原则.pdf”文档中提及的关键知识点,包括面向对象设计的基本法则,以及组合与继承这两种重要的设计模式。 ### 组合优先于继承 文档中的第一条法则强调了“优先使用组合,而非继承”。...

    C++设计模式课件2_面向对象设计原则.pdf

    ### C++设计模式课件2_面向对象设计原则 #### 面向对象设计原则概述 面向对象设计原则是软件工程领域中为了提高代码质量、增强软件系统的可维护性和可扩展性而制定的一系列指导原则。这些原则有助于开发人员更好地...

    c#面向对象三原则

    在深入探讨C#面向对象编程的三大原则:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)之前,我们先明确一下面向对象编程(OOP)的基本概念。面向对象编程是一种软件开发方法,它将数据和操作数据的方法...

    面向对象七大基本设计原则.pdf

    面向对象七大基本设计原则通常是指SOLID原则,它是一组面向对象设计的指导原则,旨在使软件更加可维护和可扩展。SOLID由以下五个原则组成: 1. 单一职责原则(Single Responsibility Principle, SRP):一个类应该...

    UML面向对象设计基础

    这样的选择反映了面向对象设计原则的普适性,即设计的原理和概念不应该受限于特定编程语言,而是应该适用于各种面向对象语言。 #### UML的现实意义与应用 UML对于软件设计者和开发者来说具有深远的影响。它不仅提供...

    面向对象基本原则PPT

    这个PPT讲述了面向对象的几个基本原则,很详细,还有代码示例

    面向对象设计原则资料

    面向对象设计原则是软件工程领域中的核心概念,它旨在提高代码的质量、可读性、可维护性和可扩展性。在给定的文件标题与描述中,“面向对象设计原则资料”和“面向对象设计原则,还有例子,不错的东东哦。”这两部分...

    C#面向对象设计模式与原则

    首先,让我们了解面向对象设计的基本原则,它们包括单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)、依赖倒置原则(DIP)。这些原则指导我们如何编写高质量的、易于维护的代码。 1. 单一...

    面向对象的六大基本原则.md

    介绍面向对象(OOP)的六大基本设计原则,使用markdown格式编写,使用浏览器即可查看! 让我们一起new一个对象吧~O(∩_∩)O

    面向对象基本原则 面向对象基本原则

    这一原则是面向对象设计中非常核心的概念之一,它源于对软件模块内聚性的深入理解。“单一职责原则”可以被概括为:“一个类应该只有一个使其发生变化的原因”。这意味着如果一个类承担了多种功能,那么任何一种功能...

    面向对象设计的基本原则和实践建议

    在面向对象设计中,我们遵循一些核心的原则,这些原则有助于创建可维护、可扩展、易于理解和复用的软件系统。以下是对这些基本原则和实践建议的详细阐述: 1. **单一职责原则(Single Responsibility Principle, ...

    面向对象设计原则和设计模式

    面向对象设计原则是指导我们如何有效地创建和组织面向对象代码的一组基本规则。主要原则包括: 1. **单一职责原则(SRP)**:一个类或模块应该只有一个引起其变化的原因,即每个类应只有一个职责。这有助于减少类之间...

    面向对象设计理论

    下面将详细阐述面向对象设计的基本概念、原则以及在两个文档——"面向对象分析与设计"和"面向对象的思考过程"中可能涵盖的关键知识点。 1. **面向对象的基本概念**: - **对象**:对象是类的实例,具有属性(数据...

Global site tag (gtag.js) - Google Analytics