面象对象设计原则简介

一、面向对象设计原则

  • 单一职责原则(SRP)
  • 开闭原则(OCP)
  • 里氏替换原则(LSP)
  • 依赖倒置原则(DIP)
  • 接口隔离原则(LSP)
  • 迪米特原则(LOP)
  • 组合/聚合复用原则(CARP)

二、单一职责原则(SRP)

  • 定义:系统中每一个类都应该中有一个职责
  • 优点:高内聚、低耦合
  • 高内聚是指一个类或者功能模块由相关性很强的代码组成,类或者模块很难拆分,它只负责一项任务
  • 耦合指的是类之间或模块之间的相互联系,耦合度越高,说明联系越紧密,独立性越差,我们越难拆分相反,耦合度越低,联系越松散独立性越好,可重用的可能性越大

按照单一职责开发可以缩小单个类的规模,降低耦合度,并提高类的复用性

三、开闭原则(OCP)

  • 对扩展开放,对修改关闭

优点:

  • 适应必和灵活性
  • 稳定性和延续性
  • 可复用性与可维护性

四、里氏替换原则(LSP)

  •  定义:在任何父类出现的地方都可以用其子类来替换且不影响功能。它是对开闭原则的扩展。
  • 里氏替换原则所表述的就是在一个继承体系中的对象应该具有共同的外在特征。
  • 里氏替换原则主张我们使用“抽象”和“多态”将设计中的静态结构改为动态结构。
  • 对象的多态性其实就是最好的里氏替换原则的例子

五、依赖倒置原则(DIP)(控制反转)

  •  定义:高层模块不应该依赖底层模块,两者都应该依赖抽象; 抽象不应该低速细节;细节应该依赖抽象。
  • 接口负责公共方法的声明,抽象类负责公共方法的实现,和开闭原则相似,它们都是在程序增加新功能时不去修改原有的程序
  • 面向接口编程
  • 好处:提高程序的稳定性,可维护性,可扩展性。

六、接口隔离原则(LSP)

定义:使用多个专门的接口比使用单一的总接口要好

优点:不强迫新功能实现不需要的方法

七、迪米特原则(LOP)(最少知识原则)

定义:一个对象应当对其他对象尽可能少的了解,也尽可能的被更少的对象了解

当一个类需要调用另一个类的某个方法时,通过中介类实现

优点:降低耦合

缺点:过度使用,通信效率降低,产生大量的中介类

不能过度使用

八、组合/聚合复用原则(CARP)

定义:优先使用组合,使用系统更灵活,其次才考虑继承,达到复用的目的

优点:

  • 组合复用所需要的依赖较少
  • 组合复用可以在运行时间内动态进行,新对象可以动态的引用与成分对象类型相同的对象

缺点:使用组合利用建造的系统会有较多的对象需要管理

时间: 2024-10-12 21:07:37

面象对象设计原则简介的相关文章

适用于Java开发人员的SOLID设计原则简介

看看这篇针对Java开发人员的SOLID设计原则简介.抽丝剥茧,细说架构那些事——[优锐课] 当你刚接触软件工程时,这些原理和设计模式不容易理解或习惯.我们都遇到了问题,很难理解SOLID + DP的思想,甚至很难正确实施它们.确实,“为什么要SOLID?”的整个概念,以及如何实施设计模式,这需要时间和大量实践. 我可以说实话,关于SOLID设计模式以及TDD等其他领域,从本质上讲,它们很难教.很难以正确的方式将所有这些知识和信息传授给年轻人. 让SOLID 变得容易 在本文中,我将以尽可能简单

设计模式与设计原则简介(一)

什么是设计模式? 我们知道对于很多数学问题,经常会有多种不同的解法 而且这其中可能会有一种比较通用简便高效的方法 我们在遇到类似的问题或者同一性质的问题时,也往往采用这一种通用的解法 将话题转移到程序设计中来 对于软件开发人员, 在软件开发过程中, 面临的一般问题的解决方案就是设计模式(准确的说是OOP中) 当然,如同数学的解题思路一样,设计模式并不是公式一样的存在 设计模式(Design pattern)代表了最佳的实践 是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的宝贵经验 是

面象对象设计6大原则之二:开放封闭原则

