軟件設計師教程第7章面向對象技術

7.1面向對象基礎

7.1.1面向對象的基本概念

Peter Coad 和 Edward Yourdon 提出用下面的等式識別面向對象方法。

面對對象=對象(Object)+分類(Classification)+繼承(Inheritance)+通過消息的通信(communication with messages)

可以說,採用這4個概念開發的軟件系統是面向對象的。

1.對象

在面對對象的系統中,對象是基本操作的實體,它既包括屬性,也包括行爲。一個對象通常由對象名、屬性和方法組成。

2.消息

對象之間進行通訊的一種構造叫做消息。當一個消息發送給某個對象時,包含要求接受對象去執行某些活動信息。接受到信息的對象經過解釋,然後給與響應,這種通訊機制稱爲消息傳遞,發送消息的對象不需要知道接受消息的對象是如何對請求給與響應的。

3.類

一個類定義了一組大體相似的對象。

類是在對象之上的抽象,對象是類的具體化,是類的實例。

類可以分爲三種:實體類、接口類(邊界類)、控制類

4.繼承

繼承是父類和子類共享數據和方法的機制,有單繼承和多繼承之分。

5.多態

在收到消息時,對象要予以響應。不同的對象收到同一消息可以產生完全不同的結果,這一現象稱爲多態(Polymorphism)。

多態的實現受到繼承的支持,利用類的繼承的層次關係,把具體的通用功能的消息存放在高層次,而不同的實現這一功能的行爲放在低層次

6.動態綁定

動態綁定是一個把過程調用和響應調用所需要執行的代碼加以結合的過程。

7.1.2面對對象分析

面對對象分析(Object-Oriented Analysis,OOA)包含5個活動:認定對象、組織對象、描述對象間的相互作用、確定對象的操作、定義對象的內部消息。

1.認定對象

首先將自然存在的名詞作爲對象,尋找系統關係的實質對象。

2.組織對象

分析對象間的關係,將相關的對象抽象成類

3.對象間的相互作用

如一個對象是另一個對象的一部分,一個對象與其他對象間的通訊關係

4.基於對象的操作

基於對象的操作有增刪改查等,也有更復雜的操作,將幾個對象的信息連接起來。

7.1.3面向對象設計

面向對象設計(Object-Oriented Design,OOD)是將OO所創建的分析模型轉化爲設計模型,其目標是定義系統構造的藍圖。

1.面向對象設計的活動

OOD在複用OOA的模型的基礎上,包含於OOA對應如下的五個活動。

(1)識別類及對象

(2)定義屬性

(3)定義服務

(4)識別關係

(5)識別包

2.面向對象設計的原則

(1)單一責任原則

(2)開放-封閉原則

(3)里氏替換原則

子類型必須能夠替換掉他們的基類型

(4)依賴導致原則

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

(5)接口分離原則

。。。。。。

7.1.4面向對象程序設計

程序設計泛型(programming paradigm)是人們在程序設計時所採用的基本方式模型,決定了程序設計時採用的思維方式、使用的工具,同時又有一定的應用範疇。

面向對象程序設計(object-oriented programming,oop)的實質是選用一種面向對象程序設計語言(OOPL),採用對象、類及其相關概念所進行的程序設計。

1.類

2.繼承和類層次結構

3.對象、消息傳遞和方法

4.對象自身引用

在java中即this

5.重置

6.類屬類

7.無實例的類

即java中的抽象類

7.1.5面向對象測試

用面向對象方法開發的系統測試

7.2UML

統一建模語言(unified modeling language)是面向對象軟件的標準化建模語言,目前已經成爲可視化建模語言事實上的工業標準。

UML由3個要素構成:UML的基本構造塊、支配這些構造塊如何放置的規則和運營與整個語言的一些公共機制。限於篇幅,下面僅對UML中的基本構造塊進行討論。

UML的詞彙表包含3中構造塊:事物、關係和圖。事務是對模型中具有代表性的成分抽象,關係把事務結合在一起,圖聚集了相關的事務。

7.2.1事物

UML中有4種事物:結構事物、行爲事物、分組事物和註釋事物

(1)結構事物包括,類 、接口、協作、用例、主動類、構建、製品、節點

(2)行爲事物包括,交互、狀態機和活動

