面向對象編程,Object Oriented Progamming,OOP。
1、類和對象
面向對象編程的兩個重要概念:類(class)和對象(object)。類是抽象的概念,對象是具體的東西。
在面向對象編程的世界中,一切皆為對象,對象都有屬性(數據)和行為(方法),每個對象都是獨一無二的,而且對象一定屬于某個類。
當把擁有共同特征的對象的靜態特征(屬性)和動態特征(行為)抽取出來之后,就可以定義出類。
如汽車是一個類,它的屬性包括最大速度、剩余油量等,它的方法可以有:加油、設定行駛速度等。
具體來說,一組數據結構和處理它們的方法的集合,稱為類(class);類是具備某項功能的抽象模型,實際應用中,需要對類進行實例化,即為對象(object)。
如汽車是一個類(class),具體到每輛不同車就是對象(object)。
2、面向過程和面向對象
與面向對象編程相對的是面向過程編程,即把問題分解為一系列解題步驟,然后用函數實現這些步驟。
- 面向過程的思想:由過程、步驟、函數組成,從上到下,從大到小,逐步細化,以過程為核心;
- 面向對象的思想:先開發類,再得到對象,通過對象之間的調用解決問題,以對象為中心。
比如開發一個五子棋游戲。
面向過程的設計:首先分析解題步驟:開始游戲→黑子先走→繪制畫面→判斷輸贏→輪到白子→繪制畫面→判斷輸贏→返回步驟2,直到輸出最后結果。然后用函數實現上面每個步驟。
面向對象的設計:整個五子棋可以設計為三個類:
- 玩家:黑白雙方,這兩方的行為是一樣的;
- 棋盤:負責繪制畫面;
- 規則:負責判定輸贏。
然后,第一類對象(玩家)接受用戶輸入,并告知第二類對象(棋盤)棋子布局的變化,棋盤對象接收到了棋子的變化,就在屏幕上面顯示出這種變化,同時第三類對象(規則)對棋局進行判定。
可以看出,面向對象是以功能來劃分問題,而不是步驟。
3、面向對象編程的三大特點
面向對象編程的三大特點:封裝性、繼承性和多態性。
- 封裝(encapsulation):就是將一個類的使用和實現分開,只保留有限接口與外部聯系。對于用到該類的程序員,不需關心這個類是如何實現的,只需知道如何使用。即通過類的封裝隱藏類的內部實現細節。
- 繼承(inheritance):就是派生類(子類)自動繼承一個或多個基類(父類)的屬性和方法,并可以重寫或添加新的屬性和方法。
- 多態(polymorphism):就是調用成員函數時,會根據調用函數的對象的類型來執行不同的函數。多態最常見的用法就是聲明基類類型的指針,利用該指針指向任意一個子類對象,可以根據子類的不同而實現不同的方法。通過多態實現基于對象類型的動態分派。
封裝可以代碼模塊化,繼承可以擴展已存在的代碼,它們都可以實現代碼重用;而多態則可以實現接口重用。






