很多時候,我們理解物件導向是就方法加上資料,封裝就是隱藏資料,但這並不全面。好比說,貓有乙個腦袋、四條腿,乙個尾巴一樣,雖然沒有錯,但並不全面。從外表上來看,物件導向的確是這樣,但其本質在**呢?讓我們來看看《design patterns explained》,它告訴我們一些什麼。
功能分解 vs. 需求變化
在物件導向之前,我們採用的開發方法是面向過程,而面向過程開發中最常用的乙個分析方法是:功能分解。我們會把從客戶那裡得到的需求分解成模組,然後把模組分解成大的功能,然後把大的功能分解成小功能,最終分解成乙個乙個的函式。這樣做非常容易,但是會產生乙個問題:面向過程中的控制程式(一般是主程式)承擔了太多的責任。
控制程式什麼都要管,就好像有的家庭過於溺愛孩子,孩子一切一切家長都包了,這樣的孩子出去以後,往往受不得半點委屈,調節能力很差。採用面向過程開發的程式往往也是這樣,它們過於脆弱,不能夠應對需求變化。
責任分解 vs. 功能分解
既然面向過程不能很好的應對變化,那物件導向和它的不同之處在**?答案就是——責任分解(shift of responsibility)。責任分解其實很簡單,就是自己的事情自己做,自己對自己負責,就像家長不必事事都幫孩子做,指導一下,然後讓他們自己去做,這樣往往效果更好,家長也輕鬆的多。
物件導向把一系列相同責任的方法和資料放在乙個類裡面,封裝起來,這樣內聚性提高了,從**角度上說,減少了很多重複。另外,物件導向還把這些相似的類抽象起來,做成抽象類或介面,進一步減少重複**。在物件之間相互呼叫的時候,往往依賴於抽象類和介面,這樣,**之間的耦合性大大降低了。一句話,物件導向的天生適合增加內聚性,減少耦合性,減少重複**,這樣便能更好的應對需求變化。
總結
物件導向的關鍵在於責任分解。介面、繼承、封裝不光是為了隱藏資料,更重要的是隱藏型別,是鬆散耦合。
什麼是面向過程?什麼是物件導向?
論語 述而 舉一隅,不以三隅反,則不復也。簡單來說就是舉一反三,我們知道計算機大神會許多種程式語言,對於一門新的語言他們只要乙個月或者幾個星期就可以精通。而對於我們這種程式設計的初學者學會一門語言都感覺好難,更別說精通了。其實主要還是我們的方法不對會接,我們沒有一種程式設計的思維所以我們學起來比較困...
什麼是物件導向
什麼是物件導向 物件導向,就是,思考問題的方法,以物件為主體,眼睛看什麼都是物件 說 物件 其實還是不好懂,因為這個概念是直接從英文翻譯過來的 對中國人也許說,面向東西,面向物體 抽象的物體 面向事物,之類的翻譯或許更好理解 為什麼說是物件導向呢,是為了和 面向過程 相對以前 物件導向 的程式概念等...
什麼是物件導向?
物件導向程式設計 基本定義 物件 object 一切客觀實體的抽象,即將現實世界中的事物抽象成物件 類 class 定義了一件事物的抽象特點。如 狗 是乙個類,它包含狗的一切特徵和行為,是乙個模板 物件 object 是類的例項。如 名叫pyton的臘腸狗 物件導向的起源 1.以c為例他是結構化的語...