OOAD 及 UML 學習筆記

2021-05-25 21:14:25 字數 3729 閱讀 6006

交流qq群:26651479

day01:

物件導向

通過封裝、繼承、多型,把程式的耦合度降低,使程式靈活、容易修改、容易復用。

物件導向=物件 + 類 + 訊息 + 繼承 + 多型

物件導向方法是一種把物件導向的思想運用於軟體開發過程,指導開發活動的系統方法,包括分析、設計和實現等活動

軟體開發組越大,組中每個成員的生產率就越低

--philippe kahn, borland

ln = 15000/(n^-3)( loc / year )

構造大型軟體不能靠堆人

敏捷開發:

1. 思路先行  //先用注釋把思路記錄下來

2. 實現隨後

可維護性:預見需求(預見多年後的事)

可重用:

**可重用(最低級別):粒度:方法(常用**塊),類,包,元件(類庫)

設計的可重用:框架(半成品,如hibernate);產品(開發軟體);演算法、設計模式

分析的可重用(最高端別,見不到**):文件、規範、標準(iso:cmm,cmmi)

可擴充套件性:

uml圖

類(class) 用矩形框表示,分三層

第一層:類名,抽象類用斜體字

第二層:類的特性:欄位和屬性

第三層:類的操作:方法或行為

方法前的符號:「+」表示public,「-」表示private,「#」表示protected

介面:右邊的「飛翔」

頂端有<>,第一層是介面名字,第二層是方法

介面的另一種表示法:俗稱棒棒糖表示法,就是類上面的一根棒棒糖(圓圈+實線)

圓圈旁為介面名稱,介面方法在實現類中出現

繼承:用空心三角+實線

實現介面:空心三角+虛線

類與物件之間的關係(6種):

關聯 association:乙個類受另乙個類影響(實線)

聚合關聯 aggregation:弱'擁有'關係,a物件可以包含b物件,但b不是a的一部分(空心菱形+實線箭頭)[dpe]

(dpe 表示這句話來自《設計模式》)

組合關聯 composition:(也叫合成,組成)是一種強的『擁有』關係,體現嚴格的部分和整體的關係,

部分和整體的生命週期一樣[dpe](實心菱形+實線箭頭)

組合圖形的基數:表明這一端的類可以有幾個例項,(乙隻鳥有兩個翅膀)如果有無數個例項,則用n表示

關聯關係、聚合關係也可以有基數

依賴 dependency :乙個類需要另外乙個類(x需要y,則x的修改y也要跟著修改) (虛線箭頭)

泛化(繼承) (實心菱形+實線)

實現  (實心菱形+虛線)

uml 4+1 圖

1:用例圖    描述系統中有哪些使用者可用的功能

4:邏輯圖    將問題中的一些名詞提取出來,形成系統中對應的類,表示之間的關係。

過程圖    表示系統物件間的互動

實現圖    系統中元件與元件之間互動

部署圖    軟體系統真實執行過程的物理描述

靜態(系統結構):

類圖物件圖

構建圖部署圖

動態(系統行為):

順序圖    (時序圖)

協作圖狀態圖

活**用例圖

day02:

物件導向的7大基本設計原則

程式設計:沒有最好,只有最適合。尋找平衡點。

1. lsp(the liskov substitution principle ,替換原則)

父類出現的地方,子類都可出現。

子類或實現類與父類都是可以互換的。

子類不能新增任何父類沒有的附加約束

子類物件必須可以替換父類物件

2. ocp (the open-close principle,開閉原則)

要關聯抽象,不要關聯具體,抽象可擴充套件。

擴充套件是開放的,更改是封閉的

3. srp(the single responsibility principle,單一職責原則)

依賴不同的具體類,不要將不相關的方法放到乙個具體類中,然後具體類再關聯。

乙個類,應該僅有乙個引起它變化的原因

當需求變化時,該變化會反映為類的職責的變化(如果有多個職責,引起變化的原因就會有多個)

4. isp(the inte***ce segregation principle,介面隔離原則)

具體類不要實現無關介面中的方法,應使用具體類實現多個介面。

避免肥介面,以乙個類實現多個介面,而各客戶僅僅獲知必須的介面

本質:使用多個專門的介面比使用單一的介面好

乙個類對另乙個類的依賴性應當最小化

避免介面汙染(inte***ce pollution)(使用不必要的功能)

5. dip(the dependency inversion principle,依賴倒置原則)

高層依賴於抽象,底層繼承/實現於抽象。

高層模組不應該依賴於低層模組,二者都應該依賴於抽象

細節應該依賴於抽象,而抽象不應該依賴於細節

針對介面程式設計,不是針對實現程式設計

6. carp(composite/aggregate reuse principle,組合/聚合復用原則)

盡量使用組合/聚合,而不是使用繼承來達到復用目的

繼承的缺點:會帶來不必要的方法

組合/聚合的解決方案

組合:部分的更改會影響整體的生命

聚合:部分的更改對整體的影響不大

7. lod(law of demeter,迪公尺特法則)

類間最少通訊原則,採用中間類。

也稱最少知識原則。乙個物件或模組應該和其它物件和模組盡量少的通訊

gof(gang of fout) 23種經典設計模式

建立型                     結構型               行為型

類   factory method 工廠方法     adapter_class       interpreter

template method

物件 abstract factory 抽象工廠   adapter_object      chain of responsibility

builder                    bridge              command

prototype 原型              composite           iterator

singleton 單例              decorator 裝飾       mediator

facade              memento

flyweight           observer

proxy               state    狀態

strategy

visitor

單例模式:

當多個物件需要共享同乙個物件時;

原型模式:

對擴充套件開發,對修改關閉;

工廠模式:

客戶需要某個產品,能夠根據客戶要求取得產品給客戶;

狀態模式:

當需要對某個物件內部狀態改變時,使用;

裝飾模式:

當需要對某個物件動態新增新功能時,可以用;

介面卡模式:

只需要對介面中的一小部分方法重新定義,又不希望將介面中的所有方法實現,

這時可以使用;

觀察者模式:

當主題物件改變時,需要通知所有的觀察者,這時可以使用;

命令模式:

將使用者發出命令以物件形式傳遞,通過引數可改變命令物件的狀態;

OOAD 和UML經典總結

day01 物件導向 通過封裝 繼承 多型,把程式的耦合度降低,使程式靈活 容易修改 容易復用。物件導向 物件 類 訊息 繼承 多型 物件導向方法是一種把物件導向的思想運用於軟體開發過程,指導開發活動的系統方法,包括分析 設計和實現等活動 軟體開發組越大,組中每個成員的生產率就越低 philippe...

OOAD 學習筆記 二

物件導向分析面臨的主要問題 問題域和系統責任的確定,交流問題,不斷變化的需求,軟體復用的要求。軟體的複雜性源於問題域和系統責任的複雜性 問題域 被開發系統的應用領域,即在現實世界同這個系統所涉及的業務範圍。系統責任 被開發的系統應該具備的職能。物件導向分析 強調用物件的概念對問題域中的事物進行完整的...

OOAD 學習筆記 五

本節主要講解順序圖,通訊圖,活 狀態機圖,包圖。順序圖,通訊圖,活 狀態機圖用於描述系統的行為,包圖用於組織系統的模型。順序圖 順序圖和通訊圖都是用於詳細描述物件間的互動 通訊圖根據順序圖生成,反之亦然 順序圖示例 76頁,圖5 1 順序圖是二維的,垂直方向表示時間,水平方向放置不同的物件。物件生命...