python是一門基於面向過程基礎之上的物件導向(oop)的程式語言。
物件導向具有最基本的3個特徵:封裝、繼承、多型
封裝:我們家裡都有電視機,從開機,瀏覽節目,換台到關機,我們不需要知道電視機裡面的具體細節,只需要在用的時候按下遙控器就可以完成操作,這就是功能的封裝。在用支付寶進行付款的時候,只需要在用的時候把二唯碼給收款方或是掃一下收款方提供的二唯碼就可以完成支付,不需要知道支付寶的支付介面,以及後台的處理資料的能力,這就是方法的封裝。這是生活意義層面的封裝,但是深究的話,也是用過編碼的封裝實現的屬性和方法的封裝,留下簡單的介面,使得使用者不用明白其中原理,只要根據介面的呼叫,就可以實現自己需要的功能。
第一層面的封裝
建立類和物件時,分別建立兩者的命名空間。只能通過類名加「.」或者obj.的方式訪問裡面的名字。
第二層面的封裝
類中把某些屬性和方法隱藏起來,或者定義為私有,只在類的內部使用,在類的外部無法訪問,或者留下少量的介面(函式)供外部訪問。
繼承:從人類遺傳來說,父母親擁有的基本屬性(比如高矮情況、膚質、體型、頭髮的稀疏程度等)都會從本質上對子女的屬性有遺傳上的決定性作用。生長在家庭中的孩子,基本上也會學習父母親具有的技能和行為,比如學習父親的下象棋,學習母親的彈鋼琴技藝。尤其是在古代,子承父業是最常見的,這就像是物件導向中的繼承,由父類的的屬性和方法,一旦子類繼承之後,就會擁有相同的屬性和方法。它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。
總結來講,物件導向可以提高**的重用性,降低內部的耦合度,提高開發的效率。
附加:
面向過程與物件導向程式設計的區別–引自 terrychou 的部落格
面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了;
物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
可以拿生活中的例項來理解面向過程與物件導向,例如五子棋,面向過程的設計思路就是首先分析問題的步驟:1、開始遊戲,2、黑子先走,3、繪製畫面,4、判斷輸贏,5、輪到白子,6、繪製畫面,7、判斷輸贏,8、返回步驟2,9、輸出最後結果。把上面每個步驟用不同的方法來實現。
如果是物件導向的設計思想來解決問題。物件導向的設計則是從另外的思路來解決問題。整個五子棋可以分為1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪製畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類物件(玩家物件)負責接受使用者輸入,並告知第二類物件(棋盤物件)棋子布局的變化,棋盤物件接收到了棋子的變化就要負責在螢幕上面顯示出這種變化,同時利用第三類物件(規則系統)來對棋局進行判定。
可以明顯地看出,物件導向是以功能來劃分問題,而不是步驟。同樣是繪製棋局,這樣的行為在面向過程的設計中分散在了多個步驟中,很可能出現不同的繪製版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而物件導向的設計中,繪圖只可能在棋盤物件中出現,從而保證了繪圖的統一。
面向過程與物件導向的優缺點
面向過程
優點:效能比物件導向高,因為類呼叫時需要例項化,開銷比較大,比較消耗資源,比如微控制器、嵌入式開發、linux/unix等一般採用面向過程開發,效能是最重要的因素。
缺點:沒有物件導向易維護、易復用、易擴充套件
物件導向
優點:易維護、易復用、易擴充套件,由於物件導向有封裝、繼承、多型性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易於維護
缺點:效能比面向過程低
oop物件導向
首先是定義 什麼是物件 物件就是屬性的無序集合,每個屬性存放乙個 原始值or物件or函式 既然是屬性的無序集合,那麼屬性的含義顧名思義,那麼屬性是什麼 屬性就是乙個個的鍵值對.也就是 屬性名 屬性 一分為二,首先是屬性名 什麼可以做屬性名,既然屬性的名字,所以我們一般是用字串來命名的,當然,如果自己...
OOP 物件導向
oop思想 接觸到任意乙個任務,首先想到的是這個人物的構成,是由模型構成的 幾個名詞 oo 物件導向 ooa 物件導向的分析 ood 物件導向的設計 ooi 物件導向的實現 oop 物件導向的程式設計 ooa ood ooi 物件導向的實現過程 類和物件的概念 類 抽象名詞,代表乙個集合,共性的事物...
物件導向 oop
物件導向的核心 類 物件 需要有意義的物件導向的 不是有了類就是物件導向 例項化的方法 設計層面 函式 程式運形,過程式一種稱謂 物件 物件是現實世界或者思維世界中的實體在計算機中的反映,它將資料以及這些資料上的操作封裝在一起 類 一類事物的統稱,物件是類具體化的產物,也就是例項化 不同的物件有什麼...