架構師之路 4 詳解物件導向

2021-04-25 07:24:01 字數 1977 閱讀 9406

3.5 詳解物件導向的程式設計(oop)

3.5.1 什麼是物件導向

剛接觸程式設計的時候,多數人本能的反映可能是面向過程(op)的,而不是物件導向(oo)的。這種現象其實是很正常的,改變思維方式是需要乙個過程的,我大體歸納了一下其形成的原因:

1、直接原因

你還沒有養成物件導向分析問題和解決問題的習慣。建立物件導向的思維方式需要一定時間的訓練和揣摩才能形成,所以你可以在學習或具體專案中刻意地強化這種意識。一般情況下,經過一段時間之後,你會覺得這是自然而然的事情,只有心中oo,眼中自然oo了。

2、歷史原因

我們從小接受的培訓都是採用面向過程(op)的方式分析問題和解決問題,尤其是數學,多數是強調按部就班的解決問題,計算機軟體的發展一直就與數學是很有淵源,所以,順理成章的,把面向過程(op)的方式帶入到軟體開發也是很自然的事情。

什麼是物件導向,或者談談你對物件導向的理解,這恐怕是軟體開發人員,尤其是程式設計師和設計師應聘的時候,面試官常最掛在嘴邊的問題吧。物件導向對應的英文是object-oriented,把object-oriented翻譯成「物件導向」,我一直覺得這個譯法不太確切,因為多數人第一次看到「物件導向」這四個字,都很難從字面上理解它到底是什麼意思。後來,我又查閱了一些有關的資料,發現港澳台的計算機書籍中是把它翻譯成了「物件導向」,這個譯法,我感覺不錯,於我心頗有些戚戚焉。「物件導向」比較準確地反映了物件導向認識和解決問題都是要圍繞物件展開的。

物件導向方式的出發點是盡可能模擬人類習慣的思維方式,將「問題域」中涉及的內容抽象為「物件」,使軟體開發的方法與過程盡可能接近人類認識世界解決問題的方法與過程。

面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。

3.5.2 op pk oo

咱們用象棋對戰的例子,來比較op和oo的不同:

把上面每個步驟分別用函式進行實現,問題就解決了。

我們再來看看物件導向是如何來解決問題,整個象棋遊戲可以抽象出3種物件:

1、棋手,負責行棋,這兩者行為一致。

2、棋盤,負責繪製棋盤畫面。

3、裁判,負責判定諸如吃子、犯規和輸贏。

三者之間的關係如下:

第一類物件棋手負責行棋,並告知第二類物件棋盤中棋子布局的變化,棋盤接收到了棋子布局的變化後,負責在繪製螢幕,同時利用第三類物件裁判來對棋局進行判定。

從以上兩種的實現方式可以看出幾點:

1、可維護性

物件導向是以資料和功能來劃分問題,而不是依據流程和步驟。同樣是繪製棋盤的行為,在面向過程的設計中分散在了很多的步驟中,很可能出現在不同的繪製版本中,只是不是很像乙份「蛋炒飯」中的雞蛋?在物件導向的設計中,繪圖只可能在棋盤物件中出現,從而保證了繪圖的統一,這就是把雞蛋從「蛋炒飯」中分離出來的效果。

2、可擴充套件性

假如我要加入悔棋的功能,如果要改動面向過程的設計,那麼從行棋到顯示再到判定這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是物件導向的話,只用改動棋盤物件就行了,棋盤物件儲存了雙方的棋譜,簡單回溯,減一就可以了,而顯示和判定不涉及,同時整體對各個物件功能的呼叫順序都沒有變化,改動只限定在了區域性。

3.5.3 oo的深層思考

oo認為:軟體系統是一組互動的物件的集合。

因為人類對現實世界是非常熟悉的,所以oo就是通過抽象的方式,把問題域對映到現實世界,盡量模擬現實世界的萬事萬物。通過這種方式,就可以運用現實世界中解決問題的方法與過程,來解決軟體領域內的問題。

有人說:oo眼裡一切皆物件,這句話還是很有道理的。

oo到底給軟體開發帶來了什麼樣的好處?oo的抽象的尺度是如何把握的呢?這都是問題。

架構師之路 1 面向過程和物件導向

1 引言 機算機科學是一門應用科學,它的知識體系是典型的倒三角結構,所用的基礎知識並不多,只是隨著應用領域和方向的不同,產生了很多的分支,所以說程式設計並不是一件很困難的事情,乙個高中生經過特定的訓練就可以做得到。但是,會程式設計和編好程絕對是兩碼事,同樣的程式設計師,有的人幾年之後成為了架構師,有...

架構師之路 1 面向過程和物件導向

1 引言 機算機科學是一門應用科學,它的知識體系是典型的倒三角結構,所用的基礎知識並不多,只是隨著應用領域和方向的不同,產生了很多的分支,所以說程式設計並不是一件很困難的事情,乙個高中生經過特定的訓練就可以做得到。但是,會程式設計和編好程絕對是兩碼事,同樣的程式設計師,有的人幾年之後成為了架構師,有...

架構師之路 1 面向過程和物件導向

1 引言 機算機科學是一門應用科學,它的知識體系是典型的倒三角結構,所用的基礎知識並不多,只 是隨著應用領域和方向的不同,產生了很多的分支,所以說程式設計並不是一件很困難的事情,乙個高中生經過特定的訓練就可以做得到。但是,會程式設計和編好程絕對是 兩碼事,同樣的程式設計師,有的人幾年之後成為了架構師...