【面向對象】-總結

目錄

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繼承的隔離變化與多態一起說明:用一張圖來說明。
圖二:隔離變化
如上圖所示,小王要搬行李,面對衆多的行李,易碎類需格外小心,書籍類很沉…首先,我們想到的是,必須按照不同的的類別分裝(封裝),然後,這些所有的類別擁有共性,需把它們都從寢室搬到樓下,需要裝進行李,裝進行李箱等,將些共性抽出來,形成行李這個類別(繼承)。小王搬(調用)行李(父類),實則是通過行李(父類)訪問具體的類別(子類),不同的子類執行效果不同,即:多態

三、六大原則

  1. 開閉原則: 對擴展開放,對修改關閉。
  2. 依賴倒置: 調用父類,不同子類實現不同效果。
  3. 單一原則: 一個類緊密圍繞某個功能模塊,應只有一個改變他的原因。
  4. 組合複用: 在一個類中,需要調用另一個類的方法,通過過類名.方法()來實現,降低耦合度。
  5. 里氏替換: 繼承優良傳承,改革發揚光大。只要父類可以被調用,子類就一定要代替父類被調用。要求父類儘可能
    不要存在太具體的功能,能抽象就儘量抽象,任何的修改都完全依靠子類來補充和修改,從而進一步實現開閉原則(父類對修改關閉,子類對修改開放。
  6. 迪米特原則: 類與類之間做到:各人自掃門前雪,莫管他人瓦上霜。即低耦合。

四、總結

不論是三大特徵還是六個原則,說白了,其本意均爲在現有的代碼結構上,讓我們後續的維護儘可能變得輕鬆。

於是,就有才有了前輩們總結出的條條款款。這些定律可以幫助我們後來者更輕鬆、高效的工作。

但在一定程度上,這些條款太過於抽象,不太好理解,可能讀完第一遍,你發現每個字你都認識,但組合起來就不知道是什麼意思了,所以,需要花時間、精力細細體會,當你恍然大悟的那一天,你會發現,每個字都恰到好處,可謂字字珠璣。

切記:定律雖好,但不能爲了靠定律而寫代碼,而應改在你的需求上,儘可能使用,以此來簡化開發,提高效率,合理使用,你寫的代碼就會像”詩“一樣。
哈哈,奮鬥吧,少年!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章