解释 OOP 与 OPP 的关系

可能大多数人学习PHP的时候,是冲着他的简单易开发来的,所以很多初学者,不是很能理解OOP和OPP的概念,今天我就依照我的观点详细解说下。
首先我先谈谈OOP,OOP即是面对对象编程,Object Oriented Programming,取首字母简称OOP,那么为什么这么多人崇尚用OOP呢?

    那么我们先来说下,OOP的核心思想:封装,继承,多态。 这几个词比较抽象吧,大家可能理解不上来,那么我就说的直白一点。 对象呢,是由数据和实际上的操作组成的多方法封装体系,与代码实体有直接对应的关系,一个对象类定义了具有相似性质的对象。而继承是对具有层次关系的类的属性进行了一种共享的方式。比如儿子继承父亲的家产一样。所以呢,所谓的面对对象就是基于对象的概念,以对象为中心,以类和继承为构造的代码的结构,实现的一个相应的软件系统。 而至于这个多态呢,大家是不是很奇怪我为什么没讲,其实还是因为PHP的特性:封装是类的构建过程,php它具有;php它也具有继承的特性。唯独这个多态,php体现的十分模糊。原因何在,原因就是因为php是弱类型语言。 java的多态体现的十分清晰,大体分两类:父类引用指向子类对象;接口引用指向实现接口的类对象。java声明变量时都要给变量设定类型,所以存在什么父类引用和接口引用。而php则没有这点体现,php声明变量不需要给变量设定类型,一个变量可以指向不同的数据类型。所以,php不具有像java一样的多态。但是,虽然php多态体现模糊,但还是具有多态特性的。此处就不详细解释了。

讲了一大堆OOP,我觉得有必要解释下OPP的概念,在OOP在九十年代出现之前,常用的开发方式还是OPP,OPP即是面对过程编程,Procedure Oriented Programming,取首字母简称OPP,面向过程呢是一种以过程为中心的编程思想,他们不支持上面讲的继承,多态,并且他们没有一个作用域的逻辑。

    面过过程呢,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。就比如我吃苹果,我要先拿起苹果,再吃。首先拿起苹果这是一个事件,而吃呢就是另一个事件。 面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。可以说面向过程是一种基础的方法。就上面那个吃苹果例子来说吧。
首先我要完成三个步骤
  1. 拿起来
  2. 吃下去
  3. 扔掉
而这样的三个步骤呢,按顺序一个一个的完成,就是面对过程。而我把这三个方法写在一个类中,然后调用就完成了,具体类中顺序是怎样的,不用去处理。

  1. OO的特点, 就是把数据和逻辑封装成一个整体, 带来了强耦合的问题.
  2. OP的特点, 数据和逻辑分开, 绝对的松耦合, 但封装性不够.

这两大编程思想互相排斥的特性,告诉了我们以下两点:

  1. 模块 之间的设计, 为了维护代码(修改bug, 增加新功能, 独立协调成员工作). 严重关注耦合度, 要求尽量即插即用, 模块间完全独立. 这个时候我们需要尽量的按照OP的思路. 模块和模块之间的协作, 务必按照OP的思路. 逻辑分离得非常彻底.
  2. 内部单元 的设计, 尽量封装良好, 利用OO的思想, 将各个零部件整理成一个类整体.

所以,大家千万不要两种相斥的思想迷失了方向。虽然看起来相斥,但是本质上殊途同归。我觉得这两种大家都要理解,并且使用。

本文为ctexthuang原创文章,转载请注明来自ctexthuang_blog

tag(s): none
show comments · back · home
Edit with markdown
召唤看板娘