面向对象编程思想(OOP)


前言

软件开发中疑难问题:

  • 软件复杂庞大
  • 很多软件进入维护阶段
  • 需求的不断变更

软件开发中存在很多其他的问题,上面只是从程序开发和设计的角度看到的部分问题。需求解决上面软件开发中的问题,就要求我们编写(设计)的软件具有很好的可读性、可维护性和可扩展性。我们需要保证代码具有高内聚低耦合。

什么是对象?

对象的含义是指具体的某一个事物,即在现实生活中能够看得见摸得着的事物。比如,一个球,一张桌子,一辆汽车都是对象。

对象就是具有可描述特征事物,我们可以用某种特定的方式去影响和操作它。

面向对象程序设计中,对象包含两个含义,其中一个是数据,另外一个是动作对象则是数据和动作的结合体。对象不仅能够进行操作,同时还能够及时记录下操作结果。

方法是指对象能够进行的操作,方法同时还有另外一个名称,叫做函数方法是类中的定义函数,其具体的作用就是对对象进行描述操作

面向对象编程

四大基本特性

抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。对同一事物在不同的需求下,需要提取的特性可能不一样。得到的抽象模型中一般包含:属性(数据)和操作(动作)。这个抽象模型我们称之为。对进行实例化得到对象

封装:将数据和代码捆绑到一起,对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。封装可以使具有独立性和隔离性;保证类的高内聚。只暴露给类外部或者子类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected和private等)

面向对象封装比传统语言的封装更为清晰、更为有力。有效实现了两个目标:对数据和行为包装信息隐藏

继承:对现有的一种复用机制。简单地说就是一种层次模型,这种层次模型能够被重用。层次结构的上层具有通用性,但是下层结构则具有特殊性。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现

多态多态是指不同事物具有不同表现形式的能力。多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为;就是类多态特性。多态可以分成编译时多态和运行时多态。

多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。一个接口,多种方式。

封装可以隐藏实现细节,使得代码模块化
继承可以扩展已存在的代码模块(类);为了实现代码重用
多态则是为了实现接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

抽象、封装、继承和多态是面向对象的基础。在面向对象四大基础特性之上,我们在做面向对象编程设计时还需要遵循有一些基本的设计原则。

七大设计原则

  1. 开闭原则

    一个软件实体,如类,模块和函数应该多外扩展开发,对内修改关闭

    即不修改原有代码的前提下给程序扩展功能,增加了程序的可扩展性。

  2. 单一职责原则

    一个类只允许有一个职责,即只有一个导致该类变更的原因

  3. 依赖倒置原则

    依赖抽象而不是依赖实现,高层模块不能依赖底层模块

    即针对接口编程,而不是针对实现编程,通过抽象搭建框架,建立类与类的关联,以减少类间的耦合性。

  4. 接口分离原则

    多个特定的客户端接口要好于一个通用性的总接口;

    避免用一个接口里面包含不同职责的方法,接口责任划分更加明确

  5. 迪米特法则

    一个对象应该对尽可能少的对象有接触,只接触那些真正需要接触的对象

  6. 里氏替换原则

    所有引用基类的地方必须能透明地使用其子类的对象,而程序执行效果不变。可以检测继承使用的正确性。

  7. 合成复用原则

    尽量使用合成/聚合的方式,而不是使用继承。

总结为:

  • 开闭原则:是总纲,告诉我们要对扩展开放,对修改关闭;
  • 单一职责原则:告诉我们实现类/方法要职责单一;
  • 依赖倒置原则:告诉我们不要破坏继承体系;
  • 接口隔离原则:告诉我们在设计接口的时候要精简单一;
  • 迪米特法则:告诉我们要降低耦合度;
  • 里氏替换原则:告诉我们不要破坏继承体系;
  • 合成复用原则:告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。

在遵循这些面向对象设计原则基础上,前辈们总结出一些解决不同问题场景的设计模式,以四人帮的gof23最为知名。

24种设计模式(gof23+1)

  • 创建型模式:

    1. 简单工厂模式(不包含在gof23中)
    2. 工厂模式
    3. 抽象工厂模式
    4. 单例模式
    5. 原型模式
    6. 创建者模式
  • 结构型模式:

    1. 组合模式
    2. 装饰者模式
    3. 外观模式
    4. 适配器模式
    5. 代理模式
    6. 享元模式
    7. 桥接模式
  • 行为型模式:

    1. 观察者模式
    2. 策略模式
    3. 状态模式
    4. 中介模式
    5. 模板方法
    6. 命令模式
    7. 备忘录模式
    8. 访问者模式
    9. 解释器模式
    10. 迭代器模式
    11. 职责链模式

怎么理解面向对象的JavaScript?

详情查看:全面理解面向对象的JavaScript


文章作者: 弈心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 弈心 !
评论
  目录