面相對象


面向對象

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

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

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

  提出 提供 繳 收 獲得 分配 增加

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

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

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

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

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

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

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

  • 學生提出報名
  • 學生繳費
  • 機構收費
  • 教師分配教室
  • 班級增加學生信息

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

  學生、機構、教師、班級!

  在現實中的一個具體的實體,就是計算機編程中的一個對象!

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

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

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

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

    • 人的動作(功能):吃飯、睡覺、學習、打游戲、走路、跑步、繳費!
    • 手機的動作(功能):打電話、發短信、拍照、打游戲、視頻、看電影等

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

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

  • 學生提出報名
  • 學生繳費
  • 學校收費
  • 教師分配教室
  • 班級增加學生信息

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

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

  在我們將面向過程和面向對象討論完后,會明顯的感覺兩者之間有着很大的區別。面向過程簡單直接,易於入門理解,模塊化程度較低。而面向對象相對於面向過程較為復雜,不易理解,模塊化程度較高。可總結為下面三點:

  1. 都可以實現代碼重用和模塊化編程,但是面對對象的模塊化更深,數據更封閉,也更安全!因為面向對象的封裝性更強!
  2. 面對對象的思維方式更加貼近於現實生活,更容易解決大型的復雜的業務邏輯
  3. 從前期開發角度上來看,面對對象遠比面向過程要復雜,但是從維護和擴展功能的角度上來看,面對對象遠比面向過程要簡單!

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM