設計模式系列 物件導向葵花寶典 物件導向基礎

2021-08-11 04:41:08 字數 3091 閱讀 1656

宣告:本系列為物件導向葵花寶典一書學習總結內容,原作者部落格鏈結

書籍簡介

文中闡述了作者對物件導向的深入理解,全面闡述了物件導向的理論基礎,以及通過物件導向的實戰指導進行分析,尤為重點讓人容易忽視的需求分析過程,讓程式更具有建造者的設計氣息。最後一部分講解了物件導向的技巧,以及設計模式的內在剖析。

以下內容在原作基礎上進行了刪減或者自我理解加工,詳細內容請檢視原作書籍。

1. 物件導向概述
1.1. 程式設計思想的發展- 史前時代:面向機器 直接編寫0和1的序列來代表程式語言

- 機器第一步:面向過程 解決問題的過程,這應該也是面向過程說法的來由

- 當今主流:物件導向 可擴充套件性、可維護性

1.3. 面向過程

面向過程是一種以「過程」作為中心的程式設計思想,其中過程的含義就是「完成一件事情的步驟」。

面向過程其實是一種「機械的思想」,它就像流水線一樣,乙個階段銜接乙個階段,每個階段都有自己的

輸入、處理、輸出,而在流水線上流動的就是我們的原料或者中間產品,每個階段都有乙個機械進行處理,

最後的輸出就是我們的產品。

1.4. 物件導向

物件導向是一種以「物件」作為中心的程式設計思想,其中物件的含義可以理解為「存在的東西」。

與面向過程的方法相比,物件導向不再侷限於計算機的機器本質,而更加側重於對現實世界的模擬。

物件導向的方法中,設計了很多物件,並且指定了這些物件需要完成的任務,以及這些物件如何對外界的刺激做出反應。

面向過程中有「程式=演算法+資料結構」的經典總結,物件導向也有類似的總結:「程式=物件 + 互動」。其中物件就是具體存在的事物,而互動則是事物之間的相互作用、互動等。

1.5. 為什麼要物件導向?

面向過程同流水線一樣的缺點,即:流程和原料相對固定,擴充套件比較麻煩。

而物件導向正是為了解決面向過程的這個缺點兒誕生的,物件導向思想的核心是「可擴充套件性」!

1.6. 物件導向應用範圍

經常變化的地方就是物件導向應用的地方

對於軟體系統來說,常見的可變的主要集中在客戶需求部分,而不變的一般都是屬於計算機系統的基礎

因此,作業系統、資料庫、協議(tcp、3gpp 等)這些並不適合物件導向大展身手,因為這些基礎軟體

一般都比較穩定(相對穩定,並不是不變)。而對於企業應用、網際網路等應用,需求經常變更,功能不斷擴充套件,這正是物件導向大展身手的地方。

軟體質量屬性的全圖

大家可以看到,「可擴充套件性」只是軟體質量屬性中很小的一部分,其它的屬性都不是物件導向能夠解決的明白了物件導向的特點和適用範圍,是應用物件導向的關鍵,經過前面的分析,我們知道,物件導向不是瑞士軍刀,而只是乙個普通的錘子而已,千萬不要拿著錘子到處敲!

2. 物件導向理論
2.1.類何為類? 物以類聚,人以群分,這裡的「類」,其實和物件導向中的「類」的邏輯含義並無不同。簡單來說,類就是一組相似事物的統稱。 站在你的觀察角度,具有相似點的事物就是同一類。

物件導向類

物件導向的類由兩部分組成:屬性和方法。名詞是屬性,動詞是方法

屬性:指類具有的特性 屬性最小化原則,即:「屬性不可再分」更靈活的應對變化

方法:指類具有的功能 方法單一化原則,即:乙個方法只做一件事。比如玩?玩什麼 玩桌球

2.2. 物件

物件就是乙個具體的類,乙個真實存在的類。

2.3. 介面

介面是一組相關的互動功能點定義的集合。

【相關】 介面中包含的功能點是相關的,而不是一堆無關功能的堆砌。

【互動】 介面是用於不同物體互動,如果只是自己玩,那麼就不能成為介面;

【定義】 介面中的功能點只是定義,並不涉及具體實現。

【集合】 介面是多個功能點的集合,而不是乙個具體的功能點。

2.4. 抽象類

抽象類是一種特殊的類,其特殊性在於抽象類只能用於繼承,不能被例項化為具體的物件。

有了類,為什麼還要抽象類,為什麼設計一種只能繼承,不能例項化的類?

答案就在於:某些場景下普通類不夠用。例如,「蘋果」、「桔子」、「香蕉」都是「水果」,這裡的「水果」就是乙個抽象類。你可以說你喜歡吃「水果」,但你真正吃「水果」的時候,要麼是「蘋果」,要麼是「桔子」,要麼是「香蕉」。。。。。。但你絕不可能真正吃到乙個叫做「水果」的東東。

抽象類和介面有什麼區別,為什麼有了介面,還要有抽象類?

答案就在於:抽象類本質上還是類,強調一組事物的相似性,包括屬性和方法的相似性;而介面只強調方法的相似性,並且僅僅體現在方法宣告上的相似性,而沒有方法定義上的相似性。

2.5. 抽象

抽象的中文概念非常形象,簡單來說就是「抽取出來比較像的部分」。

抽象的層次是不限的,根據業務的需要,或者不同的觀察角度,可以抽象出很多層。

抽象最主要的作用是「劃分類別」,而劃分類別的主要目的其實還是「隔離關注點,降低複雜度

2.6. 三大核心特徵

封裝 封裝資料的主要原因是「保護隱私」 封裝方法的主要原因是「隔離複雜度」

繼承 = 遺傳了父輩的特徵 同時你還可能變異(子類)

多型 多指向父類的指標或者引用,能夠呼叫多個子類的物件。

設計模式系列 物件導向葵花寶典 物件導向實戰

宣告 本系列為物件導向葵花寶典一書學習總結內容,原作者部落格鏈結 3.物件全流程概述物件導向的技術流程可以概括如下 需求模型 通過和客戶溝通,結合行業經驗和知識,明確要求客戶的需求。領域模型 基於需求模型,提煉出領域相關的概念,為後面的物件導向設計打下基礎。領域模型 以領域模型為基礎,綜合物件導向的...

設計模式系列 物件導向葵花寶典 物件導向技巧

宣告 本系列為物件導向葵花寶典一書學習總結內容,原作者部落格鏈結 8.設計原則8.1.內聚和耦合 內聚 是否專注模組的職責,是內聚性的充要條件 是否與模組處理的內容相關 耦合 耦合 或者稱依賴 是程式模組相互之間的依賴程度 內聚關注模組內部的元素結合程度,耦合關注模組之間的依賴程度 訊息耦合模組間的...

商業模式不是「葵花寶典」

我總覺得,創業者對於商業模式的狂熱追捧越來越走向了乙個誤區。此話怎講?因為模式說到底,實際上是一種複雜商業邏輯的簡化。模式的產業殺傷力越大,自殺的可能性也越大,比如順馳。最近因為新工作的關係,老跟創業 風投的朋友打交道。耳朵裡聽到最多的乙個詞是 商業模式 business model 自從本世紀初....