官术网_书友最值得收藏!

1.1 面向過程和面向對象

1.1.1 兩種分析問題的思維方式

設計程序是為了解決問題,而分析問題所采用的思維方式不同,將會導致編碼方式的不同。面向過程和面向對象是目前主要的兩種思維方式。我們先通過一個例子來初步了解一下。

例子:張三使用洗衣機洗衣服。

1)從面向過程的思想來看,張三先打開洗衣機的電源,打開洗衣機蓋子,放衣服進去,洗好后關閉電源。

2)從面向對象的思想來看,張三告訴洗衣機自己要洗衣服,“洗衣機.打開電源”,“洗衣機.打開蓋子”,“洗衣機.放衣服進去”,“洗衣機.關閉電源”。

對上面洗衣的過程做一個比較如下(見圖1-1)。

面向過程:張三是主體,需要完成一系列操作洗衣機的動作,如接電源、打開蓋子??;

面向對象:洗衣機是主體,它就像是一個寫好代碼的機器人,張三只需要提出自己的要求,洗衣機會主動地打開電源、打開蓋子??。

由上面的例子可知,面向過程和面向對象本質上都是可以解決問題的,相對而言,面向過程主要關注的是解決問題的每個步驟,面向對象會顯得更為方便些,可直接使用某個對象(如洗衣機)提供的功能,當然,前提條件是對象事先已具備了這些功能。

圖1-1 面向過程和面向對象分析問題的比較

1.1.2 兩種程序設計方法

面向過程的程序設計方法,是針對解決問題的一系列步驟,編寫相應的一系列函數來完成,且每個函數又通過基本程序結構(順序、選擇和循環結構),來描述對數據的操作。因此,這種程序設計方法,是以功能為中心來設計函數,但函數和對其操作的數據是分離開來的。

面向對象的程序設計方法,是先提煉數據,再編寫一系列操作這些數據的函數,并將函數與其操作的數據有機地組裝在一起,作為一個整體來處理。所以,這種方法是以數據為中心來描述系統的,相對而言,數據較功能更具穩定性,程序也就更加易于維護。

由于面向過程的程序設計結構與問題的解決流程相對應,所以,整個程序的執行控制流程也是由預先確定的順序來決定的;而面向對象程序在運行時,是根據用戶的實際需要,去觸發相應的函數執行,如洗衣機打開電源后,可以多次或多人去洗衣服(即多次放衣服進去),最后再關閉電源,因此,這種方法更符合實際需要。

下面再通過使用上述兩個方法設計“五子棋”游戲(見圖1-2),進一步了解各自的特點。

圖1-2 面向過程和面向對象分析五子棋游戲的比較

有人形象地將面向過程和面向對象程序方法分別比喻為蛋炒飯和碟頭飯(蓋澆飯),蛋炒飯是所有材料味道融為一體,你要么接受這種混合味道,要么放棄,無法改變部分;而碟頭飯是由飯、菜拼放一起,各自獨立,你可以只要部分,還可以再加些什么。顯然,面向對象中“各司其職”的特點,使得其可擴展性強,比如,“五子棋”要加入悔棋功能,面向過程的設計中的2~7步都必須修改,甚至調用順序也要調整;而面向對象的設計中,只要修改棋盤對象,根據棋譜回溯一下即可,其他不變。

表1-1對面向過程和面向對象進行了比較,也讓我們有了更全面的認識。

表1-1 面向過程和面向對象比較

總之,面向過程是分析得到解決問題的步驟,然后用函數把這些步驟逐個實現,使用的時候逐個依次調用。面向對象是把構成問題的事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題步驟中的行為。它們都遵循將問題分解再解決的基本原則,但對問題的思考、處理方式以及編碼實現卻迥然不同,不能簡單地評判孰優孰劣,而是要從實際出發,考慮系統規模、應用領域、擴展需要、執行效率等方面,選擇適用的方法,或是結合起來運用,以達到最佳開發效益的最終目標。

主站蜘蛛池模板: 中江县| 元氏县| 嘉兴市| 寿阳县| 卫辉市| 永川市| 西贡区| 房山区| 灵寿县| 成安县| 平陆县| 大宁县| 崇文区| 尼木县| 碌曲县| 双城市| 阳城县| 蚌埠市| 米易县| 沙湾县| 温泉县| 大关县| 涟源市| 潜山县| 汽车| 喀喇| 张家界市| 兴城市| 宽甸| 永和县| 肃北| 微山县| 蛟河市| 茂名市| 建昌县| 梁河县| 南华县| 沙洋县| 剑川县| 丰镇市| 临桂县|