具体的题目应该是:什么是面向对象?主要的特征是什么?当然还有很多类似的题目,如果你说一下你对面向对象的理解,或者是你对比一下面向过程等等,诸如此类吧?如果我来回答这个问题,我会从以下二个方面来回答。
一、从字面上
1、什么叫面向?
面向即看待。把我们所能客观看到的一切事物都抽象成一个对象。也就是所说的“万物皆对象”。其主要思想就是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为。
通俗点:开发一套程序和装修一个房子一样,房子里电视、电脑、空调、冰箱;你都可以当做一个个实体,一个个对象。其实每个对象都有自己独特的功能职责,我们就是把每个独立的功能模块抽象成类,然后形成对象。一个系统会有大量的对象组成,这些对象之间都能够接收信息、处理数据和向其他对象发送信息等等相互作用。
2、什么是对象?
在我们PHP里对象是数据类型中的一种,整型、浮点、布尔、字符串又叫标量类型,标量相对复合类型而言,即是只能有一个值。数组作为复合类型能存储多种类型的值,但是当我要形容某一类的事物,且事物中又有很多种行为动作,那么就很难表现了。然后对象类型就应运而生。我们可以用对象来保存具体的叫什么名字、什么性别、会什么功夫的人。
总结:我们编写程序就是为了解决现实中的问题,而面向对象思想更符合人们处理较大项目的业务理解和代码开发。
二、从三大特性上对比面向过程、顺序编程
1、封装
封装可不是像函数那样的代码封装。封装更主要是将一个类的实现和使用进行分开,只保留部分属性和方法给开发人员使用。于是开发人员只需要关注这个类如何使用,而不用去关心具体的实现过程。而封装主要也有三个访问控制符来体现:public(公开的)、protected(受保护的)、private(私有的),同时也体现了安全性
2、继承
子类继承了父类,便自动继承了父类中所有的(public、protected)属性和方法。抽象类的存在就是为了继承,抽象类的定义往往就是提取了子类的公共属性和功能方法,以便子类继承使用。框架中(thinkphp5)的控制器、模型,定义时若继承了控制器基类、模型基类,便拥有了类似视图渲染、页面跳转、修改器、软删除等等功能。继承体现了代码的复用性或重用性
3、多态
子类继承了来自父类中的成员属性和方法。并多其方法进行实现(抽象、接口)或重写,于是多个子类中都具有相同的方法,但是却有了不同形态、不同结果的体现。多态增强了代码的灵活性和扩展性
代码参考
##### 面向顺序
$a = 20;
$b = 30;
$total = $a + $b;
##### 面向过程
function jia($one,$two){
return $one + $two;
}
$a = 20;
$b = 30;
$total = jia($a,$b);
##### 面向对象
class Jsq
{
protected $first;
protected $second;
protected $operator;
public function __construct($firstNumber,$secondNumber,$operator)
{
$this->first = $firstNumber;
$this->second = $secondNumber;
$this->operator = $operator;
switch ($this->operator){
case '+':
return $this->jia();
break;
}
}
protected function jia()
{
return $this->first + $this->second;
}
}
推荐阅读