物件導向設計

2021-09-08 21:08:47 字數 2941 閱讀 5993

1:物件導向的三要素

1.1 封裝【encapsulation】a 封裝=合理的隱藏資料的隱藏【隱藏在方法背後】 

實現的隱藏【隱藏在介面背後】 

變化的隱藏【隱藏在抽象背後】

b 封裝能夠
提高物件的復用性

減低物件的耦合度

c 良好的封裝=物件的高內聚  

1.2 繼承【inheritance】

a 基於差異式程式設計

b 繼承與合成/聚合

合成/聚合復用原則

b 繼承的方式類的繼承

介面的繼承

c 繼承與實現 

1.3 多型【polymorphism】

a 多型指物件在不同時刻體現不同形態的能力

b 抽象與多型

c 多型的形式基類繼承式多型

介面實現式多型

2:物件導向的五原則

2.1 單一職責原則【srp】 瑞士軍刀

a 單一職責保證了物件的細粒度--便於復用

物件的單一性--利於穩定

b 單一職責分離了變與不變

c 不要建立「上帝」類facade類除外 

2.2 開閉原則【ocp】

a 對於擴張開放對於更改封閉

b 開閉原則的核心是「抽象」 

c 多型保證了擴張的開放性

d 開放意味著是想是可替換的

2.3 替換原則【lsp】
a 子型別必須能夠完全替換父型別

b  替換關注的是行為的可替換

c  替換原則可以驗證繼承關係正確性的準則(is a) 

體現了對個是現在介面的一致性

如果違背該原則通常的做法是引入新的超類將以前的父子關係轉變為兄弟關係

2.4 依賴倒置原則【dip】
a 面向介面程式設計

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

c 高層模組與底層模組以及客戶端與伺服器端模組應該依賴於介面而不應該依賴於實現

d 依賴倒置原則的核心是「抽象」 和「間接」

2.5 介面隔離原則【isp】
a 介面盡量小防止介面汙染

b 介面若要穩定就應當承擔較少的這則【符合單一職責原則】 

c 可以合理利用介面的繼承

d 同乙個類可以實現多個介面站在呼叫者的角色不同的介面代表不同的關注點,不同的職責甚至不同的角色

3:物件導向的六觀點

3.1 復用【reusibility】

a 軟體設計最大的敵人是重複

b 重複的**會導致解決方案的蔓延

c 細粒度,封裝,高內聚

d 相關模式prototype模式

proxy模式

e 如何提高軟體的復用性
方法級 

物件級 

模組級

3.2 擴充套件【extenbility】
a 不修改原有**增加新的功能謂之擴充套件

b 實現擴充套件的方式利用繼承實現擴充套件

利用組合實現擴充套件

利用繼承和組合實現擴充套件

利用抽象實現擴充套件

c 相關設計模式
decorator模式

visitor模式

proxy模式

3.3 分離【separability】
a 軟體設計需重視職責的分離

b 分離需要和抽象結合實現依賴的解耦

c 職責分離體現了單一職責原則

介面隔離原則

d 職責分離表現為
如何定義職責

如何分解職責

如何抽象職責

e 分離的目標
分離變與不變

分離介面和實現

分離資料和行為

f 相關設計模式
factorymethod模式

bridge模式

iterator模式

3.4 變化【change】
a 封裝變化是解決之道

b 封裝變化的核心是抽象封裝建立的變化

封裝結構的變化

封裝行為的變化

c 解決變化應遵循
開閉原則

依賴倒置原則

d 封裝變化的本質是隔離變化

e 隔離變化的方法

通過分離

通過抽象

依賴注入

f 相關模式
factorymothod模式

abatractfactory模式

strategy模式

3.5 簡約【simplicity】
a 簡約需遵循kiss原則

場景驅動設計

避免設計過度

b 如何實現簡約
封裝有利於簡約:職責的封裝

繼承有利於簡約:職責的服用

多型用利於簡約: 職責的委託

c 簡約不等於簡陋等於簡單而優雅

d 簡約需要重構和精益求精

e 如何考量簡約

可復用性

可擴充套件性

可測試性

f 相關模式
facade模式

singletion模式

composite模式

templetmethod模式

strategy模式

3.6 一致【coherance】
a 一致體現了軟體結構的和諧與平衡

b 一致體現為介面的一致:對於實現可替換

形式的一致:窺一斑而知全豹

呼叫的一致:客戶可透明訪問

c 相關模式
composite模式

adapter模式

物件導向設計

物件導向設計 object oriented design,ood 方法是oo方法中乙個中間過渡環節。其主要作用是對ooa分析的結果作進一步的規範化整理,以便能夠被oop直接接受。物件導向設計 ood 是一種軟體設計方法,是一種工程化規範。這是毫無疑問的。按照bjarne stroustrup的說法...

物件導向設計

物件導向的設計把握乙個重要原則 誰擁有資料,誰就對外提供操作這些資料的方法。人在黑板上畫圓 person,blackboard,circle draw 列車司機在剎車 人關門 兩塊石頭磨成一把石刀,石刀可以砍樹,砍成木材,木材可以做椅子。stone石頭 stoneknife石刀 stoneknife...

物件導向設計

物件導向的基本要素 封裝 繼承 多型。封裝的目的是隱藏事務內部的實現細節,以便提高安全性和簡化程式設計。封裝提供了合理的邊界,避免外部呼叫者接觸到內部的細節。我們在日常開發中,因為無意間暴露了細節導致的難纏 bug 太多了,比如在多執行緒環境暴露內部狀態,導致的併發修改問題。從另外乙個角度看,封裝這...