目錄
1.導入
2.三大特征
3.六大原則
4.總結
一、 導入
過年了,鑼鼓喧天,鞭炮齊鳴,歡天喜地~
七大姑八大姨:代文,有對象了嗎?
我:那肯定的。
她們:什麼時候交的啊?家哪裡的?身高?長相。。。。
我:剛new出來的,你們想要什麼樣的,我按需再new一個。
媽:文文天天new對象,也不知道new的咋樣了。
我:哈哈哈哈哈。。快了,快了。。。。。
1.1什麼是面向過程?什麼是面向對象?
是按硬碟&U盤的差別
A.面向過程編寫:把關鍵代碼寫在一起。 就好比給一個安裝好的主機箱安裝硬碟。打開主機箱,将裝機時為了美觀紮好的資料線進行拆解,選擇資料線插在硬碟上,再把剩下的線重新紮好,最後封裝好主機箱,費時費力。
這個就是面向過程,所有的事情,是一步步完成的,整個過程像一個流水線。A->B->C->D…
B.面向對象:是上帝式思想。在上帝眼中:萬物皆對象 。
某天,同僚看我桌面有個錄屏軟體還不錯,讓我拷一個安裝包給他。悻悻地拿出他的U盤,此時,我将U盤插入USB接口,奈何,U盤容量太小,不足以存儲該安裝包。
我: 這128M的U盤容量太小,換個大容量的來!
他: 給,這32G的,拿去拷!
等待1,2,3s…拷貝完畢~
那麼,隻需要将準備好的U盤對準USB接口接入就可以了,在整個過程中主機原本内部構造并沒有任何變化。如果想對 U 盤進行擴容或者修改,隻需要操作 U 盤甚至是替換 U 盤,而不是想辦法改變主機内部來适應U盤,這就是面向對象。
那麼,将上述思想運用在代碼中,将後期可能發生改變的因素放在外部,将确定不會改變的因素作為底層,這樣後期代碼的修改和擴充效率就高很多。這種将代碼拆分,避免牽一發而動全身的思想,就是封裝。
二、三大特征
1.封裝:分而治之,變則疏之,高内聚、低耦合
2.繼承:隔離變化、代碼複用
3.多态:調用父類,不同的子類執行,實作不同的效果
2.1.1分而治之,變則疏之 面向對象首先要做的是分,将需要改變的代碼分離出去,将不需要改變的代碼整合到一起。
比如,多功能資料線。
2.1.2高内聚、低耦合
- 高内聚:在一個類中,盡量做到多個方法圍繞一個功能展開,緊緊圍繞,每個方法實作不同的闆塊,組合形成一個功能。
- 低耦合:類與類之間,盡量不要有關聯,否則,容易引起牽一發而動全身。比如:插座一般為兩孔或者三孔,倘若廠家突然有一天想取消兩孔設計,換為更穩定的四孔,那麼,與之對應用所有兩孔插頭的商品,将處于癱瘓狀态,隻能對應設計四孔插頭,得不償失,是以,降低類之間的耦合度尤為重要。
2.2繼承:隔離變化、代碼複用
先陳述代碼複用
2.2.1代碼複用為了避免後期代碼的變化導緻工程量的增加,首先要做的是将不會變化的代碼變成一個大的架構,給它們一個統一的類型,也就是統一繼承。
比如:狗(父類,會叫,會爬),金毛(子類1,特征:搬東西),泰迪(子類2,特征:表演),哈士奇(子類3,特征:拆家)。。。狗類不止金毛,泰迪,哈士奇三類,還有很多其它種類,但不管什麼種類,都屬于狗這個父類,他們都擁有狗(父類)的性質,此時,子類就可以繼承父類。
# 舉個栗子:python實作
class Dog:
def fun_yad(self):
print("我是狗,汪汪~")
def fun_run(self):
print("我是狗!我會爬")
class glogdog(Dog):
def __init__(self,name):
self.name=name
def special(self):
print("我是%s,我會搬東西"%(self.name))
dog01 = Dog()
dog01.fun_yad()
dog01.fun_run()
gloddog01 = glogdog("花花")
gloddog01.special()
gloddog01.fun_run()
gloddog01.fun_yad()
2.2.2&2.3繼承的隔離變化與多态一起說明:用一張圖來說明。
如上圖所示,小王要搬行李,面對衆多的行李,易碎類需格外小心,書籍類很沉…首先,我們想到的是,必須按照不同的的類别分裝(封裝),然後,這些所有的類别擁有共性,需把它們都從寝室搬到樓下,需要裝進行李,裝進行李箱等,将些共性抽出來,形成行李這個類别(繼承)。小王搬(調用)行李(父類),實則是通過行李(父類)通路具體的類别(子類),不同的子類執行效果不同,即:多态
三、六大原則
- 開閉原則: 對擴充開放,對修改關閉。
- 依賴倒置: 調用父類,不同子類實作不同效果。
- 單一原則: 一個類緊密圍繞某個功能子產品,應隻有一個改變他的原因。
- 組合複用: 在一個類中,需要調用另一個類的方法,通過過類名.方法()來實作,降低耦合度。
-
裡氏替換: 繼承優良傳承,改革發揚光大。隻要父類可以被調用,子類就一定要代替父類被調用。要求父類盡可能
不要存在太具體的功能,能抽象就盡量抽象,任何的修改都完全依靠子類來補充和修改,進而進一步實作開閉原則(父類對修改關閉,子類對修改開放。
- 迪米特原則: 類與類之間做到:各人自掃門前雪,莫管他人瓦上霜。即低耦合。
四、總結
不論是三大特征還是六個原則,說白了,其本意均為在現有的代碼結構上,讓我們後續的維護盡可能變得輕松。
于是,就有才有了前輩們總結出的條條款款。這些定律可以幫助我們後來者更輕松、高效的工作。
但在一定程度上,這些條款太過于抽象,不太好了解,可能讀完第一遍,你發現每個字你都認識,但組合起來就不知道是什麼意思了,是以,需要花時間、精力細細體會,當你恍然大悟的那一天,你會發現,每個字都恰到好處,可謂字字珠玑。
切記:定律雖好,但不能為了靠定律而寫代碼,而應改在你的需求上,盡可能使用,以此來簡化開發,提高效率,合理使用,你寫的代碼就會像”詩“一樣。
哈哈,奮鬥吧,少年!