摘要:類之間的關系關聯關系關聯關系是類與類之間最常用的一種關系,它是一種結構化關系,用于表示一個類對象與另一個類對象之間有聯系。自關聯在系統中可能會存在一些類的屬性對象類型為該類本身,這種特殊的關聯關系稱為自關聯。
UML
UML:統一建模語言(Unified Modeling Language)。在 UML 系統開發中有三個主要的模型:
功能模型:從用戶的角度展示系統的功能,包括用例圖。
對象模型:采用對象,屬性,操作,關聯等概念展示系統的結構和基礎,包括類圖、對象圖、包圖。
動態模型:展現系統的內部行為。包括時序圖,活動圖,狀態圖。
以下主要總結開發過程中常用的類圖和時序圖,及類之間的各種關系。
類圖類圖使用類來描述系統的靜態結構,類圖包含類和它們之間的關系,它描述系統內所聲明的類,但它沒有描述系統運行時類的行為。
在UML類圖中,類一般由三部分組成:
類名:每個類都必須有一個名字,類名是一個字符串。
屬性(Attributes):屬性是指類的性質,即類的成員變量。類可以有任意多個屬性,也可以沒有屬性。
操作(Operations):操作是類的任意一個實例對象都可以使用的行為,操作是類的成員方法。
類之間的關系 關聯關系關聯關系(Association)是類與類之間最常用的一種關系,它是一種結構化關系,用于表示一個類對象與另一個類對象之間有聯系。
在 UML 類圖中,用實線連接有關聯的對象所對應的類。在實現關聯關系時,通常將一個類的對象作為另一個類的屬性。
類的關聯關系可以是單向的,單向關聯用帶箭頭的實線表示。
public class Customer { private Address address; …… } public class Address { …… }
默認情況下,關聯是雙向的。
public class Customer { private Product[] products; …… } public class Product { private Customer customer; …… }
在系統中可能會存在一些類的屬性對象類型為該類本身,這種特殊的關聯關系稱為自關聯。
重數性關聯關系又稱為多重性關聯關系(Multiplicity),表示一個類的對象與另一個類的對象連接的個數。在 UML 中多重性關系可以直接在關聯直線上增加一個數字表示與之對應的另一個類的對象的個數。
表示方式 | 多重性說明 |
---|---|
1..1 | 表示另一個類的一個對象只與一個該類對象有關系 |
0..* | 表示另一個類的一個對象與零個或多個該類對象有關系 |
1..* | 表示另一個類的一個對象與一個或多個該類對象有關系 |
0..1 | 表示另一個類的一個對象沒有或只與一個該類對象有關系 |
m..n | 表示另一個類的一個對象與最少m、最多n個該類對象有關系 (m<=n) |
聚合關系(Aggregation)表示一個整體與部分的關系。通常在定義一個整體類后,再去找出這個整體類的一些成員類,該整體類和成員類之間就形成了聚合關系。
在聚合關系中,成員類是整體類的一部分,即成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨立存在。在 UML 中,聚合關系用帶空心菱形的直線表示。
public class Car { private Engine engine; public Car(Engine engine) { this.engine = engine; } public void setEngine(Engine engine) { this.engine = engine; } …… } public class Engine { …… }組合關系
組合關系(Composition)也表示類之間整體和部分的關系,但是組合關系中部分和整體具有統一的生存期。一旦整體對象不存在,部分對象也將不存在,部分對象與整體對象之間具有同生共死的關系。
在組合關系中,成員類是整體類的一部分,而且整體類可以控制成員類的生命周期,即成員類的存在依賴于整體類。在UML中,組合關系用帶實心菱形的直線表示。
public class Head { private Mouth mouth; public Head() { mouth = new Mouth(); } …… } public class Mouth { …… }依賴關系
依賴關系(Dependency)是一種使用關系,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關系。大多數情況下,依賴關系體現在某個類的方法使用另一個類的對象作為參數。
在UML中,依賴關系用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。
public class Driver { public void drive(Car car) { car.move(); } …… } public class Car { public void move() { ...... } …… }泛化關系
泛化關系(Generalization)也就是繼承關系,也稱為“is-a-kind-of”關系,泛化關系用于描述父類與子類之間的關系,父類又稱作基類或超類,子類又稱作派生類。在 UML 中,泛化關系用帶空心三角形的直線來表示。
實現關系實現關系(Realization)是類實現了接口,類中的操作實現了接口中所聲明的操作。在UML中,類與接口之間的實現關系用帶空心三角形的虛線來表示。
時序圖時序圖用于表示對象之間的交互,重點表示對象之間發送消息的時間順序。它以圖形化的方式描述了在一個用例或操作的執行過程中對象如何通過消息相互交互,說明了消息如何在對象之間被發送和接收以及發送的順序。時序圖允許直觀地表示出對象的生存期,在生存期內,對象可以對輸入消息做出響應,還可以發送信息。
一個復雜的時序圖可以劃分為幾個小塊,每一個小塊稱為一個交互片段(Interaction Fragment)。每個交互片段由一個大方框包圍,在方框左上角的間隔區內標注該交互片段的操作類型,該操作類型用操作符表示,常用的操作符包括:
alt:多條路徑,條件為真時執行。
opt:任選,僅當條件為真時執行。
par:并行,每一片段都并發執行。
loop:循環,片段可多次執行。
StarUML開發過程中需要繪制類圖和時序圖,常用的軟件有:StarUML,PowerDesigner 等,在線的有:ProcessOn。這里我最常用的是 StarUML,因為它顏值高~~~
軟件破解StarUML 是一款收費軟件,但它的破解很有意思。在安裝 StarUML 的 www/license/node 目錄下,找到 LicenseManagerDomain.js,在校驗函數中直接返回用戶信息即可。
類之間的關系在繪制類之間的關系時,對應 UML 的工具如下圖所示:
其中實現的關系,要達到帶空心三角形的虛線表示,則不要使用這個 Interface Realization,而應該在 Composite Structure 目錄下找到 Realization 的工具。
復雜時序圖在繪制時序圖的時候,會遇上選擇,循環等復雜的表示,StarUML 可以利用組合片段來完成。
添加組合片段到時序圖上:
如果有多條分支,則在右邊菜單中,拷貝 Operand:
更改名字和操作類型,默認是seq,還有 alt,opt,loop 等。
填寫不同分支的“guard” 信息(如雙擊左邊對應分支的空白處,輸入的[yes]和[no]),再處理對應的消息:
本文發表于個人博客:http://lavnfan.github.io/,歡迎指教。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67778.html
上次講了2個游戲源碼 前端實戰之js推箱子游戲(有界面、附源碼、贊關藏) Python實戰:五子棋小游戲,切身感受一下前端和桌面應用的區別,選擇自己喜歡的 本來今天準備寫一篇面向對象文章,但是想一想,講面向對象之前還是先給大家介紹幾款實用的工具,更加快速的理解,掌握知識點。 1.UML 統一建模語言(Unified Modeling Language,UML)是一種為面向對象系統的產品進行說明、可...
摘要:你們說能不能就用的開發模式來實現客戶端啊這樣版版版就都有了。有道云筆記可能就是最貼近我們想法的產品,有客戶端,有版。這個項目由發起和維護。 最近一個多月一直在用 AngularJS 做公司的一個項目(還沒有做完),我之前主要是用 PHP 開發服務端的,AngularJS 也是現學現賣,整個過程還是比較有意義的,覺得很有必要寫篇文章記錄一下。 緣起 事情是這樣的……我們團隊的產品是一款 ...
摘要:你們說能不能就用的開發模式來實現客戶端啊這樣版版版就都有了。有道云筆記可能就是最貼近我們想法的產品,有客戶端,有版。這個項目由發起和維護。 最近一個多月一直在用 AngularJS 做公司的一個項目(還沒有做完),我之前主要是用 PHP 開發服務端的,AngularJS 也是現學現賣,整個過程還是比較有意義的,覺得很有必要寫篇文章記錄一下。 緣起 事情是這樣的……我們團隊的產品是一款 ...
摘要:類共享,因此需要實現中的所有抽象方法,如果有的具體策略類比較簡單,但還是必須要去實現它的抽象方法,因此會增加不必要的開銷參考設計模式十八策略模式對象行為型深入面向對象模式與實踐第版 因為最近在學策略模式,所以想先跳過創建型設計模式中得適配器模式 定義 策略模式,顧名思義,就是提供多個策略的模式,用戶在不同的情況下可以選擇不同的策略,比如商場的打折策略(不同節假日不同的折扣方式),旅游出...
閱讀 3324·2019-08-29 16:17
閱讀 1984·2019-08-29 15:31
閱讀 2655·2019-08-29 14:09
閱讀 2554·2019-08-26 13:52
閱讀 753·2019-08-26 12:21
閱讀 2147·2019-08-26 12:08
閱讀 1000·2019-08-23 17:08
閱讀 1932·2019-08-23 16:59