面向对象编程思想(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 许可协议。转载请注明来源 弈心 !
评论
  目录