面向對象與面向過程的差別
1.面向過程就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實作,使用的時候一個一個依次調用就可以了;
2.面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描叙某個事物在整個解決問題的步驟中的行為。
3.可以拿生活中的執行個體來了解面向過程與面向對象,例如五子棋,面向過程的設計思路就是首先分析問題的步驟:(1)、開始遊戲,(2)、黑子先走,(3)、繪制畫面,(4)、判斷輸赢,(5)、輪到白子,(6)、繪制畫面,(7)、判斷輸赢,(8)、傳回步驟2,(9)、輸出最後結果。把上面每個步驟用不同的方法來實作。
4.如果是面向對象的設計思想來解決問題。面向對象的設計則是從另外的思路來解決問題。整個五子棋可以分為1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪制畫面,3、規則系統,負責判定諸如犯規、輸赢等。第一類對象(玩家對象)負責接受使用者輸入,并告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化就要負責在螢幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定。
5.可以明顯地看出,面向對象是以功能來劃分問題,而不是步驟。同樣是繪制棋局,這樣的行為在面向過程的設計中分散在了多個步驟中,很可能出現不同的繪制版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而面向對象的設計中,繪圖隻可能在棋盤對象中出現,進而保證了繪圖的統一。
面向過程與面向對象的優缺點
面向過程
優點:性能比面向對象高,因為類調用時需要執行個體化,開銷比較大,比較消耗資源,比如單片機、嵌入式開發、Linux/Unix等一般采用面向過程開發,性能是最重要的因素。
缺點:沒有面向對象易維護、易複用、易擴充
面向對象
優點:易維護、易複用、易擴充,由于面向對象有封裝、繼承、多态性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易于維護
缺點:性能比面向過程低
面向對象的三大特征
1.封裝
所謂封裝,就是将客觀事物封裝成抽象的類,并且類可以把資料和方法讓可信的類或者對象進行操作,對不可信的類或者對象進行隐藏。類就是封裝資料和操作這些資料代碼的邏輯實體。在一個類的内部,某些屬性和方法是私有的,不能被外界所通路。通過這種方式,對象對内部資料進行了不同級别的通路控制,就避免了程式中的無關部分的意外改變或錯誤改變了對象的私有部分。
2.繼承
繼承有這樣一種能力,就是能使用現有的類的所有功能,并無須重新編寫原來的這些類的基礎上對這些功能進行擴充。通過繼承建立的新類稱為子類或派生類,被繼承的稱為基類。繼承有兩種,一種是實作繼承,另外一種是接口繼承。實作繼承可以直接使用基類的屬性和方法而無需額外編碼,接口繼承是指使用屬性和方法的名稱,但是子必須提供實作的能力。
3.多态
所謂多态就是對一個執行個體的相同方法在不同的情形下有不同的表現形式。多态機制使得不同内部結構的對象可以共享相同的外部接口,這就意味着,雖然不同的類的内部操作不同,但可以通過一個公共的類,它們可以通過相同的方式予以調用
類的基本結構
類的關鍵字class,類名的首字母要大寫,在這個類中有屬性和方法,用一個{}把整個括起來
class Student
{
//屬性
private $no;
private $name;
//方法
public function study(){
echo $this->name . '學生在學習';
}
}
public是通路修飾符 對于通路修飾符來說還有private,protected
public是公開的,private是私有的,protected是受保護的
執行個體化對象,就是調用類的構造方法
$stu = new Student();
我們要使用操作符->調用屬性和方法
$stu->name = '張三' ;
若想使用類中的屬性,必須用->
$this表示目前對象
function study(){
echo $this->name . '學生在學習';
}
<?php
//定義學生類
class Student
{
//屬性(成員變量)
public $no;
public $name;
//方法
function study(){
//若想使用類中的屬性,必須用->
//$this表示目前對象
echo $this->name . '學生在學習';
}
}
//執行個體化對象,就是調用類的構造方法
$stu = new Student();
//使用操作符->調用屬性和方法
$stu->name = '張三' ;
echo $stu->no;