面向過程是指,允許在程式中定義函式或者方法。也許你覺得奇怪,難道還有語言不能定義函式方法麼?早期的basic就不可以,只能用跳轉來實現函式呼叫。
物件導向更近一步,允許你將「過程」(函式、方法)以及它們的上下文相關的資料封裝成物件,同時物件允許通過繼承和派生以及型別限定符限制開發者對它的一部分的進行訪問和修改。
我不想把物件導向和生活中的事物去聯絡,固然它們有些似是而非的聯絡,但是這對於你理解程式設計的本質毫無意義,甚至會誤導你。物件導向的本質不是模擬現實世界的物件,而是為了開發強壯、簡單和可維護的**。
將物件導向說的通俗易懂的壞處就是看上去是通俗易懂了,其實***根本就是錯的東西,而且這使得新手完全誤入歧途。
物件導向的三大特性(封裝、繼承、多型),核心一條是封裝,不允許你訪問私有的函式和成員這個相信很多人都理解,其實還有一層,就是不允許開發者隨便修改**,因為隨意修改**和隨意修改變數的值一樣是災禍之源。
在面向過程中,如果你發現程式不合適了,需要增加功能,你會怎麼做?你會直接去修改某個函式的**,但是如果這個函式不是你寫的,你不完全理解,這麼做會可能出問題。另乙個問題是,你不知道現有的**是怎麼呼叫這個函式的。換一句話說,你修改了它,你這裡是滿意了,別的地方的呼叫呢?會不會有問題?
那麼怎麼辦?你想,這不簡單,我把這個函式拷貝乙份,在拷貝上修改,不動原來的函式。這樣問題又來了。如果原來函式的編寫者發現了乙個bug,他修復了,可是你拷貝的那份的bug不會自己修復,除非修改的時候要知道這**都被拷貝了幾份,一一修改。
物件導向是怎麼解決這個問題的呢?開發者通過編寫乙個類,實現乙個功能,這個類中一些方法被定義為虛擬方法。當你需要修改這個方法適應新的需求的時候,你不是直接去修改這個類的源**,而是派生乙個類,去重寫這些允許你自定義的虛擬方法,這樣你就在可控的範圍內自定義了原來的程式。但是因為別的地方呼叫的是基類的型別,而你並沒有修改基類的**,所以不會造成原先的**出問題。而且,基類的原作者如果發現乙個非虛擬的方法有bug,他直接修改就好了。因為你的類是繼承的這些**,而不是拷貝貼上的,所以修改一處,就全部變過來了。
物件導向和面向過程區別
原文 面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 ...
物件導向和面向過程的區別
面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊...
物件導向和面向過程的區別
面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊...