天天看點

程式設計思想:面向對象和面向過程程式設計思想:面向對象和面向過程

程式設計思想:面向對象和面向過程

轉載聲明

文章轉自:

http://www.cnblogs.com/BeiGuo-FengGuang/p/5935763.html

  何謂面向對象?何謂面向過程?對于這個程式設計界的兩大思想,一直貫穿在我們學習和工作當中。我們知道面向過程和面向對象,但要讓我們講出來個是以然,又感覺是不知從何說起,最後可能也隻會說出一句就是那樣啦,你知道啦。而這種茫然,其實就是對這兩大程式設計思想的迷糊之處。本文通過學生到校報到注冊的執行個體,闡述了面向過程和面向對象兩大思想。希望能對你的學習和工作有所幫助。

面向過程

  首先我們來認識下,什麼是面向過程?如果咬文嚼字的話可以這樣來了解,面向過程就是面向解決問題的過程進行程式設計。仔細思考一下,我們在學習和工作中,當我們去實作某項功能或完成某項任務時,是不是會不自覺的按部就班的羅列出我們要做的事情?(如果沒有,建議以後試着步驟化解決問題)。而當我們按着我們羅列的步驟去解決問題時,實質上就是按照面向過程的思想去解決問題。我們羅列的步驟就是過程,按照步驟解決問題就是面向過程。

  傳統的面向過程的程式設計思想總結起來就八個字——自頂向下,逐漸細化。實作步驟如下:

  1. 将要實作的功能描述為一個從開始到結束按部就班的連續的步驟(過程);
  2. 一次逐漸完成這些步驟,如果某一步的難度較大,又可以将該步驟再次細化為若幹個子步驟,以此類推,一直到結束得到想要的結果;
  3. 程式的主題是函數,一個函數就是一個封裝起來的子產品,可以實作一定的功能,各個子步驟往往就是通過各個函數來完成的,進而實作代碼的重用和子產品化程式設計。

案例:學生到校報到注冊

  面向過程,就是按照我們分析好了的步驟,按部就班的一次執行就行了!是以當我們用面向過程的思想去程式設計活解決問題時,首先一定要把想死的實作過程弄清楚。一旦過程設計清楚,代碼的實作簡直輕而易舉。

面向對象

  讨論完了面向過程,我們再來認識下面向對象。所謂的面向對象,就是在程式設計的時候盡可能的去模拟真實的現實世界,按照現實世界中的邏輯去處理一個問題,分析問題中參與其中的有哪些實體,這些實體應該有什麼屬性和方法,我們如何通過調用這些實體的屬性和方法去解決問題。

  現實世界中,任何一個操作或者業務邏輯的實作都需要一個實體來完成,也就是說,實體就是動作的支配者,沒有實體,就肯定沒有動作發生。

現在讓我們思考下,上述注冊報名的每一個步驟都有哪些動詞?

提出 提供 繳 收 獲得 配置設定 增加

有動詞就一定有實作這個動作的實體。

  所謂的模拟現實世界,就是使計算機的程式設計語言在解決相關業務邏輯的方式,與真實的業務邏輯的發生保持一緻。需要使每一個動作的背後都有一個完成這個動作的實體。

  因為任何功能的實作都是依賴于一個具體的實體的“動作|操作|行動”,可以看做是一個又一個的實體在發揮其各自的“能力”并在内部進行協調有序的調用過程。

當采用面向對象的思想解決問題時,可分為下面幾步:

  1. 分析哪些動作是由哪些實體發出的;
  2. 定義這些實體,為其增加相應的屬性和功能;
  3. 讓實體去執行相應的功能或動作。

采用面向對象的思想,解決上面的報名問題,應該如下:

第一步:分析哪些動作是由哪些實體發出的

  • 學生提出報名
  • 學生繳費
  • 機構收費
  • 教師配置設定教室
  • 班級增加學生資訊

于是,在整個過程中,一共有四個實體:

學生、機構、教師、班級

在顯示中的一個具體的實體,就是計算機程式設計中的一個對象。

第二步:定義這些實體,為其增加相應的屬性和功能

屬性就是實體在顯示世界中的一些特征表現。如:

  • 人的屬性:姓名、性别、身高、三圍、體重、電話号碼、家庭住址、籍貫等
  • 手機的屬性:品牌、價格、顔色、尺寸、待機時間等

    功能就是能完成的動作,在面向對象的術語中,動作就叫做方法或者函數。如:

  • 人的動作(功能):吃飯、睡覺、學習、打遊戲、走路、跑步、繳費

下圖顯示了再上述實力中出現的實體以及相應的屬性和功能:

              學生

屬性:

  姓名、性别、年齡、學曆、手機号碼、Money金額等個人資訊

功能(能做什麼):

  能提出報名,能繳費

`

              教師

屬性:

  姓名、性别、年齡、學曆、手機号碼、Money金額、員工編号等個人資訊

功能(能做什麼):

  能等級報名資訊,能配置設定教師

`

              學校

屬性:

  名稱、開設課程、校區、Money金額等資訊

功能(能做什麼):

  能招生、能招聘老師、能發工資等

`

              班級

屬性:

  名稱、編号、面積、座位個數等

功能(能做什麼):

  能裝學生、能管理學生資訊等

第三步:讓實體去執行相應的功能或動作

  • 學生提出報名
  • 學生繳費
  • 學校收費
  • 教師配置設定教室
  • 班級增加學生資訊

  是以說,面向過程主要是針對功能,而面向對象主要是針對能夠實作該功能的背後的實體。面向對象實質上就是面向實體,是以當我們使用面向對象進行程式設計時,一定要建立這樣一個觀念:萬物皆對象。

面向對象和面向過程的比較

  在我們将面向過程和面向對象讨論完後,會顯示的感覺兩者之間有着很大的差別。面向過程簡單直接,易于入門了解,子產品化成都較低。而面向對象相對于面向過程較為複雜,不易了解,子產品化成都較高。可總結為下面三點:

  1. 都可以實作代碼重用和子產品化程式設計,但是面對對象的子產品化更深,資料更封閉,也更安全。因為面向對象的封裝性更強;
  2. 面對對象的思維方式更加貼近于現實生活,更容易解決大型的複雜的業務邏輯;
  3. 從前期開發角度上來看,面對對象遠比面向過程要複雜,但是從維護和擴充功能的角度上來看,面對對象遠比面向過程要簡單。

  如何選擇面向對象還是面向過程,對于一個有着豐富開發經驗的老手來說,這是個得心應手的過程。而對于一個新手而言,其實從兩這個的對比就可以看出,當我們的業務邏輯比較簡單時,使用面向過程能更快的實作。到那會當我們的業務邏輯比較複雜時,為了将來的維護和擴充,還是面向對象更為靠譜點!當然,當我們被經理催着上交項目時,不要再選擇糾結了,哪個能讓你更快的完成項目就用哪個吧。

        轉載完

總結

  1. 面向過程:一種結構化自頂向下解決問題的方法
  2. 面向對象:把一切都抽象成對象,對象有自己的屬性和方法,然後各個對象之間通過接口來實作互動以解決問題

繼續閱讀