軟考架構師(14)——面向對象方法

0:基本概念

面向對象方法包括:面向對象分析,面向對象設計,面向對象程序設計html

一:統一建模語言(UML)

1:UML結構

UML結構包括UML的基本構造塊,支配這些構造塊如何放在一塊兒的規則(架構)和一些運用於整個UML的機制算法

(1)構造塊:

事物:數據庫

UML中的事物也稱爲建模元素,包括結構事物(structural things)、行爲事物(behavioral things,動做事物)、分組事物(grouping things)和註釋事物(annotational things,註解事物)。這些事物是UML模型中最基本的面向對象的構造塊。編程

關係:安全

UML 用關係把事物結合在一塊兒,UML中的關係主要有四種:數據結構

(1)依賴(dependencies):兩個事物之間的語義關係,其中一個事物發生變化會影響另外一個事物的語義。架構

(2)關聯(association):一種描述一組對象之間鏈接的結構關係,如聚合關係(描述了總體和部分間的結構關係)。併發

(3)泛化(generalization):一種通常化和特殊化的關係,描述特殊元素的對象可替換通常元素的對象。模塊化

(4)實現(realization):類之間的語義關係,其中的一個類指定了由另外一個類保證執行的契約。post

圖:

UML 2.0包括14種圖,分別列舉以下:

(1)類圖(class diagram):描述一組類、接口、協做和它們之間的關係。在面向對象系統的建模中,最多見的圖就是類圖。類圖給出了系統的靜態設計視圖,活動類的類圖給出了系統的靜態進程視圖。

(2)對象圖(object diagram):描述一組對象及它們之間的關係。對象圖描述了在類圖中所創建的事物實例的靜態快照。和類圖同樣,這些圖給出了系統的靜態設計視圖或靜態進程視圖,但它們是從真實案例或原型案例的角度創建的。 

(3)構件圖(component diagram):描述一個封裝的類和它的接口、端口以及由內嵌的構件和鏈接件構成的內部結構。構件圖用於表示系統的靜態設計實現視圖。對於由小的部件構建大的系統來講,構件圖是很重要的。構件圖是類圖的變體。

(4)組合結構圖(composite structure diagram):描述結構化類(例如構件或類)的內部結構,包括結構化類與系統其他部分的交互點。它顯示聯合執行包含結構化類的行爲的構件配置。組合結構圖用於畫出結構化類的內部內容。

(5)用例圖(use case diagram):描述一組用例、參與者(一種特殊的類)及它們之間的關係。用例圖給出系統的靜態用例視圖。這些圖在對系統的行爲進行組織和建模時是很是重要的。 

(6)順序圖(sequence diagram,序列圖):是一種交互圖(interaction diagram),交互圖展示了一種交互,它由一組對象或角色以及它們之間可能發送的消息構成。交互圖專一於系統的動態視圖。順序圖是強調消息的時間次序的交互圖。

(7)通訊圖(communication diagram):也是一種交互圖,它強調收發消息的對象或角色的結構組織。順序圖和通訊圖表達了相似的基本概念,但每種圖所強調的概念不一樣,順序圖強調的是時序,通訊圖則強調消息流經的數據結構。

(8)定時圖(timing diagram,計時圖):也是一種交互圖,它強調消息跨越不一樣對象或角色的實際時間,而不只僅只是關心消息的相對順序。

(9)狀態圖(state diagram):描述一個狀態機,它由狀態、轉移、事件和活動組成。狀態圖給出了對象的動態視圖。它對於接口、類或協做的行爲建模尤其重要,並且它強調事件致使的對象行爲,這很是有助於對反應式系統建模。 

(10)活動圖(activity diagram):將進程或其餘計算的結構展現爲計算內部一步步的控制流和數據流。活動圖專一於系統的動態視圖。它對系統的功能建模特別重要,並強調對象間的控制流程。

(11)部署圖(deployment diagram):描述對運行時的處理節點及在其中生存的構件的配置。部署圖給出了架構的靜態部署視圖,一般一個節點包含一個或多個部署圖。

(12)製品圖(artifact diagram):描述計算機中一個系統的物理結構。製品包括文件、數據庫和相似的物理比特集合。製品圖一般與部署圖一塊兒使用。製品也給出了它們實現的類和構件。 

(13)包圖(package diagram):描述由模型自己分解而成的組織單元,以及它們的依賴關係

(14)交互概覽圖(interaction overview diagram):是活動圖和順序圖的混合物。

(2):規則

UML用於描述事物的語義規則分別是爲事物、關係和圖命名。

給一個名字以特定含義的語境,即範圍;

怎樣使用或看見名字,便可見性;

事物如何正確、一致地相互聯繫,即完整性;

運行或模擬動態模型的含義是什麼,即執行。

UML對系統架構的定義是系統的組織結構,包括系統分解的組成部分、它們的關聯性、交互、機制和指導原則等這些提供系統設計的信息。

而具體來講,就是指5個系統視圖,分別是邏輯視圖、進程視圖、實現視圖、部署視圖和用例視圖。

(1)邏輯視圖:以問題域的語彙組成的類和對象集合。

(2)進程視圖:可執行線程和進程做爲活動類的建模,它是邏輯視圖的一次執行實例,描繪了所設計的併發與同步結構。

(3)實現視圖:對組成基於系統的物理代碼的文件和構件進行建模。

(4)部署視圖:把構件物理地部署到一組物理的、可計算的節點上,表示軟件到硬件的映射及分佈結構。

(5)用例視圖:最基本的需求分析模型。

