统一建模语言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应用的时候,也可以按照这个步骤逐步来分解细化我们的工作啦。
希望本文的阐述,可以带给您帮助。