統一建模語言UML可以很好的幫助我們分析開發中遇到的不斷增長且日趨復雜的需求,這在其他的諸如C++或者java語言開發的復雜系統中早已經得到驗證。但是在以object-c作為主導開發語言的ios應用開發中,使用者卻并不多見。
究其原因,大部分的UML工具,并未做到對OSX的支持,如Rational Rose;另外一些支持OSX的UML工具,也僅僅支持UML的一個子集,如DiagrammixLite僅僅支持類圖。
StarUML是目前我嘗試過的眾多mac版建模工具中不錯的一個。
一 、綜述
StarUML是一個開源的統一建模語言(UML)工具。是一種創建類圖,并能夠自動生成對應代碼的工具(當然目前暫時不支持object-c代碼的生成)。
盡管StarUML暫時還不支持oc代碼的生成,但是在比較復雜的應用開發中,借由其引入UML進行需求分析、設計分析、文檔輸出,確實能為我們的開發工作提供助力。
下面我就主要來梳理如何在應用開發中引入StarUML。
二 、安裝
首先,我們必須先安裝將要使用的軟件。
StarUML ,是一個開放源碼軟件, 遵循GPL協議許可(GNU公共許可證) ,并免費提供下載。
因此,只需要到官網下載對應的dmg文件安裝即可,下載鏈接如下:
http://staruml.io/download
三、創建工程
安裝后,打開應用便可以開始建模工作。
StarUML啟動后的界面如下圖所示:
這只是個單純的類圖,對于從零起步的應用,一開始肯定無法具體到類圖的層面。所以建議新建一個項目,在進行了用例圖,包圖等分析后,再做類圖。
選擇File->New From Template->UML Conventinal便可創建一個比較通用的工程模型。
建好的工程如下圖所示:
這個工程包含了Use Case Model、Analysis Model、Design Model、Implementation Model、Deployment Model以及UMLStandardProfile。其中UMLStandardProfile是提供給我們使用的屬性集,可以不用關注,其他的都是要輔助我們分析的工具。
默認的工程名為Untitled,可以通過選中工程,編輯Properties中的name項,來修改工程名。
四 、用例圖
用例圖主要用來描述“用戶、需求、系統功能單元”之間的關系。它展示了一個外部用戶能夠觀察到的系統功能模型圖。幫助開發團隊以一種可視化的方式理解系統的功能需求。
用例圖所包含參與者(Actor)、用例(Use Case)、子系統(Subsystem)、關系。
用例圖中涉及的關系有:關聯、泛化、包含、擴展。如下表所示:
一個簡單的闡述上面各種角色與關系的用例圖如下圖所示:
五 、類圖
在UML類圖中,常見的有以下幾種關系: 泛化(Generalization), 實現(Realization),關聯(Association),聚合(Aggregation),組合(Composition),依賴(Dependency)
- 泛化(Generalization):是一種繼承關系,表示一般與特殊的關系,它指定了子類如何特化父類的所有特征和行為。例如:老虎是動物的一種,即有老虎的特性也有動物的共性。
- 實現(Realization):是一種類與接口的關系,表示類是接口所有特征和行為的實現.
- 關聯(Association):是一種擁有的關系,它使一個類知道另一個類的屬性和方法,在代碼中體現在類和成員變量之間
- 聚合(Aggregation):是整體與部分的關系,且部分可以離開整體而單獨存在。如車和輪胎是整體和部分的關系,輪胎離開車仍然可以存在。聚合關系是關聯關系的一種,是強的關聯關系;關聯和聚合在語法上無法區分,必須考察具體的邏輯關系。
- 組合(Composition):是整體與部分的關系,但部分不能離開整體而單獨存在。如公司和部門是整體和部分的關系,沒有公司就不存在部門。組合關系是關聯關系的一種,是比聚合關系還要強的關系,它要求普通的聚合關系中代表整體的對象負責代表部分的對象的生命周期。
- 依賴(Dependency):是一種使用的關系,即一個類的實現需要另一個類的協助,所以要盡量不使用雙向的互相依賴.
**各種關系的強弱順序:
泛化 = 實現 > 組合 > 聚合 > 關聯 > 依賴 **
下面這張類圖,比較形象地展示了各種類圖關系:
六 、組件圖
組件圖是用來描述系統中的各組件之間的關系。組件圖主要是為系統架構師對整個系統的解決方案的自然形成,可以通過組件圖的形式把系統的大體功能進行區分和設計。組件圖中涉及的元素如下:
(1)、組件:我們知道組件是組件圖中最基本的組成元素,組件上面已經講述了組件的定義。這里就不在多介紹,組件圖組成的基本單位即組件。
(2)、容器:可以為多個組件提供服務的管理容器,容器中的組件相互交互。
(3)、包:可以看作一個子系統,其實也可以看作是特殊的組件。
(4)、約束:用于定義接口規范。
(5)、給組件圖中的相應元素添加相應注釋信息。
一般意義組件圖如下所示:
七、總結
通過以上的描述,我們已經基本清楚,UML是如何通過組件圖把系統功能進行抽象和分離,再通過功能流程細分后通過類圖去構建每個流程步驟中的每個類應具有的個方法。達到最終細分實現整個工程的目的。
現在有了StarUML,在開發復雜ios應用的時候,也可以按照這個步驟逐步來分解細化我們的工作啦。
希望本文的闡述,可以帶給您幫助。