首页 > 其他分享 >【面向对象】六大原则

【面向对象】六大原则

时间:2023-06-10 15:35:11浏览次数:34  
标签:六大 依赖 原则 子类 接口 面向对象 Principle 父类

总述

面向对象编程的六大原则是通过多年的实践和经验总结而来的,它们被广泛接受为指导面向对象软件设计和开发的基本准则。包括以下六点:

  • 单一职责原则(Single Responsibility Principle,SRP)
  • 里氏替换原则(Liskov Substitution Principle,LSP)
  • 依赖倒置原则(Dependency Inversion Principle,DIP)
  • 接口隔离原则(Interface Segregation Principle,ISP)
  • 迪米特法则(Law of Demeter,LoD)
  • 开放封闭原则(Open-Closed Principle,OCP)

下面一一进行解释。

单一职责原则

正如其字面含义,单一职责原则是指在开发中,应当确保一个类只负责一项特定的职责。

尽管很多人没有了解过面向对象的六大原则,但在开发中实际上采用了这一原则去定义类,因此有观点认为强调这一原则是多余的。但在一些特殊的情况下,我们的类定义可能会违背单一职责原则。例如,随着开发工作的推进,对于某一模块增加了需求,这时将新的需求在原有类中实现,就容易违背单一职责原则。

里氏替换原则

里氏替换原则实际上描述了子类继承父类时的继承规则,要求继承后得到的子类可以完全作为父类对象使用,即调用父类拥有的方法时不必区分子类与父类,这也是遵循这一原则定义类所带来的好处。

为了达到里氏替换原则的要求,我们需要在继承父类定义子类时注意以下要点:

  1. 子类可以实现父类的抽象方法,但不可覆写父类的非抽象方法
  2. 子类可以拥有自己的方法
  3. 子类在重载父类方法时,对前置条件(即形参)的约束应当更少,即接受更多数量与类型的形参
  4. 子类在重载父类方法时,对后置条件(即返回值)的约束应当更多,即返回父类方法返回值类型的子类对象

依赖倒置原则

依赖倒置原则指的是高层模块不应当依赖底层模块,而是应该依赖抽象;抽象不应当依赖细节,而细节应当依赖抽象。

更直白的说,当类A的定义中存在一类B的字段时,改为使类B实现接口I,并由类A设置一接口I的字段。这样做的好处是方便替换实现类,此时若类C也继承接口I,将A的依赖由类B替换为类C就轻而易举了。如果不遵循这一原则,将A的依赖由类B替换为类C时,类A内的各个方法里可能会出现调用类B字段方法的方法名在类C中不存在等问题,从而导致大量错误。

接口隔离原则

指的是通过进行依赖的类之间相连的接口要保持尽可能小。

举例而言,类A希望依赖类B,由类A定义接口I的字段,类B实现接口I。若此时,接口I不是A与B之间依赖的最小接口,即I中的一些方法并不会在A与B的依赖间调用,那么就应当将接口I拆分为I1,I2两个接口,由其中一个接口保留A与B之间的最小接口,作为A与B依赖的接口。

迪米特法则

迪米特法则强调一个对象应该对其他对象有最小的了解。一方面,一个对象应当只与和他直接关联的类进行通信;另一方面,对象之间应当尽可能减少对于彼此内部实现的了解。

开放封闭原则

开放封闭原则是六大原则中描述最模糊的,它要求我们在开发中对扩展开放,对修改封闭,即尽量基于原有代码进行扩展以完成优化,避免修改原有代码结构。

标签:六大,依赖,原则,子类,接口,面向对象,Principle,父类
From: https://www.cnblogs.com/hsjia/p/17471258.html

相关文章

  • 面向对象的基本概念
    面向过程:事物比较简单,可以用线性的思维去解决。具体到微观操作,仍然使用面向过程方式来处理。以分步骤的方式解决问题,顺序执行,逐步求精,用'方法'组织代码。面向对象:解决复杂问题,便于我们从宏观上把握事物之间复杂的关系、方便我们分析整个系统。以'分类'的方式解决问题,......
  • 类之OCP(Open Closed Principle):开闭原则
    //z2012-4-1715:31:13PMIS21201.OCP是什么?OCP:OPENCLOSEDPRINCIPLE对扩展开放,对修改关闭Softwareentitiesshouldbeopenforextension,butclosedformodification//z2012-4-1715:54:58PMIS21201.1扩展通过继承、覆写......
  • 实验7 面向对象编程与内置模块
    实验任务1实验源码classAccount:'''一个模拟银行账户的简单类'''def__init__(self,name,account_number,initial_amount=10):'''构造新账户'''self._name=nameself._card_no=account_......
  • 实验7 面向对象编程与内置模块
    实验任务1:模拟银行账户,理解类的封装特性'''银行账户数据:持卡人姓名、账号、当前余额操作:取款、存款、打印账户信息、返回账户余额'''classAccount:'''一个模拟银行账户的简单类'''def__init__(self,name,account_number,initial_amount=10):'&......
  • 一文读懂大厂面试的JAVA基础(集合,面向对象特性,反射,IO,容器)
    整理了操作系统,计算机网络,以及JVM的高频面试题目,对于面试大厂的Android以及后端开发岗位,可以说的是十分必要的部分就是JAVA语言的基础,在整体的内容上我认为有以下的几个部分,我发现任何的学习都是先建立框架体系,再逐个击破,针对Java的基础中包括:(1)Java语言的面向对象的特性(2)Java语言......
  • Java基础之基础语法与面向对象
    前言小知识Java由Sun公司于1995年推出,2009年Sun公司被Oracle公司收购,取得Java的版权Java之父:JamesGosling(詹姆斯·高斯林) 专业术语JDK:javadevelopmentkit(java开发工具包)JRE:javaruntimeenvironment(java运行环境)JVM:javavirualma......
  • 风尚云网微谈前端行业六大说
    风尚云网微谈前端行业,希望对新手小白有些帮助...个人见解,仅供参考,取长补短目录一:关于前端/大前端是什么?二:前端开发工程师是干什么的?三:2023年前端开发还值不值得学习?四:前端工程师需要会什么?五:关于最重要的前端开发薪资问题六:前端开发适合发展的城市一:关于前端/大前端是什......
  • 实验7 面向对象编程与内置模块
    实验任务1task1.py实验源码:classAccount:'''一个模拟银行账户的简单类'''def__init__(self,name,account_number,initial_amount=10):'''构造新账户'''self._name=nameself._card_no......
  • 面向过程与面向对象
                                               《目录》面向过程与面向对象C与C++ 的区别代码复用分层思想封装、继承、多态C语言实现封装       C语言实现继承C语言实现......
  • 【web 开发】PHP面向对象中类的继承
    前言继承(inheritance)是OOP中最重要的特性与概念。父类拥有其子类的公共属性和方法。子类除了拥有父类具有的公共属性和方法以外,还拥有自己独有的属性和方法。一个类可以在声明中用extends,关键字继承另一个类的方法和属性。PHP不支持多重继承,一个类只能继承一个基类。被继承的方法......