贾鸿硕的博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

总述

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

  • 单一职责原则(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依赖的接口。

迪米特法则

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

开放封闭原则

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

posted on 2023-06-10 15:24  jhsss  阅读(32)  评论(0编辑  收藏  举报