python基礎四 01 物件導向

2021-10-05 06:39:13 字數 2835 閱讀 2609

物件導向程式設計與面向過程程式設計是兩種常見的程式設計思想。先通過引子來看下:

話說三國時期,曹操帶領百萬大軍攻打東吳,大軍在長江赤壁駐紮,軍船連成一片。

眼看就要滅了東吳,統一天下,曹操大悅,於是大宴眾文武。在酒席間,曹操詩性大發,

不覺吟道:"喝酒唱歌,人生真爽..."。眾文武齊呼:」丞相好詩!「於是命印刷工匠刻版印刷

,以便流傳天下。

版樣給曹操一看,曹操感覺不妥,說道」喝與唱,此話過俗,應改為『對酒當歌』較好!

於是命工匠重新雕刻。那時候,還沒發明活字印刷術,如果樣板要改,只能重頭雕刻。

工匠眼看連夜刻版之工,徹底白費,心中叫苦不迭。只得照辦。

版樣再次出來請曹操過目,曹操細細一品,覺得還是不好,說「人生真爽太過直接,

應該改問語才夠意境,因此應改為『對酒當歌,人生幾何?』」,於是....

在活字印刷術還沒出現之前,如果版樣有改動,只能重新雕刻(這個就相當於面向過程)。

而且在印刷完成後,這個樣板就失去了它的價值,如果需要其他樣板只能重新雕刻。而活字印刷

術的出現就大大改善了印刷技術。如上例」喝酒唱歌,人生真爽「,如果用活字印刷,只需要改四

個字就可,其餘工作都未白做。豈不快哉!!

活字印刷也反應了物件導向(oop)。當要改動時,只需要改要改的地方,此為可維護;

當這些字用完後,並非就完全沒有價值了,它完全可以在後來的印刷中重複使用,此乃可復用;

下次詩若要加字,只需另刻字加入即可,這就是可擴充套件;字的排列可以橫排,也可以豎排,

此是靈活性好。

假如我們要做乙個五子棋遊戲,從兩種設計思路來分析一下。

面向過程的設計思路:

面向過程的設計思路就是首先分析問題的步驟:

1、開始遊戲,

2、黑子先走,

3、繪製畫面,

4、判斷輸贏,

5、輪到白子,

6、繪製畫面,

7、判斷輸贏,

8、返回步驟2,

9、輸出最後結果。

把上面9個步驟用不同的方法來實現。

物件導向的設計思想
物件導向的設計則是從另外的思路來解決問題。整個五子棋可以分為三個部分。

1、黑白雙方,這兩方的行為是一模一樣的,

2、棋盤系統,負責繪製畫面,

3、規則系統,負責判定諸如犯規、輸贏等。

第一類物件(玩家物件)負責接受使用者輸入,並告知第二類物件(棋盤物件)棋子布局的變化,棋盤物件接收到了棋子的變化就要負責在螢幕上面顯示出這種變化,同時利用第三類物件(規則系統)來對棋局進行判定。

通過以上兩個引子,我們已經對面向過程和物件導向有了初步的了解。

面向過程是具體化的,流程化的,解決乙個問題,你需要一步一步的分析,一步一步的實現。

物件導向是模型化的,結構化的。當解決乙個問題的時候,物件導向會把事物抽象成物件的概念,就是說這個問題裡面有哪些物件,然後給物件賦一些屬性和方法,然後讓每個物件去執行自己的方法,問題得到解決。

物件導向的底層其實還是面向過程,把面向過程抽象成類,然後封裝,方便我們我們使用的就是物件導向了。(1).面向過程:

優點:效能比物件導向好,因為類呼叫時需要例項化,開銷比較大,比較消耗資源。

缺點:不易維護、不易復用、不易擴充套件.

(2).物件導向:

優點:易維護、易復用、易擴充套件,由於物件導向有封裝、繼承、多型性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易於維護 .

缺點:效能比面向過程差萬物皆物件

類是物件的模板,物件是類的例項化。物件導向有些概念不搞明白含義,我們就無法進行程式設計。比如:類,物件,屬性,方法,例項和例項化,父類,子類等等。這些都是啥意思?

(1).類是具有相同或相似性質的物件的抽象。如:人類,狗類,車類,槍類,魚類,水果類,美食類,藝術類等等。它們都有相似的性質,但是它們是抽象的,並不是客觀存在的,比如:你能拿出來一水果叫『水果』嗎?當然不能,因為『水果』是乙個抽象的概念,並不是某個具體的水果。同樣,人類也是一樣的道理。所以說類是物件的模板。

(2).『人類』是『黃種人類』的父類,『黃種人類』是『人類』的子類。

(3).物件是類的具體化。比如:『張三』這個例項就是從『人類』這個類中例項化出來的乙個物件。

(4).屬性描述了物件的狀態。如:年齡。

(5).方法描述了物件的行為。如:吃飯。

我們通過下面的例子來看下:

# 類

人類---------------------------------------父類

黃種人類-----------------------------------子類

# 物件

張三---------------------------------------物件(例項)

# 屬性

性別,年齡,身高----------------------------公有屬性(所有人類都有的屬性)

備胎---------------------------------------私有屬性(備胎屬性是張三的私有屬性)

# 方法

走路,吃飯,說話,睡覺----------------------公有方法(人類都有的方法)

舔狗---------------------------------------私有方法(舔狗技能是張三的私有技能)

# 建立乙個貓類:cat

class

cat:

# 定義乙個貓叫的方法:call

defcall

(self)

:print

('喵喵喵~~~'

)# 通過cat類,例項化乙個tom物件

tom = cat(

)# 貓叫:tom貓呼叫call方法

tom.call(

)

Python 物件導向基礎01

當有乙個問題擺在我面前,傳統思路是我親自上陣,把問題解決。下一次當類似的問題再次出現時,我再上,再解決。如此重複,不知道什麼時候是個頭。寫程式也是這樣,面對類似的問題時,如果每次都是從零開始,工作學習的效率將會十分低下,因為總是在重複相同的工作。物件導向則把我從執行者的角色公升級為了指揮者。我不用再...

python物件導向01

如圖的繼承關係,然後驗證經典類與新式類在查詢乙個屬性時的搜尋順序 class b def test self print from b pass class c def test self print from c pass class d b,c def test self print from ...

物件導向01 基礎篇

物件導向基礎 一 物件導向的概念 1.物件導向的概念 面向過程的思想是拿到一件事,首先考慮的是該怎麼去做 而物件導向的思想是拿到一件事考慮的是該讓誰去做 物件導向是將面向過程中的執行者變成指揮者,使用物件導向的開發降低 的耦合度 一般將具有 封裝,繼承,多型 等特徵的程式語言稱為具有物件導向思想的程...