定义 一个软件的实体,包括类.方法.模块.应该对扩展开放,对修改关闭. 也就是说一个软件的实体应该通过扩展的方式来修改变化,而不是修改已有实体源代码. 开放封闭原则也是最基本需要遵守的原则,我们应该尽量保证系统的稳定性,我们在实现另外一个功能的时候不能修改之前已有的代码以免造成之前的功能出现BUG,带来不必要的麻烦,所以开放封闭原则正是引导我们去设计一个稳定.方便扩展的系统. 在实际应用中我们一般会有以下几种做法保证开放封闭原则: 1.抽象出一个接口或者抽象类,定义公共的方法,达到扩展的目的.实

面象对象设计6大原则之五:依赖倒置原则

依赖倒置原则(DIP),The Dependency Inversion Principle 定义 1.高层模块不应该依赖低层模块,两都应该依赖于抽象. 2.抽象不依赖于具体细节. 3.具体细节应该依赖于抽象. 抽象就是指接口或者抽象类,细节是指实现接口或者抽象类的具体实现类. 也就是说模块之间的依赖通过接口或抽象发生的,两个实现细节之间不能直接发生依赖,接口不能依赖实现,实现应该依赖抽象. 我们在进行分布式系统开发时,比如常用的dubbo框架,各个系统的连接都是通过接口发生的,只要依赖对方的接

第二章 【面向对象设计原则】

(一)如何衡量软件设计的质量 内聚度: 表示一个应用程序的单个单元所负责的任务数量和多样性.内聚与单个类或者单个方法单元相关.(好的软件设计应该做到高内聚.) 耦合度: 耦合度表示类之间关系的紧密程度.低耦合是指尽量使用抽象耦合,少用具体耦合. 设计原则名称 设计原则简介 重要性 单一职责原则 的职责要单一,不能将太多的职责放在一个类中. ★★★★☆ 开闭原则 软件实体对扩展是开放的,但对修改是关闭的,即在不修改一个软件实体的基础上去扩展其功能.  ★★★★★ 历史替换原则 在软件系统中,一个可

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

设计原则名称 设计原则简介 重要性 单一职责原则 类的职责要单,不能将太多的职责放在一个类中 四颗星 开闭原则 软件实体对扩展是开放的,但对修改是关闭的,即在不修改一个软件实体的基础上去扩展其功能 五颗星 里氏替换原则 在软件系统中一个可以接受基类对象的地方必然可以接受一个子类对象 四颗星 依赖倒转原则 要针对抽象层编程,而不要针对具体类编程 五颗星 接口隔离原则 使用多个专门的接口来取代一个统一的接口 两颗星 迪米特法则 一个软件实体对其它实体的引用越少越好,或者说如果两个类不必彼此直接通信,

OOAD之面向对象设计原则

学习这个设计模式 真的觉得很抽象,只有自己多多的领会! 在很多时候,很多的知识都会觉得讲起来是很矛盾的. 本章目标 1 掌握内聚度和耦合度的概念 2 掌握面向对象设计原则 (一)如何衡量软件设计的质量 内聚度:表示一个应用程序的单个单元所负责的任务数量和多样性.内聚与单个类或者单个方法单元相关.(在我自己的理解就是:在一个类中完成自己所有的任务,这些任务都在自己的类中.) 耦合度:耦合度表示类之间关系的紧密程度.耦合度决定了变更一个应用程序的容易程度.在紧密耦合的类结构中,更改一个类会导致其它的

【OOAD】面向对象设计原则概述

软件的可维护性和可复用性 知名软件大师Robert C.Martin认为一个可维护性(Maintainability) 较低的软件设计,通常由于如下4个原因造成:? 过于僵硬(Rigidity) ? 过于脆弱(Fragility) ? 复用率低(Immobility) ? 黏度过高(Viscosity) 软件工程和建模大师Peter Coad认为,一个好的系统设计应该具备如下三个性质:? 可扩展性(Extensibility) ? 灵活性(Flexibility)? 可插入性(Pluggabil

写给自己看的小设计5 - 对象设计过程之设计目标

浏览完代码设计中对象设计的核心准则和扩展原则后,最后我们再回头看看另外一个原则不像原则,规则不像规则,模式不像模式,实践不像实践的四不像原则 - GRASP原则. 说到对象设计原则,就不能不提GRASP原则,但是从我来看,这个原则完全不是原则,而是设计过程. GRASP,全称为General Responsibility Assignment Software Pattern,即通用职责分配软件模式,它由<UML和模式应用>(Applying UML and Patterns)一书作者Crai