(3)分組事物 包

(4)註釋事物 註解時一種重要的註釋事物

7.2.2關係

UML中有四種關係:依賴、關聯、泛化和實現

7.2.3UML中的圖

圖(diagram)是一組元素的圖形表示,大多數情況下把圖畫成頂點(代表事物)和弧(代表關係)的連通圖

UML2.0提供了13種圖。分別是類圖、對象圖、用例圖、序列圖、通信圖、狀態圖、活動圖、構建圖、組合結構圖、部署圖、包圖、交互概覽圖和計時圖。序列圖、通信圖、交互概覽圖和計時圖均被稱爲交互圖

7.3設計模式

7.3.1設計模式的要素

每一個模式描述了一個在我們周圍不斷重複發生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次的使用該方案而不必重複勞動。設計模式的核心在與提供了相關問題的解決方案,使得人們可以更加簡單方便地複用成功設計和體系結構。設計模式一般有以下4個基本要素。

(1)模式名稱

(2)問題,問題描述了應該在何時使用模式。它解釋了設計問題和問題存在的前因後果,可能描述了特定問題的設計問題,有時候,問題部分會包括使用模式必須滿足的一系列先決條件。

(3)解決方案,解決方案描述了設計的組成部分、它們之間的相互關係以及各自的職責和協作方式。因爲模式就像一個模板,可應用於多種不同的場合。所以解決方案並不描述一個特點的具體的設計和實現,而是提供設計問題的抽象描述和怎樣用一個具有一般意義的元素組合(類或對象組合)來解決這個問題。

(4)效果  描述了模式應用的效果及使用模式應權衡的問題。

設計模式確定了所包含的類和實例,他們的角色、協作方式以及職責匹配,每個設計模式都集中於一個特定的面向對象設計問題或設計要點,描述了什麼時候使用它,在另一些設計約束條件下是否還能使用,以及使用的效果和如何取捨。按照設計模式的目的可以分爲三大類

創建型模式與對象的創建有關;結構型模式處理類或對象的組合;行爲型模式對類或對象怎樣交互和怎樣分配職責進行描述。

7.3.2創建型設計模式

1.Abstract Factory(抽象工廠)

1)意圖

提供一個創建一系列相關或者相互依賴的接口,而無需指定它們具體的類。

2)結構

3)適用性

一個系統要獨立於它的產品的創建、組合和表示時

一個系統要由多個產品系列中的一個來配置時

當要強調一系列相關的產品對象的設計以便進行聯合使用時,

當提供一個產品類庫,只想顯示它們的接口而不是實現時。

2.Builder(生成器)

1)將一個對象的創建與它的表示分離,使用同樣的創建過程可以創建不同的表示。

2)結構

3)適用性

Builder模式適用於:

當創建複雜對象的算法應該獨立於該對象的組成部分以及它們的裝配方式時。

當構造過程必須允許被構造的對象有不同的表示時

3.Factory Method(工廠方法)

1)意圖

定義一個用於創建對象的接口,讓子類決定實例化哪一個類。factory method使一個類的實例化延遲到其子類。

2)結構

工廠方法模式的結構

3)適用性

Factory Method模式適用於

當一個類不知道它所必須創建的對象的類的時候,

當一個類希望由它的子類來指定它所創建的對象的時候

當類將創建對象的職責委託給多個幫助子類中的某一個,並且你希望將哪一個幫助子類是代理折這一信息局部化的時候。

4.Prototype(原型)

1)用原型實例指定創建對象的種類,並且通過賦值這些原型創建新的對象。

2)結構

3)prototype模式適用於:

當一個系統應該獨立於它的產品創建、構建和表示時。

當要實例化的類是在運行時刻指定時,例如,通過動態加載。

爲了避免創建一個與產品類層次平行的工廠類層次時。

當一個類的實例只能有幾個不同的狀態組合中的一種時,建立相應樹木的原型並克隆它們,可能比每次用合適的狀態手工實例化該類更方便一些。

5.Singleton (單例)

1)意圖

保證一個類只有一個實例,並提供一個訪問它的全局訪問點。

2)結構

3)適用性

當類只能有一個實例而且客戶端可以從一個總所周知的訪問點訪問它時

