物件導向程式設計與面向過程程式設計是兩種常見的程式設計思想。先通過引子來看下:
話說三國時期,曹操帶領百萬大軍攻打東吳,大軍在長江赤壁駐紮,軍船連成一片。
眼看就要滅了東吳,統一天下,曹操大悅,於是大宴眾文武。在酒席間,曹操詩性大發,
不覺吟道:"喝酒唱歌,人生真爽..."。眾文武齊呼:」丞相好詩!「於是命印刷工匠刻版印刷
,以便流傳天下。
版樣給曹操一看,曹操感覺不妥,說道」喝與唱,此話過俗,應改為『對酒當歌』較好!
於是命工匠重新雕刻。那時候,還沒發明活字印刷術,如果樣板要改,只能重頭雕刻。
工匠眼看連夜刻版之工,徹底白費,心中叫苦不迭。只得照辦。
版樣再次出來請曹操過目,曹操細細一品,覺得還是不好,說「人生真爽太過直接,
應該改問語才夠意境,因此應改為『對酒當歌,人生幾何?』」,於是....
在活字印刷術還沒出現之前,如果版樣有改動,只能重新雕刻(這個就相當於面向過程)。
而且在印刷完成後,這個樣板就失去了它的價值,如果需要其他樣板只能重新雕刻。而活字印刷
術的出現就大大改善了印刷技術。如上例」喝酒唱歌,人生真爽「,如果用活字印刷,只需要改四
個字就可,其餘工作都未白做。豈不快哉!!
活字印刷也反應了物件導向(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.物件導向的概念 面向過程的思想是拿到一件事,首先考慮的是該怎麼去做 而物件導向的思想是拿到一件事考慮的是該讓誰去做 物件導向是將面向過程中的執行者變成指揮者,使用物件導向的開發降低 的耦合度 一般將具有 封裝,繼承,多型 等特徵的程式語言稱為具有物件導向思想的程...