標籤:str 就會 孫悟空 括弧 init linu class 設計 返回
面向過程 VS 物件導向
面向過程的程式設計的核心是過程(流水線式思維),過程即解決問題的步驟,面向過程的設計就好比精心設計好一條流水線,考慮周全什麼時候處理什麼東西。
優點是:極大的降低了寫程式的複雜度,只需要順著要執行的步驟,堆疊代碼即可。
缺點是:一套流水線或者流程就是用來解決一個問題,代碼牽一髮而動全身。
應用情境:一旦完成基本很少改變的情境,著名的例子有Linux內核,git,以及Apache HTTP Server等。
物件導向的程式設計的核心是對象(上帝式思維),要理解對象為何物,必須把自己當成上帝,上帝眼裡世間存在的萬物皆為對象,不存在的也可以創造出來。物件導向的程式設計好比如來設計西遊記,如來要解決的問題是把經書傳給東土大唐,如來想了想解決這個問題需要四個人:唐僧,沙和尚,豬八戒,孫悟空,每個人都有各自的特徵和技能(這就是對象的概念,特徵和技能分別對應對象的屬性和方法),然而這並不好玩,於是如來又安排了一群妖魔鬼怪,為了防止師徒四人在取經路上被搞死,又安排了一群神仙保駕護航,這些都是對象。然後取經開始,師徒四人與妖魔鬼怪神仙互相纏鬥著直到最後取得真經。如來根本不會管師徒四人按照什麼流程去取。
物件導向的程式設計的
優點是:解決了程式的擴充性。對某一個對象單獨修改,會立刻反映到整個體系中,如對遊戲中一個人物參數的特徵和技能修改都很容易。
缺點:可控性差,無法向面向過程的程式設計流水線式的可以很精準的預測問題的處理流程與結果,物件導向的程式一旦開始就由對象之間的互動解決問題,即便是上帝也無法預測最終結果。於是我們經常看到一個遊戲人某一參數的修改極有可能導致陰霸的技能出現,一刀砍死3個人,這個遊戲就失去平衡。
應用情境:需求經常變化的軟體,一般需求的變化都集中在使用者層,互連網應用,企業內部軟體,遊戲等都是物件導向的程式設計大顯身手的好地方。
在python 中物件導向的程式設計並不是全部。
物件導向編程可以使程式的維護和擴充變得更簡單,並且可以大大提高程式開發效率 ,另外,基於物件導向的程式可以使它人更加容易理解你的代碼邏輯,從而使團隊開發變得更從容。
瞭解一些名詞:類、對象、執行個體、執行個體化
類:具有相同特徵的一類事物(人、狗、老虎)
對象/執行個體:具體的某一個事物(隔壁阿花、樓下旺財)
執行個體化:類——>對象的過程(這在生活中表現的不明顯,我們在後面再慢慢解釋)
在python中,用變數表示特徵,用函數表示技能,因而具有相同特徵和技能的一類事物就是‘類’,對象是則是這一類事物中具體的一個。
建立一個類就會建立一個類的名稱空間,用來儲存類中定義的所有名字,這些名字稱為類的屬性
而類有兩種屬性:靜態屬性和動態屬性
- 靜態屬性就是直接在類中定義的變數
- 動態屬性就是定義在類中的方法
class 類名: def __init__(self,參數1,參數2): self.對象的屬性1 = 參數1 self.對象的屬性2 = 參數2 def 方法名(self):pass def 方法名2(self):pass對象名 = 類名(1,2) #對象就是執行個體,代表一個具體的東西 #類名() : 類名+括弧就是執行個體化一個類,相當於調用了__init__方法 #括弧裡傳參數,參數不需要傳self,其他與init中的形參一一對應 #結果返回一個對象對象名.對象的屬性1 #查看對象的屬性,直接用 對象名.屬性名稱 即可對象名.方法名() #調用類中的方法,直接用 對象名.方法名() 即可
python--物件導向