下面來看乙個例子,它揭示了oop的觀點與過程性程式設計的差別。
genre giants壘球隊的一名新成員要求記錄球隊的統計資料。很自然,會求助與計算機來完成這項工作。如果是一位過程性程式設計師,可能會這樣考慮:
我要輸入每名選手的姓名、擊球次數、擊中次數、命中率以及其他重要的基本統計資料。之所以使用計算機,是為了簡化工作,因此讓他來計算某些資料,如命中率。另外,我還希望程式能夠顯示這些結果。應該如何組織呢?我想我能正確的完成這項工作,並使用了函式,讓main函式呼叫乙個函式來獲取輸入,呼叫另乙個函式來計算,然後在呼叫函式來顯示結果。那麼,獲得下一場比賽的資料後,又該做什麼呢?我不想再從頭開始,可以新增乙個函式來更新統計資料。可能需要再main()中提供乙個選單,選擇時輸入、計算、更新還是顯示資料。我該如何來表示這些資料呢?可以用乙個字元陣列來儲存選手的姓名,用另乙個陣列儲存每一位選手的擊球數,再用乙個陣列儲存擊中數目等等。可是這種方法太不靈活了!可以設計乙個結構來儲存每位選手的所有資訊,然後用這種結構組成的陣列來表示整個球隊。
總之,如果採用過程性程式設計方法,首先考慮要遵循的步驟,然後考慮如何表示這些資料(並不需要程式一直執行,使用者可能希望能夠將資料儲存在乙個檔案中,然後從這個檔案中讀取資料。)
但是,如果要是換成一位oop程式設計師,又將如何呢?首先考慮把資料————不經要考慮如何表示資料,還要考慮如何使用資料:
我要跟蹤的是什麼?當然是選手。因此要有乙個物件表示整個選手的各個方面(而不僅僅是命中率或擊球次數)。是的,這將是基本資料單元————乙個表示選手姓名和同統計資料的物件。我需要一些處理該物件的方法。首先需要一種將基本星系加入到該單元中的方法,其次,計算機應該計算一些東西,如命中率,因此需要新增一些執行計算的方法。程式自動完成這些計算,而無需使用者干涉。另外,還需要一些更新和顯示資訊的方法。所以,使用者與資料互動的方式有三種:初始化、更新和報告——這就是使用者介面。
總之,操作oop方法時,首先從使用者的角度考慮物件————描述物件所需的資料以及描述使用者與資料互動所需要的操作。完成對介面的描述後,需要確定如何實現介面和資料儲存。最後,使用新的設計方案建立出程式。oop程式設計先定義類!
物件導向和面向過程區別
原文 面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 ...
物件導向和面向過程的區別
面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊...
物件導向和面向過程的區別
面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊...