zoukankan      html  css  js  c++  java
  • 面向对象基本原则

    单一原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。
    如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。
     
     
    开闭原则(OCP):软件实体(类、模块、函数等)应该可以扩展,但是不可以修改。
    在我们初次编写代码时,假设变化不会发生,当变化发生时,我们就创建抽象来隔离以后发送的同类变化。
    面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。
    开闭原则是面向对象设计的核心所在。遵循这个原则可以带来可维护、可扩展、可复用、灵活性等优势。开发人员应该仅对程序中呈现出的频繁变化的部分做出抽象。
    demo:
    我们需要一个类来做加法运算。客户端--->加法类
    当我们需要增加减法时,我们就要修改原来的类,违背了OCP原则,所以抽象出运算类,客户端-->运算类(加法、减法、乘法等子类)。
     
    依赖倒置原则(DIP):高层模块不应该依赖底层模块,两个都应该依赖抽象。抽象不应该依赖细节,但细节应该依赖抽象。
    依赖倒置是面向对象设计的标志,编程时应该考虑如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或接口,那就是面向对象的设计。
    demo:类A(人)直接依赖于类B(苹果),如果A修改了为依赖C(梨)则必须修改A代码,这样A是高层代码,负责复杂业务,B和C是底层模块。所以ABC3个类都需要抽象,抽象为People和Fruit2个抽象类。
    demo:bufferContainer高层类依赖与ArrayBuffer和ElementArrayBuffer类,但应该使用他们的抽象类Buffer类,然后调用Buffer类的抽象方法。
     
    里氏替换原则(LSP):子类型必须能够替换掉他们的父类型。
    只有子类可以替换掉父类,软件单位的功能不受影响的时候,父类才能真正被复用,而子类也能在父类的基础上增加新的行为。
    demo:现在父类 动物(跑)<---鸟(飞),现在有企鹅类不会飞,如果继承自鸟类,那企鹅就会飞的方法,那他去替换鸟类时肯定会出错,所以这里企鹅类应该继承到动物类,并现实自身的跑的方法。
     
     
     
  • 相关阅读:
    CF453A
    各种算法的复杂度
    状压dp--P2622 关灯问题II
    笛卡尔树模板
    20201122模拟
    nm树上背包+二分--P4322 [JSOI2016]最佳团体
    20201121模拟
    20201119模拟
    斜率优化--P3195 [HNOI2008]玩具装箱
    网络流--最大流,最小割,费用流问题
  • 原文地址:https://www.cnblogs.com/xiaohaoxuezhang/p/6768404.html
Copyright © 2011-2022 走看看