1. 程式人生 > >Java :面向物件

Java :面向物件

Java :面向物件

直面Java 第001期

什麼是面向過程

面向過程是以函式為中心,要解決一個問題,需要把問題分解為一個個的步驟,然後定義一系列的流程,用特定的輸入經過函式的處理,最終輸出特定的結果。

什麼是面向物件

面向物件是物件為中心,對每一個步驟抽象形成物件,在物件中封裝好需要解決問題的方法,強調了程式碼的複用。

兩者的區分

比如說現在要實現一個開車的功能。

對於面向過程來說,實現駕駛員開車,需要定義一系列的流程,比如說掛擋 -> 踩離合 -> 踩油門等等,此外如果現在有一個其他的車,就需要重新定義一下流程。

對於面向物件來說,實現這個功能,可以先定義一個基本的車型別,封裝一些共有的屬性和方法,然後定義一個特定的車型別,在其中定義駕駛這個車需要的方法,以後要用的時候直接呼叫這個物件的方法就可以了,如果有其他的車需要駕駛,也可以通過繼承來公用一些都有的屬性方法,增加了程式碼的複用性。

三大基本特徵

封裝

就是把一個物件所擁有的屬性和方法融合進一個結構中,對外只顯示定義者想給外界看的東西。

對於屬性,比如說一個車,可能會有大小,材質,顏色等屬性,一般不直接對外公開,提供一個方法來決定給外界什麼的屬性操作許可權。

對於方法,比如說車中會有前進、後退、轉彎等方法,一般是用來定義這個物件的一些操作行為,提供給外界使用。

繼承

通過A類繼承來繼承B類,使得A類來重用一些B類的屬性和方法。

例如一開始定義了一個車子型別,裡面有所有車子都有的顏色,材質等屬性,前進、後退等行為,現在有一個私家車型別,只要繼承了前面的車型別,就已經擁有了父類所定義的這些,還可以過載來使得其變得擁有自身的屬性方法。

多型

多型一般通過類繼承和介面實現指向子類來實現,使得通過父類引用來操作子類物件。

# 這樣就可以用父類的引用來呼叫子類
Vehicle vehicle = new Vehicle();
vehicle.move();

五大基本原則

單一職責原則

一個類應該有且只有一個去改變它的理由

比如說求一個圖形的面積並返回給使用者,這個方法需要定義如何求面積和如何返回的話,就違反了「單一職責原則」,日後如果返回格式變了,就需要重新定義方法,就違背了原則.因此我們只需要定義求面積,具體如何返回,交給其他的方法來操作.

開放封閉原則

物件或實體應該對擴充套件開放,對修改封閉。

對於求一個圖形的面積,如果我們已經定義好了,此時需要求其他的圖形,不能在原先定義的方法裡面修改,應該拓展一個其他方法來求解.

裡式代換原則

對父類的呼叫同樣適用於子類

子類應當可以替換父類並出現在父類能夠出現的任何地方.因為父類擁有的東西子類都有,因此可以替換。

介面隔離原則

不應強迫客戶端實現一個它用不上的介面,或是說客戶端不應該被迫依賴它們不使用的方法

對於一個立體圖形來說,擁有求體積的的功能,現在有一個平面圖像,就不能實現這個介面,因為平面圖形不求體積。

依賴反轉原則

高層次模組不應依賴於低層次模組。

應該把低層次模組中的特定功能抽象成介面,然後實現這個介面,這樣高層模組就可以呼叫介面來實現解耦,日後低層次模組修改了,高層次模組不用改變。

參考資料:

  1. http://blog.jobbole.com/86267/
  2. Hollis知識星球