本文摘要
文章介紹了面向物件的基礎知識,物件,類,抽象,介面等基本概念,面向物件的三大特征以及UML類圖的基礎知識,作為后續文章的基礎,
名詞解釋
1、抽象:一種思維方式,把具體事物的簡單化,概括性描述,
2、UML:通用建模語言
1、物件和類
1.1 物件
在面向物件的世界里,萬物皆是物件,動物是物件,植物是物件,物件的本質是什么呢?物件是一個真實存在的事物,比如一個杯子,一碗水都是物件,
用物件的方式描述事物,與面向程序方式來講,更容易理解,更符合人們的思維習慣,
1.2 類
類是物件的抽象,比如一只小狗,一只小貓,他們的抽象是動物類,也就是說一只小狗,一只小貓是屬于動物的一類,
1.3 類與物件的關系
類是物件的抽象,物件是類的實體,一個類可以有多個物件,但一個物件可能只屬于一個類,在UML中有類圖和物件圖的概念,示例如下(更多知識,請自我補充):

1.4 思維程序
通過各個物件找到其共同點,把相同的物件歸為一類,就是面向物件的基本思維程序,比如張三,李四是具體的物件,他們都是人類,因此可以抽象出人這個類,
1.5 類的構成
一個類主要有屬性和方法(類名,靜態塊等不展開講),通稱為類的成員,屬性表達類的資料部分,方法表示類的行為,比如類Person有name,age等屬性,walk(),run()方法,

1.6 類的幾個重要概念
(1)實體化 :創建一個物件,一般用new的方式,如:Person tom=new Person();
(2)建構式:每個類默認有一個公用建構式,也可以自定義建構式,一般用于給成員變數賦值或執行一些初始化方法,
(3)多載:一個方法有多個不同個數,不同型別,不同順序的引數的方法,稱為方法的多載,
比如:
public void hello(){}public void hell(String name){}public void hello(int index){}
(4)重寫:關鍵字Override,指子類重寫(覆寫)父類的方法,用于改變父類方法的行為,一般用于多型實作,
1.7 介面
類包含資料或行為,但介面是一種契約,主要定義介面的行為,沒有方法體,需要類實作介面,一般用于定義規范(抽象行為)和實作松耦合架構,
使用方式:
介面的使用很靈活,可以介面中定義1個或多個方法,一個類可以實作多個介面,但只能繼承一個類,
1.8 抽象類
抽象類使用abstract定義,一般用于定義多個類共同擁有的代碼,抽象類可以定義抽象方法也可以定義方法體,一般在專案中,用于定義公用代碼或定義公用結構,比如模版模式,
2、三大特征
2.1 封裝
定義:把與自己相關的資料和行為放到一個類中,對外提供且僅提供必要方法,
解決的問題:隱藏內部細節,提供有限訪問介面,使代碼內聚,提高易用性
存在的問題:不同的類中,會有相同代碼,代碼冗余會多,需要對這些代碼進行抽象設計
2.2 繼承
定義:是一種父子關系,子類繼承父類的公有和受保護作用域代碼,可以重寫父類代碼,也可以自定義自己的代碼,繼承表達的是一種is a的關系,
類圖:

解決的問題:代碼復用問題,子類復用父類代碼,減少代碼量,提高可維護性,
存在的問題:
1、父類增加的任何公有或受保護方法都被子類繼承,會導致子類有其不需要的行為,
2、繼承關系,如果不進行控制,會造成多級繼承,當某一父類修改后,影響子類的呼叫(很容易搞錯,是不是該子類應該擁有的),影響代碼的可維護性,
2.3 多型
定義:一個介面有多種不同的實作
解決的問題:屏蔽了各類之間的差異,方便寫出通用性強的邏輯,提高代碼的靈活性和擴展性,
存在的問題:
1、實作類需要遵循介面的行為約定,否則會出現不匹配的情況,比如:eat()方法原來的意圖是定義吃的邏輯,實作時寫成了play的邏輯,
2、增加了代碼和維護的復雜性,
3、類之間的關系
3.1 泛化關系
泛化是特殊/一般的關系,一般是指繼承關系,用于定義父子關系,
3.2 關聯關系
類與類之間有一種參考關系,一般有依賴,聚合,組合三種關系,
依賴:一種需要,比如人需要空氣,這就是一種依賴,
聚合:一種弱擁有關系(整體與部分的關系),但是兩者的生命周期不同,大雁與雁群的關系,就是一種聚合關系,
組合:一種強擁有關系(整體與部分的關系),兩者的生命周期相同,比如車與發動機的關系,發動起報廢了,車也就報廢了,
3.3 高內聚,松耦合
高內聚:是指類內部元素之間的關系,好的內聚是具備良好的封裝性,指類內部的資料和行為有且僅是其擁有的,對外只提供必要的訪問介面你,一般好的內聚性,更利于維護和復用,只要介面不變,內部如何變化都不需要客戶端變,
松耦合:是指類與類之間的關系,好的耦合應該是盡量少的依賴,如果沒必要就不產生依賴,一般設計中,采用聚合組合或依賴介面而不是依賴具體實作,隔離這種變化,比如繼承,實際上就是一種強耦合關系,如果解決這種耦合,可以采用聚合組合的方式,也就是設計原則中的合成復用原則(后面講設計原則時會具體講)
4、面向物件的一般程序
(1)找物件
(2)抽象類
(3)定義類屬性
(4)定義類關系
(5)設計檢查
5、UML類圖
5.1基本元素
(1)類圖
類圖包含類的名稱、屬性和方法定義,
類的可見性修飾符:

# protected
無修飾符為 internal
(2)介面

一般只定義介面方法,
5.2元素關系
(1)關聯
A 和 B 相互呼叫和訪問對方的元素,

(2)依賴
B 的變化會影響 A,則 A 依賴于 B,

(3)聚合
A 中擁有一個 B,但 B 脫離于 A 仍然可以獨立存活,

(4)組合
A 中擁有一個 B,B和A屬于同一生命周期,B 脫離 A 后在系統中沒有任何存活的意義,

(5)泛化
泛化是一種繼承關系,可以是類繼承或介面繼承,

(6)實作
介面和實作類之間的關系,
下篇預告
重溫設計模式系列(三)面向物件設計原則
摘要:比設計模式更重要的是設計思想和設計原則,基于這些原則,逐步產生了不同的設計模式,因此,學好設計模式的基礎是掌味訓本的設計原則,大綱如下:
1、代碼抽象三原則
2、GRASP原則
3、SOLID原則
4、SOC原則
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/226471.html
標籤:Java
下一篇:hibernate - 單表配置
