Python基礎【面向物件】
阿新 • • 發佈:2018-12-27
面向物件
從面向過程到面向物件
- 面向過程
在計算機程式設計發展之初,解決一個客觀問題的思路往往是通過設計演算法去對資料進行分析處理最終給出結果。
例如:完成一組資料的排序,生成特定的數列,從一組資料中篩選出符合條件的資料等等。
在面向過程的程式設計中,解決問題是以功能為起點,分析問題主要從 依附在事物上的行為 出發,面向過程的程式設計重在 如何一步步完成這一行為 。
例如:顧客購物可以簡要描述為:顧客進入商店,選擇商品,付錢,離開商店- 為什麼需要面向物件?
但隨著需要解決的問題的規模和複雜度逐漸增加,面向過程的思想在進行程式設計時需要分析和處理的資料就變得非常龐大,不利於設計者對問題的分析和處理,並且在一定程度上限制了程式的執行效率。
面向物件的思維
- 客觀事物描述的時候往往圍繞著 從中抽象出的主要個體
例如:購物這一事件圍繞 顧客、店主 和 商品 發生。- 在對 個體 進行資料分析時,往往可以通過一些 特性(具有的屬性)和行為(進行的動作) 進行描述
例如:顧客擁有 現金餘額 等屬性,可以實施 購買商品 等行為。- 這些獨立的個體都可以進行相應的資料處理,相互之間可以進行資訊的傳遞,作為獨立的通訊單元
- 事實上,客觀事物描述時大多都可以抽象成 多個獨立物件之間進行資訊傳遞和處理 的類似模型來進行分析。
- 換句話說,相比面向過程程式碼複雜度隨著行為的多變性增加,面向物件的思維在程式設計時更為通用,獨立物件的行為/屬性變化不會影響其他部分,更不會導致整體需要調整。
- 在具體問題中,抽象出的有用的物件屬性和行為越具體,描述越精確,抽象出的模型越接近現實情況,具體需要抽象到什麼程度,需要根據需求進行分析。
例如:
如果只需要知道顧客購買了什麼商品,方便統計數量,可以通過新增商品物件,對其數量進行統計分析即可
但如果還需要進行財務管理,就需要給商品增加價格這一屬性,進一步進行資料處理
面向物件和麵向過程的關係
儘管面向物件在面對複雜問題時具有較大優勢,面向過程仍為面向物件的基礎,物件的行為如何實施,物件之間的資料傳遞和處理等仍需要面向過程的思想為基礎進行編寫。
面向物件程式設計中的基本概念(個人理解)
- 類:具有同一類屬性和方法的物件的集合(模板)
- 方法:定義在類中的函式
- 物件:具有類中屬性和方法的具體的獨立個體,即類的例項化個體
- 類變數(類屬性):定義在類中(方法外)的變數,可以在外部直接通過類名.屬性名的形式進行訪問
- 類方法:利用@classmothod裝飾的方法,可以直接通過類名.方法名的形式進行呼叫,無需例項化再呼叫
- 類物件:類本身也是一個特殊物件,在建立類時,會在記憶體中存放(類也可看作是一種資料結構)
- 例項化:建立一個具體的物件即為類的例項化
面向物件的三大特性(相比面向過程)
封裝
面向物件的語言將某個個體的屬性和行為進行封裝(類),作為一個獨立的邏輯單元進行分析處理
繼承
子類從父類中繼承其屬性及方法,也可在子類中加入新的屬性及方法
多型
相同的 函式或資料 作用或傳遞 到不同的物件中,執行或處理 的結果也不同