什麼是面向對象?
閱讀到一本書叫《程序員的自我修養》,當看到“面向對象”一詞時,我感覺到既熟悉又陌生。在本科大二時候學習Java課程的時候第一次知道了這個詞,當時就覺得面向對象是相對於面向過程而言的,有繼承、封裝、多態三種特性。至於究竟什麼是面向對象,未曾深究。
在《程序員的自我修養》中提到“很多程序員錯誤的認識了面向對象。比如,他們會想當然的認爲,面向對象就是把任何實體描繪爲一個DTO(Data Transfer Object),用Getter、Setter方法去存取它們的屬性,然後在其他業務組件中去處理它們。這的確是一個常見、也在大部分編程書籍中被作爲代碼示例的應用模式,但我想說DTO真的被濫用了。“作者認爲DTO只是面向對象中描述對象的一種形式,我們應該以更高的高度去判斷一個實體應該如何表現。
我們看看維基百科中的解釋:
面向對象程序設計(英語:Object-oriented programming,縮寫:OOP),指一種程序設計範型,同時也是一種程序開發的方法。對象指的是類的集合。它將對象作爲程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、靈活性和擴展性。[1]
面向對象程序設計可以看作一種在程序中包含各種獨立而又互相調用的對象的思想,這與傳統的思想剛好相反:傳統的程序設計主張將程序看作一系列函數的集合,或者直接就是一系列對電腦下達的指令。面向對象程序設計中的每一個對象都應該能夠接受數據、處理數據並將數據傳達給其它對象,因此它們都可以被看作一個小型的“機器”,即對象。
目前已經被證實的是,面向對象程序設計推廣了程序的靈活性和可維護性,並且在大型項目設計中廣爲應用。 此外,支持者聲稱面向對象程序設計要比以往的做法更加便於學習,因爲它能夠讓人們更簡單地設計並維護程序,使得程序更加便於分析、設計、理解。反對者在某些領域對此予以否認。
當我們提到面向對象的時候,它不僅指一種程序設計方法。它更多意義上是一種程序開發方式。在這一方面,我們必須瞭解更多關於面向對象系統分析和麪向對象設計(Object Oriented Design,簡稱OOD)方面的知識。
下面我總結一下並舉個”大象進冰箱“的例子
總結:
- 面向對象是一種思想,具有三大特徵:繼承、封裝、多態。
- 面向對象程序設計中的每一個對象都應該能夠接受數據、處理數據並將數據傳達給其他對象。
- 面嚮對象語言中的類,在面向過程語言中是沒有的,也恰好給了我們另一種編程思想,即面向對象的思想。面向過程的語言由一個一個的函數執行不同的功能堆砌而成,而面向對象的編程,把問題抽象成一個一個的對象,對這些對象進行分工合作來解決一個問題,下面舉個栗子。
栗子:
面向過程
大象幾步能進冰箱的小品大家肯定都看過,那對於程序員來說,要把大象裝進冰箱裏,需要幾個步驟:
- 把冰箱門兒打開。
- 把大象裝進去。
- 把冰箱門兒關上
上面每一個步驟都需要對應一個函數,問題方能得到解決。程序員以爲問題結束了,之後再遇到如下問題
「我要把大象裝微波爐裏」
「我要把獅子也裝冰箱裏」
「我要把大象裝冰箱,但是門別關,敞着就行」
…
面向對象
豈不是每一個問題需要寫相應的函數進行組合?NO,現在對象有了,如何進行面向對象的編程呢?很簡單,針對上面第一個問題,依次向不同的對象發送命令就可以了。
- 向冰箱下達「開門」的命令。
- 向大象下達「進冰箱」的命令。
- 向冰箱下達「關門」的命令。
對其他的問題呢,只需要利用對象的特徵,很容易就能解決了。
以上是本人的愚見,如有錯誤歡迎指正,謝謝啦~