大音希聲,大象希形, 近來閒暇,隨手翻起一些曾經看過的書籍,才發現又有新的收穫。工具
面向對象 在現在的軟件行業是一個很著名的術語,以致於 人們覺得面向對象是現代科學發展到必定程度纔出現的研究成果 。學習
在不少人看來,面向過程 和 面向對象 都是一種軟件技術 ,例如 把面向過程概括爲結構化程序設計、DFD圖、ER模型、UC矩陣等,而面向對象則被概括爲繼承、封裝、多態、複用等具體的技術。設計
事實上,上述的全部技術都只是人們在採用不一樣的方法來認識和描述這個世界時所採用的工具。
他們都只是表徵而不是本徵。對象
接下來讓咱們看看面向對象大師,也就是UML創始人之一的 Grady Booch 在2004年IBM Developer Works Live!大會的訪談中講過的一段流傳甚廣的話:blog
我對面向對象編程的目標歷來就不是複用,相反,對我來講,對象提供了一種處理複雜性問題的方式、這個問題能夠追溯到亞里斯多德:你把這個世界視爲過程仍是對象?在面向對象興起運動以前,編程以過程爲中心,例如結構化設計方法。然而,系統已經到達了超越其處理能力的複雜性極點,有了對象,咱們可以經過提高抽象級別來構建更大的、更復雜的系統——我認爲,這纔是面向對象編程運動的正真勝利。繼承
您心目中的面向對象是這樣的碼?it
正如Booch所說的同樣,從本質上講 面向過程 和 面向對象 是一個古已有之的 認識論 的問題。面向對象編程
之因此面向對象會興起,是應爲這種 認識論 可以幫助咱們構造更爲複雜的系統來解釋愈來愈複雜的現實世界。
認識到這一點,咱們就應該知道比掌握具體的技術更爲重要的是掌握認識論所採用的方法和分析過程。
只有掌握了方法才能自如地使用這些技術工具。
這個世界的本質是由對象組成的,平時看上去相互無關的獨立對象在不一樣的驅動和規則下體現出不一樣的運動過程,而後這些過程便展示出來咱們這個生動的世界。
在面向過程的眼中,世界的一切都不是孤立的,然相互緊密聯繫在一塊兒,缺一不可,相互影響,互相做用,並造成一個具備嚴格因果律的小系統;
而更多的小系統組成了更大的系統,全部的小系統之間的聯繫也是緊密和不可分割的。
面向對象思想其實並不複雜,可是對於習慣了以過程方法來認識這個世界的朋友來講徹底理解和接受面向對象思想倒是不容易的。
若是您真的打算學習面向對象的方法,那麼恐怕您得接受這個世界時分割開來的這個事實,而且相信只有在特定的場景下,孤立對象之間進行了某些信息交換才表現出咱們所看到的那樣一個過程。程序設計