面向過程就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以瞭。
面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為瞭完成一個步驟,而是為瞭描敘某個事物在整個解決問題的步驟中的行為。
例如五子棋,面向過程的設計思路就是首先分析問題的步驟:1、開始遊戲,2、黑子先走,3、繪制畫面,4、判斷輸贏,5、輪到白子,6、繪制畫面,7、判斷輸贏,8、返回步驟2,9、輸出最後結果。把上面每個步驟用分別的函數來實現,問題就解決瞭。
而面向對象的設計則是從另外的思路來解決問題。整個五子棋可以分為 1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪制畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類對象(玩傢對象)負責接受用戶輸入,並告知第二類對象(棋盤對象)棋子佈局的變化,棋盤對象接收到瞭棋子的i變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定。
80c7d0154aca4562e346bc14feae6007
可以明顯地看出,面向對象是以功能來劃分問題,而不是步驟。同樣是繪制棋局,這樣的行為在面向過程的設計中分散在瞭總多步驟中,很可能出現不同的繪制版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而面向對象的設計中,繪圖隻可能在棋盤對象中出現,從而保證瞭繪圖的統一。
功能上的統一保證瞭面向對象設計的可擴展性。比如我要加入悔棋的功能,如果要改動面向過程的設計,那麼從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是面向對象的話,隻用改動棋盤對象就行瞭,棋盤系統保存瞭黑白雙方的棋譜,簡單回溯就可以瞭,而顯示和規則判斷則不用顧及,同時整個對對象功能的調用順序都沒有變化,改動隻是局部的。
再比如我要把這個五子棋遊戲改為圍棋遊戲,如果你是面向過程設計,那麼五子棋的規則就分佈在瞭你的程序的每一個角落,要改動還不如重寫。但是如果你當初就是面向對象的設計,那麼你隻用改動規則對象就可以瞭,五子棋和圍棋的區別不就是規則嗎?(當然棋盤大小好像也不一樣,但是你會覺得這是一個難題嗎?直接在棋盤對象中進行一番小改動就可以瞭。)而下棋的大致步驟從面向對象的角度來看沒有任何變化。
當然,要達到改動隻是局部的需要設計的人有足夠的經驗,使用對象不能保證你的程序就是面向對象,初學者或者很蹩腳的程序員很可能以面向對象之虛而行面向過程之實,這樣設計出來的所謂面向對象的程序很難有良好的可移植性和可擴展性。
———————————————————————————————————————--------------------------------------------------------------------------
好瞭現在來推薦一下我創建的學習聚集地:
如果大傢如果在自學遇到困難,想找一個C++的學習環境,可以加入我們的C++學習圈,點擊我加入吧,會節約很多時間,減少很多在學習中遇到的難題。
C語言是面向過程的語言,c++屬於面向對象
面向過程就需要編程人自己考慮程序運行的每個細節和函數功能的實現
面向對象就簡單多瞭,C++提供瞭一個庫類,想實現什麼功能,直接調用哪個類就行瞭,一個類基本上就實現瞭一個功能,怎麼實現的不用管它,調用就行。這就是面向對象。
舉例說,你要做一個應用程序窗口,用C語言的話你得自定義很多函數來實現,但要是用C++的窗口庫類,就不用你寫這些函數瞭,人傢幫你寫好瞭,你用就行!
1 丁零零零零…电话铃声急促,李明杰拿起了话筒。洮昌公安派出所值班民警报告:“刚才,管区内一对夫妇来派出所报案,他们的1 ...
胡安·卡洛斯国王大学Logo 胡安·卡洛斯国王大学 (Universidad Rey Juan Carlos) ,简称胡卡( URJC),是一所以西班牙老国王 ...