當這個唯一實例應該通過子類化可擴展的,並且客戶無需更愛代碼就能適用一個擴展的實例。

6.創建型設計模式比較

7.3.3結構型設計模式

結構型設計模式涉及如何組合類和對象以獲得更大的結構。

1.Adapter(適配器)

1)意圖將一個類的接口轉化成客戶希望的另外一個接口。Adapter模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。

2)結構

3)適用性

想用有一個已經存在的類而它的接口不符合要求

想創建一個可以服用的類,該類可以與其他不相關的類或不可預見的類協同工作

想使用一個已經存在的類,但是不可能對每一個都進行子類化匹配它們的接口。對象適配器可以適配它的父類接口。

2.Brige(橋接)

1)意圖

將抽象部分與其實現部分分離,使它們都可以獨立地變化。

2)結構

3)適用性

3.Composite(組合)

1)意圖

將對象組合成樹型結構以表示“部分-整體”的層次結構。composite使得用戶對單個對象和組合對象使用具有一致性。

2)結構

3)意圖

4.Decorator(裝飾)

1)意圖

動態地給一個對象添加一些額外的職責,就增加功能而言,Decorator模式比生成子類更加靈活

2)結構

3)適用性

5.Facade(外觀) 

1)意圖

爲子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易實用些。

2)結構

3)適用性

6.Flyweight(享元)

1)意圖

運用共享技術有效的支持大量細粒度的對象

2)結構

3)適用性

7.proxy(代理)

1)意圖

爲其對象提供一種代理以控制對這個對象的訪問

2)結構

3)適用性

7.3.4行爲設計模式

行爲設計模式涉及算法和對象間職責的分配。行爲模式不僅描述對象或類的模式,還描述它們之間的通訊模式。這些模式刻畫了在運行時難以跟蹤的、複雜的控制流。它們將用戶的注意力從控制流轉移到對象間的聯繫方式上來。

1.Chain of Responsibility(責任鏈)

1)意圖

使多個對象都有機會處理請求,從而避免請求的發送者和接受者之間的耦合關係,將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有個對象處理它爲止。

2.Command(命令)

1)意圖

將一個請求封裝爲一個對象,從而使得可以用不同的請求對客戶端進行參數化;對請求排隊或者記錄日誌,以及支持可撤銷的條件。

3.Interpreter(解釋器)

1)意圖

給定一個語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。

4.Iterator(迭代器)

1)意圖

提供一種方法順序方法一個聚合對象中的各個元素,且不暴露該對象的內部表示

5.Mediator(中介者)

1)意圖

用一箇中介對象來封裝一系列的對象交互。中介者使給對象不需要顯式相互引用,從而時期耦合鬆散,而且可以獨立地改變他們之間的交互。

6.Memento(備忘錄)

1)意圖

在不破壞封裝性的前提下捕獲一個對象的內部狀態,並在對象之外保存這個狀態。這樣以後就可以將對象恢復到原先保存的狀態。

7.Observer(觀察者)

1)意圖

定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新。

8.state(狀態)

1)意圖

允許一個對象在其內部改變時改變它的行爲。對象看起來似乎修改了它的類

9.Strategy(策略)

1)意圖

定義一系列的算法,把它們一個個封裝起來,並且使它們可以相互替換。此模式使得算法可以獨立於使用它們的客戶而變化。

10.Template Method模板方法

1)意圖

定義一個操作中的算法骨架,而將一些步驟延遲到子類中。Template Method使得子類可以不改變一個算法的結構即可重新定義該算法的某些特定步驟。

11.visitor (訪問者)

1)意圖

表示一個作用於某個對象結構中的各元素的操作。它允許在不改變各元素的了的前提下定義作用於這些元素的新操作

7.3.5應用舉例 

例7.7 Visitor模式

某圖書管理系統中管理着兩種類型的文獻:圖書和論文。現在要求統計所有館藏文獻的總頁碼(假設圖書館中有一本540頁的圖書和兩篇各25頁的論文,那麼館藏總文獻的總頁碼就是590頁)。適合採用Visitor模式實現該要求。

我只是把這本書關於這章的主要內容梳理了一下,具體的設計模式可以參見菜鳥教程 https://www.runoob.com/design-pattern/design-pattern-tutorial.html

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