具體的題目應該是:什么是面向對象?主要的特征是什么?當然還有很多類似的題目,如果你說一下你對面向對象的理解,或者是你對比一下面向過程等等,諸如此類吧?如果我來回答這個問題,我會從以下二個方面來回答。
一、從字面上
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;
}
}
推薦閱讀