其使用對應時間請參考:《軟考架構師(8)——軟件架構設計》中的圖

 (3)公共機制

公共機制是指達到特定目標的公共UML方法,主要包括規格說明(詳細說明)、修飾、公共分類(通用劃分)和擴展機制四種。

 二:面向對象分析

用例模型

分析模型

三:面向對象設計

面向對象設計是把分析階段獲得的需求轉變成符合成本和質量要求的、抽象的系統實現方案的。

面向對象設計的一些基本準則是:模塊化、抽象、信息隱藏、高內聚和低耦合。

下面是具體面向對象設計的原則

(1)單一職責原則:(即儘量一個類對應一個責任)這是模塊內聚性在類和類的職責中的體現,若是一個類承擔的職責過多,意味着這些職責耦合在一塊兒,造成的頗有多是一個「雜湊類」,任一個職責的變化可能會削弱或者抑制該類完成其餘職責的能力,並影響到構建、測試和部署等活動。經過業務分離能夠對概念進行解耦,從而獲得目的單一的類。

(2)開放-封閉原則。(即對於擴展是開放的,對於修改是封閉的)在模塊自己不變更的狀況下,經過改變模塊周圍的環境達到修改目的。遵循開放-封閉原則設計出的模塊具備一個主要特徵,即對於擴展是開放的,對於修改是封閉的。也就是說,模塊的行爲是可擴展的,當應用的需求改變時,在模塊上進行擴展使其具備知足那些改變的新行爲。當模塊進行擴展時,沒必要改動模塊的源代碼或二進制代碼。

(3)李氏(Liskov)替換原則。(即子類型必須可以替換掉它們的基類型)子類具備擴展父類的責任,而不是重寫的責任。也就是說,基類的使用者沒必要爲了使用子類而作任何其餘的事情,他們能夠在根本不瞭解子類的特殊性,甚至沒必要知道是否存在子類,存在哪些子類的狀況下來調用基類的抽象方法。這樣多態性才能順利實現。事實上,正是Livkov替換原則,才使開放-封閉原則得以實現。由於正是子類的可替換性才使得基類的模塊在無需修改的狀況下就能夠擴展。

(4)依賴倒置原則。高層模塊不該該依賴於低層模塊,兩者都應該依賴於抽象;抽象不該該依賴於細節,細節應該依賴於抽象。每一個較高的層次都爲它須要的服務聲明一個抽象接口,較低的層次實現這個接口,每一個高層類都經過該抽象接口使用下一層;要依賴於抽象,而不是具體實現。也能夠這樣說,要針對接口編程,不要針對實現編程。

(5)接口隔離原則。應當爲客戶端提供儘可能小的單獨的接口,而不是提供大的接口;使用多個專門的接口比使用單一的總接口要好。也就是說,一個類對另一個類的依賴性應當是創建在最小的接口上的。這裏的「接口」每每有兩種不一樣的含義:一種是指一個類型所具備的方法特徵的集合,僅僅是一種邏輯上的抽象;另一種是指某種語言具體的「接口」定義,有嚴格的定義和結構。在進行OOD的時候,一個重要的工做就是恰當的劃分角色和角色對應的接口。將沒有關係的接口合併在一塊兒,是對角色和接口的「污染」。若是將一些看上去差很少的接口合併,並認爲這是一種代碼優化,這也是錯誤的。不一樣的角色應該交給不一樣的接口,而不能都交給一個接口。

(6)組合重用原則:要儘可能使用組合,而不是繼承關係達到重用目的。組合相比於繼承的好處:更大的靈活性而不會影響調用代碼;更短的編譯時間;適用性更廣;較好的健壯性和安全性,更少的複雜性和脆弱性,更好的可維護性;可以在運行期建立新的對象。固然,耦合度的下降又會增長設計的難度、系統的複雜性以及實現的成本等,所以,在設計過程當中,必須對這些因素綜合考慮。

(7)迪米特(Demeter)原則:又叫最少知識法則(Least Knowledge Principle,LKP),就是說一個對象應當對其餘對象有儘量少的瞭解。遵循類之間的迪米特原則會使一個系統的局部設計簡化,由於每個局部都不會和遠距離的對象有直接的關聯。可是,這也會形成系統的不一樣模塊之間的通訊效率下降,也會使系統的不一樣模塊之間不容易協調。迪米特原則在類的設計上主要體如今:優先考慮將類設置成不變類,儘可能下降類的訪問權限,謹慎使用Serializable,儘可能下降成員的訪問權限。但遵循該原則,會在系統中造出大量的小方法,這些方法僅僅是傳遞間接的調用,與系統的商務邏輯無關。

四:面向對象測試

 採用面向對象開發相對應的測試技術,它一般包括4個測試層次,從低到高排列分別是算法層、類層、模板層和系統層。

(1)算法層:測試類中定義的每一個方法,基本上至關於傳統軟件測試中的單元測試。

(2)類層:測試封裝在同一個類中的全部方法與屬性之間的相互做用。在面向對象軟件中類是基本模塊,所以能夠認爲這是面向對象測試中所特有的模塊(單元)測試。

(3)模板層:也稱爲主題層,測試一組協同工做的類或對象之間的相互做用。大致上至關於傳統軟件測試中的子系統測試,可是也有面向對象軟件的特色(例如:對象之間經過發送消息相互做用)。

(4)系統層。把各個子系統組裝成完整的面向對象軟件系統,在組裝過程當中同時進行測試。

相關文章
相關標籤/搜索