什么是面向過程?什么是面向對象?
- 面向過程:把問題分解成一個一個步驟,每個步驟用一個或多個函數(shù)來實現(xiàn),是以事件為目標(面向過程最重要的是模塊化的思想方法),比如說我要去超市買水果:先下樓-->坐公交車-->到超市-->買水果。典型的用法就是實現(xiàn)簡單的算法,例如冒泡排序。
-
面向對象:將問題分解成一個一個步驟,對每個步驟進行相應的抽象,形成對象,通過不同對象之間的調(diào)用,組合解決問題。就是說,在進行面向對象進行編程的時候,要把屬性、行為等封裝成對象,然后基于這些對象及對象的能力進行業(yè)務邏輯的實現(xiàn)。
還是上面的例子:現(xiàn)在我需要構造一個人的對象,一個水果的對象,人具有購買的行為。
現(xiàn)在就是人-->購買-->水果。至于怎么購買,就依賴與具體的實現(xiàn)了,實際上內(nèi)部也包含了面向過程的思想。
圖片.png
面向對象的三大基本特征和五大基本原則?
- 封裝:所謂封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。
我們以人為例子:封裝一個Person類,假設有姓名、年齡、性別、財富四個字段,有一個吃飯的方法,姓名、年齡、性別是開放的,財富是protected的,這就是一個很簡單的封裝的例子。只有Person的子類可以查看財富,其他的類無法訪問 - 繼承:繼承是子對象可以繼承父對象的屬性和行為,亦即父對象擁有的屬性和行為,其子對象也就擁有了這些屬性和行為。在Java中,所有的繼承都是公有繼承,也就是說基類的public和protected成員是對子類可見的,private是不可見的。
接著上面的例子說,我們有兩個子類醫(yī)生 和學生都繼承了Person類,那么這兩個類就具有了上面所說屬性和行為。 -
多態(tài):多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。
接著說:Person是可以吃飯的,但是我可以讓醫(yī)生在辦公室吃飯,學生在食堂吃飯,這就是同一個行為的不同表現(xiàn)形式。
圖片.png
關于上面還有一點要說的是對象的三個主要特性:(與面向對象的三個特性區(qū)分開)
- 對象的行為:可以對對象做什么(對象有哪些行為和方法 )
- 對象的狀態(tài):施加方法時,對象的響應?每個對象都保存著描述當前特征的信息。對象的狀態(tài)改變必須通過方法實現(xiàn),否則就是破壞了封裝性。
- 對象標識:如何區(qū)別具有相同的方法和狀態(tài)的不同對象 例如怎么區(qū)分兩個人
面向對象的五大特征:
- 單一職責原則:一個類,最好只做一件事,只有一個引起它的變化。實際上可以認為是高內(nèi)聚、低耦合。
高內(nèi)聚是啥?一個軟件模塊是由相關性很強的代碼組成,只負責一項任務。你是開發(fā)組的人,那你就專心做開發(fā),你不能偷偷跑去做運維是吧。
低耦合是啥?一個完整的系統(tǒng),模塊與模塊之間,盡可能的使其獨立存在。你家燈壞了,你隨便買一個就好了,沒必要非要買那個牌子的是吧。 - 開放封閉原則:軟件實體應該是可擴展的,而不可修改的。也就是,對擴展開放,對修改封閉的。對抽象編程,而不對具體編程,因為抽象相對穩(wěn)定。讓類依賴于固定的抽象,所以修改就是封閉的;而通過面向對象的繼承和多態(tài)機制,又可以實現(xiàn)對抽象類的繼承,通過覆寫其方法來改變固有行為,實現(xiàn)新的拓展方法,所以就是開放的。
- 里氏替換原則:子類可以替換父類并且出現(xiàn)在父類能夠出現(xiàn)的任何地方,父類應盡可能使用接口或者抽象類來實現(xiàn)。
- 依賴倒置原則:高層模塊不應該依賴底層模塊,兩者都應該依賴抽象。抽象不應該依賴細節(jié),細節(jié)應該依賴抽象。在依賴之間定義一個抽象的接口使得高層模塊調(diào)用接口,而底層模塊實現(xiàn)接口的定義,以此來有效控制耦合關系,達到依賴于抽象的設計目標。
- 接口隔離原則:使用多個小的專門的接口,接口應該是內(nèi)聚的,而不要使用一個大的總接口。

