重新认识StarUML
what is it?
StarUML 是一个做UML(Unified Modeling Language)的建模工具。它基于UML 1.4为此提供了11种diagram, 并且它也兼容UML2.0。可以利用StarUML中的 UML profile对模型驱动架构(Model Driven Architecture)提供支持。
why use it?
世间万物皆有联系,不管是直接还是间接,强联系还是弱联系。如果只是文字叙述这些大大小小的联系,费时又费力,图形化可以更直观,更清晰表达各种联系,而建模工具正是表达各种联系的工具(微笑脸)。
一个产品从设计到最终上线都是以需求为导向,做需求的人可能需要Use Case Model做需求分析;做设计的人可能需要Design Model做产品设计;做开发的人可能需要Analysis Model, Implementation Model做软件的分析和实现;运维可能需要Deployment Model对最终的软件产品发布、部署。建模工具满足了不同角色的人协同工作, 当然不止是软件开发领域,还涵盖了建筑领域、复杂的工业处理方面等等。
合理化资源配置、减少成本输出,应用领域广泛,简单实用。
how to do it
软件建模的时候,StarUML会以一个project为最基本的管理单元, project包含一个或者多个model。通常一个project以一个文件的方式保存。 project 可以整合很多小的文件, 每个小文件又可以被其他的project 或者unit文件复用。在StarUML中,只有package, subsystem, model可以组成一个unit, 所有unit 可以包含任何子单元(sub-unit)。
StarUML中定义了一些元素,及元素之间的关系, 我只列出比较常见的一些元素: Model, View, Diagram,一个model 可以构建不同角度的diagram, diagram又由很多可视化的view组成 他们的关系如下:
StarUML中给出了5种类型的Model:User Case Model, Analysis Model, Design Model, Implementation Model, Deployment Model;
每个model中可以新建11种不同的diagram, 以下我主要介绍下使用常用的diagram时, 比较老司机的方法:
一、Use Case Diagram中建立连接时,使用技巧:
在Actor和Use Case之间建立多个关联或者直接关联:
Procedure for creating element related to association/directed assocition
In order to create element associated with current element, use shortcut creation syntax.
Double-click element and enter element’s names associated after “–” or “->” string at the quick dialog. Separate element names with “,” character to relate multiple elements.
Double-click element and enter element’s names associated after “–” or “->” string at the quick dialog. Separate element names with “,” character to relate multiple elements.
Press [Enter] key and several elements associated with selected element are created and arranged automatically.
Press [Enter] key and several elements associated with selected element are created and arranged automatically.
在Use Case 之间建立父子关系:
Procedure for creating multiple child actors inherited from actor
To create multiple elements inherited from some element,
Enter with “<=” string as following at the quick dialog, and several elements inherited from selected element are created at once.
Enter with “<=” string as following at the quick dialog, and several elements inherited from selected element are created at once.
Child elements are generated below selected element and arranged automatically.
Child elements are generated below selected element and arranged automatically.
If you want to create multiple parent element at once, enter “=>” string instead of “<=” in the quick dialog.
二、modeling with Class Diagram 杂谈:
一个子系统(subsystem)实现一个接口如图:
简单说下类A和类B之间的关系类型:
Association:2个类之间A和B 之间具有单向或者双向关联。 单向关联指A知道B的存在, 而B却不知道A的存在,举个栗子:某人的年度账单(AnnualBill) 和星巴克(Starbucks),年度账单需要关联星巴克,而星巴克并不知道该年度账单的关联关系,2者关联关系如下图:
双向关联是双方都知道彼此的存在, 并且相互关联。栗子:航班(Flight)和飞机(plane)之间存在双向关联,一个或者多个航班对应一个飞机, 一个飞机对应一个或多个航班,2者关系如下图:
Aggregation:2个类之间具有聚合关系,一般地,聚合关系符合2个基本的要素:2个类之间属于整体和部分的关系;部分并不受制于整体的生命周期,即部分独立于整体存在。栗子:汽车(Car)和轮胎(Wheel)之间可看做是基本聚合关系。汽车是一个整体, 轮胎是一部分,轮胎独立于汽车而存在,2着的关系图如下:
Composition: 2个类之间具有组合关系。一般地,组合关系符合2个基本要素:2个类之间具有从属关系:整体和部分;部分受制于整体的生命周期,即部分依赖于整体。栗子:公司(Company)和部门(Department)之间属于组合关系, 公司是一个整体,部门是一个部分;部门依赖于于公司存在,一个公司不存在, 必然部门也不存在了。2者关系图如下:
Generalization:2个类之间存在父子关系。栗子:父母(Parent)和孩子(Children), 2者关系图如下:
Realization:2个类之间存在契约关系。一方提供规范标准,另一方负责实现该标准。2者关系图如下:
AssociationClass:在2个基本关联类A, B之间需要包含其他类C ,类C 只是与A, B 之间的关联有关系, 而与A, B 本身没有关系。栗子:航班(Flight)和乘客之间(Passenger)之间具有双向关联关系, 该双向关联会产生一个关联类差旅费(MileageCredit),关系图如下:
三、modeling with sequence diagram杂谈:
我一般使用sequence diagram分析源码, 这也是我写这篇文章的真正意图:正确使用sequence diagram。
直接上栗子:
- 用Player 播放音乐;
- 自己觉得好听的音乐;
- 通过喜欢的音乐找到比较有特色的歌手;
- if 遇到很喜欢的歌手, then follow him/her;
- 听着喜欢的歌曲是一种享受;
- 继续听歌, 继续享受。
1、2、3的message被长方形块包着,这个长方形块称为:Combined Fragment, 设置它的InteractionOperator为loop 相当于Java 中的for/while循环,只要符合[I’m alive]这个条件, 就会一直循环1、2、3 这几个message。编号为4的message 被opt的Combined Fragment 包围着, opt 相当于Java中的if then语句, 栗子中表达的意思是if 我 appreciate a singer, then I’ll follow her/him.编号为5、6的被loop 包围, 用法同第一个loop 块一样,5、6表达意思:生活里不能缺少音乐, 音乐给生活带来一些乐趣甚至惊喜, 所以, 我也会一直play music!