代碼能借用就借用。
—— Tom Duff
目錄
編程可分爲面向過程編程
和面向對象編程
,它們是兩種不同的編程方式,當然背後的思維方式也是不同的。面向過程編程是一種傳統的編程方式,面向對象編程是一個更高級的編程方式。
1,面向過程編程
面向過程編程(POP
)的重點在於過程
二字。
面向過程比較好理解,就是按照人們通常的思維方式,在做一件事情的時候,將這件事情劃分爲多個步驟,一步一步來做。
面向過程編程,就是在進行一個項目時,將這個項目分爲多個小的步驟,一個步驟就是一個過程,將這些過程全部組織起來,就形成了完整的項目。
C 語言是典型的面向過程編程語言
比如,我們可以將我要去北京
這件事情分爲以下四個步驟:
- 去高鐵站
- 購買高鐵票
- 持票上高鐵
- 坐高鐵到北京
這裏的每個步驟相當於一個過程,我們將這些過程
封裝成函數
,然後,從前到後將這些函數
組織起來,就完成了我要去北京
這件事情。
我們將這個過程用簡單的代碼實現如下,將該代碼保存在to_beijing.py
文件中:
#! /usr/bin/env python3
def to_high_station():
print('我到了高鐵站')
def buy_rail_tickets():
print('我買了高鐵票')
def geton_high_rail():
print('我坐上了高鐵')
def to_beijing():
print('我到了北京')
if __name__ == '__main__':
to_high_station()
buy_rail_tickets()
geton_high_rail()
to_beijing()
在控制檯執行命令,如下:
$ python3 to_beijing.py
我到了高鐵站
我買了高鐵票
我坐上了高鐵
我到了北京
2,面向對象編程
面向對象思想
面向對象編程(OOP
)的重點在與對象
二字,主要的編程思想是圍繞對象
展開。
在思考一個項目的時候,將項目中的重要點/關鍵點
都設計成一個個的類
,每個類承擔着不同的工作,不同的功能被歸納到不同的類中。然後,由類產生出對象,這些對象之間的相互作用,最終組成了一個完整的項目。
類與對象
面向對象編程中的兩個非常重要概念是類
與對象
,類
也是代碼複用的一種機制。
前面我們講到過,
函數
和模塊
都是代碼複用的機制。
類
代表一類有着相同特徵
事物,是一個抽象的概念。由同一個類產生的對象,有着相同的特性。比如人類
都會行走,會使用工具,需要呼吸和喝水,這都是人類的共性。
對象
由類
產生,是一個類的實例
,創建對象的過程,叫做類的實例化
。對象是具體的,而不是抽象的。同一類的不同對象,也有不同的屬性。比如人類
,有不同的性別,姓名和年齡等,這都是人類的不同屬性。
設計模式
是對面向對象編程
的寶貴經驗的歸納總結,讓我們可以更方便的運用面向對象
的思想來進行編程工作。
面嚮對象語言
Java 語言是完全的面向對象
編程語言,因爲所有的步驟都在類
中進行。
C++ 語言是半面向對象
編程語言,它被稱爲帶類的 C
,即支持面向過程編程,又支持面向對象編程。
Python 語言是一門腳本語言
,以簡單優雅
爲設計理念,即可以面向過程編程,也可以面向對象編程,但不像C++ 語言那樣有太多的複雜枯燥的概念,Python 語言更注重實用性。
面向對象三大特徵
封裝
,繼承
和多態
是面向對象的三大特徵,這三種特徵都是面向對象
編程語言自身提供的機制,可以讓我們更方便的進行面向對象程序設計:
- 封裝:讓用戶可以訪問需要的方法,禁止訪問不必要的方法,屏蔽了類內部的複雜性。
- 繼承:使得子類可以繼承父類的代碼,也是一種代碼複用手段,增強了類與類之間的邏輯結果關係。同時,
繼承
也是多態
的必要條件。 - 多態:一個事物(對象)可以表現多種
形態
,多態是面向對象編程中,一個非常強大的特性。
面向對象編程
我們仍然以我要去北京
這件事來說明,用面向對象編程
是如何實現的。
面向對象編程的重點在於類的設計
,如何將一個大的項目,拆分爲不同的,必要的類。類的功能是單一的,而不是將不同的功能糅雜到一個類中。
首先,我們需要設計出一個類
,比如類名
叫作SomeOne
,這個類
至少需要有四項功能:
- 去高鐵站
- 購買高鐵票
- 持票上高鐵
- 坐高鐵到北京
我們需要將這四項功能,寫成四個方法
,放在類SomeOne
中,代碼如下:
#! /usr/bin/env python3
# 定義一個類
class SomeOne:
# 構造函數
def __init__(self, name):
self.name = name
def to_high_station(self):
print('%s 到了高鐵站' % self.name)
def buy_rail_tickets(self):
print('%s 買了高鐵票' % self.name)
def geton_high_rail(self):
print('%s 坐上了高鐵' % self.name)
def to_beijing(self):
print('%s 到了北京' % self.name)
if __name__ == '__main__':
# 創建一個類的對象
i = SomeOne('小明')
i.to_high_station()
i.buy_rail_tickets()
i.geton_high_rail()
i.to_beijing()
將該代碼寫在文件SomeOne.py
中,在控制檯執行命令,如下:
$ python3 SomeOne.py
小明 到了高鐵站
小明 買了高鐵票
小明 坐上了高鐵
小明 到了北京
在上面的代碼中,我們定義了一個名叫SomeOne
的類,其中包含了我們需要的四個方法,另外還有一個__init__
的方法,這是類的構造函數(後續我們會詳細講解)。
在__main__
代碼塊中,我們創建了SomeOne
類的對象i
,並調用了該對象的四個方法。
下一節,我們來詳細介紹類與對象
。
(完。)
推薦閱讀:
Python 簡明教程 ---14,Python 數據結構進階
歡迎關注作者公衆號,獲取更多技術乾貨。