什麼是物件導向程式設計?就是把萬事萬物都抽象成為物件,一切都是物件!
什麼是抽象?抽象是從眾多的事物中抽取出共同的、本質性的特徵,而捨棄其非本質的特徵。例如蘋果、香蕉、生梨、桃子等,它們共同的特性就是水果。得出水果概念的過程,就是乙個抽象的過程。要抽象,就必須進行比較,沒有比較就無法找到在本質上共同的部分。
什麼是物件?物件是乙個自包含的整體,用一組可識別的特徵和行為來標識。
人是物件,蘋果是物件,貓是物件,鳥是物件,總之一切都是物件!物件有屬性(域)和行為(方法)。比如人有名字,身高,體重等屬性,有吃,喝,玩,思考等行為。
那怎樣建立物件呢?用類來建立。
類是具有相同的屬性和功能的物件的抽象的集合。用
class
表示。物件導向程式設計很簡單,就是定義很多類,然後用類生成物件,並使他們互相通訊以完成需要的功能。
class person
}有時候我們要初始化類,就必須用到構造方法,構造方法名與類名相同,無返回值。所有類都有構造方法,他是用來初始化類的,上面的類就隱含了乙個構造方法:
public person
(){}
我們可以添上他。如果我們沒有定義構造方法,系統預設提供乙個無引數的構造方法。如果我們定義了,系統不再定義。可以定義多個構造方法,這叫方法過載(方法名相同,但是引數型別或個數不同)。
class person
public person
(string name){}
string name;//
人都有名字
int age;//
人都有年齡
public void think()}
物件導向的核心思想是抽象,類是對物件的抽象;抽象類是對類的抽象;介面是對行為的抽象。物件導向有三大特徵:封裝,繼承,多型。
物件導向三大原則之一:封裝
什麼是封裝?每個物件都包含它能進行操作所需要的全部資訊,這個特性稱為封裝。因此物件不必依賴其他物件來完成自己的操作。
封裝的好處:
1,良好的封裝能減少類與類之間的耦合
什麼是耦合呢?就是類與類之間的關係密切程度。就是藕斷絲連,兩個類關係越密切,耦合性越高,我們稱為強耦合;反之為弱耦合。我們要儘量減少類之間的耦合性,為什麼呢?因為兩個類關係越密切,我們越難閱讀,理解他,從而更難修改,維護他。
我們要為互動物件之間的松耦合設計而努力!如此我們便容易理解,進而擴充套件維護他們。
2,類內部的實現可以自由的更改
public
屬性,其他類也引用了他們,你改了他們其他類也同樣修改了,這樣有時很麻煩。但如果封裝的好,只有本類用,我們可以自由更改它,而不用顧忌他引起了其他變化。
3,類具有清晰的對外介面
其他類可以通過本類提供的
public
方法(對外介面)與本類進行通訊。
封裝的實現形式:
1,類的封裝
能不用public
修飾符就不用。
2,屬性的封裝
所有屬性原則上都要用
private
修飾(考慮到測試等原因可以提高端別)。可提供
get,
set方法設定訪問恩,但是
get可以提供,
set如果沒有必要則不提供。
3,方法的封裝
首選private
,其次protected
,default
,盡量避免用
public
。物件導向三大原則之二:繼承
物件的繼承代表了一種「
isa」關係(是)。比如貓是一種動物,
catis a animal
,則表明貓類繼承動物類,貓是子類,動物是父類。記住三句話:
1.子類擁有父類非
private
的屬性和行為(方法)。(
private
表示只能在本類使用)
2.子類具有自己的屬性和行為,即子類可以擴充套件父類沒有的屬性和行為。
3.子類還可以以自己的方式實現父類的功能(方法重寫)
繼承可以減少重複**。程式設計中我們應該儘量減少重複冗餘的**,不能來說
ctrl+c
再ctrl+v
的,這是最初級的程式設計師的做法。而且重複**越多,越難閱讀,越難修改和維護。我們要構建簡潔,精煉,封裝良好的模組。
繼承的好處:使得所有子類公共的部分都放在了父類裡,使得**共享,避免了重複。另外使得修改或擴充套件都較為容易。
壞處:父類變,子類不得不變。繼承破壞了封裝,子類和父類強耦合,父類的實現細節暴漏給了子類。
什麼時候使用:當兩個類之間具備「
isa」關係的時候,就可以考慮用繼承了。
如:貓是一種動物,玫瑰是一種花。。。
物件導向三大原則之三:多型
多型表示 是允許將父物件設定成為和乙個或多個它的子物件相等的技術。
1.子類以父類的身份出現
兒子代表老子
2.子類在工作時以自己的方式進行
3.子類以父類的身份出現時,子類特有的屬性和方法不可以使用。
實現多型必須有:繼承,重寫,子類引用指向父類。
father instance = new son()
;//instance
不能呼叫
son類獨有的屬性方法。
抽象類1.
抽象類不能例項化
2.抽象方法必須被子類重寫
3.包含抽象方法的類必然是抽象類
4.抽象類應該擁有盡可能多的共同**,以及盡可能少的資料(屬性)。
5.抽象類是用來繼承的!具體類不是用來繼承的。
介面1.
介面是把隱式公共方法和屬性組合起來,以封裝特定功能的乙個集合。
2.介面的方法沒有實現。
inte***ce itest 3.
乙個類可以實現多個介面。
class a implemensi1
,i2{}
抽象類和介面的區別
1.類是對物件的抽象;抽象類是對類的抽象;介面是對行為的抽象。
介面是對類的區域性(行為)進行抽象,不針對屬性。抽象類是對類整體的抽象(屬性和行為)。他們的共性就是抽象!
2.如果行為跨越不同類的物件,可以使用介面;而對於一些相似的類物件,用繼承抽象類。如人類,鳥類,動物類都可以行走,我們可以定義乙個介面
iwalk
實現乙個行走的方法,從而人類,鳥類,動物類實現(
implemens
)iwalk
,從而擁有走的功能。蘋果,桔子,西瓜有很多相同的屬性和行為,我們可以定義乙個水果的抽象父類。
3.從設計角度講,抽象類是從子類中發現了公共的東西(蘋果,桔子都是水果,都可以吃),泛化出父類,然後子類繼承父類;而介面是根本不知道父類的存在,方法如何實現還不確定,預先定義。
我們先寫了幾個類,突然發現他們有很多共同的屬性和方法,我們於是重構一下,定義乙個抽象父類,然後讓他們繼承父類。
·通過重構改善現有**的設計!
物件導向基礎
我想在這個園子裡面的新人,還是 掌門人 都對 物件導向 這幾字非常的耳熟了或者有一定的了解。但當乙個初學都在學習物件導向的時候,會遇到一些瓶頸和麻煩,認為物件導向非常的難以理解。那麼本章節主要是讓大家了解物件導向,並系統地掌握物件導向程式設計的技能點,消除初學者的疑惑.1 如何去學習物件導向的程式設...
物件導向基礎
uml是一種標準的圖形化建模語言,是物件導向分析與設計的一種標準表示 類圖是用來描述類以及類與類之間關係的一種uml圖 類圖描述的關係包括關聯,範化,依賴,實現等 只要類與類之間存在關聯關係就可以用普通關聯來表示 比如 描述人和計算之間的關係 帶 的一端表示關聯的發起方,箭頭表示關聯的方向 0.1 ...
物件導向基礎
面向過程 舉例 假如你是公司內一名員工,今天又個任務需要在公司組裝一批電腦,那你就需要採購 討價還價 運輸回公司 開始組裝 佈線網路 除錯機器 完成。也就是說,面向過程就是具體化的實現,細節明確。物件導向 假如你是公司總裁,你布置給一名員工組裝一批電腦的任務。完畢。也就是。物件導向就是抽象化的執行,...