一、 概念知识:
- UML是什么:
UML是一种语言,分析设计语言,它有属于自己的标准表达规则,也就是一种建模语言。
UML是由图形符号表达的建模语言。
UML是一种用于描绘软件蓝图的标准语言。 - UML结构
视图:用户视图、结构视图、实现视图、行为视图、环境视图。
图:用例图、类图等。
模型元素:模型元素包括事物以及事物与事物之间的联系、每一个模型元素都有一个与之相对应的图形元素、同一个模型元素可以在不同的UML图中使用、无论在哪个图中,同一个模型元素都保持相同的意义和符号。
通用机制:额外的注释、修饰和语义等、包括规格说明、修饰、公共分类和扩展机制四种、允许用户对UML进行扩展。 - UML的特点
工程化、规范化、可视化、系统化、文档化、智能化。
二、 用例建模:用例图、用例执行文档
建模步骤:
识别执行者Actor、识别用例、绘制用例图、书写用例文档、检查用例模型。
执行者:
在系统之外,透过系统边界与系统进行有意义交互的任何事物。
用例:
在系统中执行的一系列动作,这些动作将生成特定执行者可见的价值结果。起名为动词加宾语,要保持用户观点。
起名原则可理解为**【执行者】使用系统来【用例】**
执行者和用例之间的关联关系(Association)(或通信关系):一根直线来表示
执行者之间的泛化关系(Generalization)(或继承关系)
用例之间的关系:
包含关系(include):
描述在多个用例中都有的公共行为,由用例A指向用例B,表示用例A中使用了用例B中的行为或功能,包含关系是通过在依赖关系上应用<>构造型(衍型)来表示的。
扩展关系(extend):
扩展用例可以在基用例之上添加新的行为,但是基用例必须声明某些特定的“扩展点”,并且扩展用例只能在这些扩展点上扩展新的行为。扩展关系是通过在依赖关系上应用<>构造型(衍型)来表示的。单看,扩展用例可以“独立”的。
泛化关系:
当多个用例共同拥有一种类似的结构和行为的时候,可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。
在用例的泛化关系中,子用例是父用例的一种特殊形式,子用例继承了父用例所有的结构、行为和关系。(子用例之间互相扩展extend)
泛化关系一般很少使用。
书写用例文档:
用例是文本文档,而非图形。用例建模主要是编写文本的活动,而非制图。
用例文档的内容:
用例编号
用例名
执行者
前置条件(开始用例前所必需的系统及其环境的状态,必须是系统在用例开始前系统能检测到的,主语一般是执行者)
后置条件(用例成功结束后系统应该具备的状态,必须是系统能检测到的)
涉众利益
基本路径(执行者动作,系统验证,对应的改变,回应执行者)
1××××
2××××
3××××
扩展路径
2a.××××:
2a1….×××××
字段列表()
业务规则
非功能需求
设计约束(这四个可以直接放在用例中,也可以单独集中到另外的文档,从用例文档指向)
三、 状态图(State Diagram)
适合用于表述在不同用例之间的对象行为
定义:
用来描述一个特定对象的所有可能状态及其引起状态转移的事件。
通常用状态图来描述单个对象的行为
只有那些具有重要交互行为的类,才会使用状态图来描述。
一个状态图包括一系列对象的状态及状态之间的转换。
状态框:
每个状态框中有两格:上格放置状态名称,下格说明处于该状态时,系统或对象要进行的动作(Action)
转移:
从一个状态到另一个状态之间的连线,状态之间的过渡事件(Event)对应对象的动作或活动(Action)其。
语法为:事件名 [条件] / 动作名
组成元素:
初始状态(实心的圆点)
终止状态(实心圆外加一个圆圈)
状态
转移
守护条件
事件
动作
复合(组合)状态:
不包含其他状态的状态称为简单状态,将若干状态组织在一起可以得到一个复合状态。包含在一个复合状态中的状态称为子状态。
四、 活动图(Activity Diagram)
定义:
用来表示系统中各种活动的次序,它的应用非常广泛,既可用来描述用例的工作流程,也可以用来描述类中某个方法的操作行为。
活动图是UML中的流程图,是一种描述工作流的方式。
作用:
描述业务流程
描述用例路径
描述方法执行流程(程序流程图)
组成元素:
起始活动(Start Activity)(实心圆饼)
终止活动(End Activity)(圆圈内一个实心圆点)
活动(Activity)(圆角矩形)
转移(Transition)或流(Flow)(带箭头直线)
决策(Decision)
守护条件(Condition),用来约束转移,守护条件为真时转移才可以开始
同步条(Synchronization)(粗黑线),将一个转移分解成两个或更多的转移,从而导致并发的动作
泳道(Swimlane) 划分负责活动的对象
对象流(带箭头的虚线)对象(矩形)
活动图描述业务流程并不是对每个系统都必不可少的工作,不要看成可编程的模型。
五、 顺序图
以用例为单位创建顺序图。
定义:
用于确认和丰富一个使用情境的逻辑。
将交互关系表现为一个二维图,纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色,类元角色的活动用生命线表示。
组成元素:
生命线:用一条纵向虚线表示。
对象:表示为一个矩形,其中对象名称标有下划线。
激活:是过程的执行,包括等待过程执行的时间。激活部分替换生命线,使用长条的矩形表示。
消息:对象之间的通信,有标记的箭头表示。分为以下几种:
调用消息:对应于激活,表示它将会激活一个对象。
发送消息:没有对应激活框,表示它不是一个调用消息,不会引发其他对象的活动。
返回消息
自身消息
创建消息
销毁消息
同步消息
异步消息
交互片段:一个复杂的顺序图可以划分为几个小块,每一个小块称为一个交互片段。
alt:多条路径,条件为真时执行。
opt:任选,仅当条件为真时执行。
par:并行,每一片段都并发执行。
loop:循环,片段可多次执行。
critical:临界区,只能有一个线程对它立即执行。
注意:
启动交互的对象放在最左边,随后放入消息的对象放在启动交互对象的右边。
有的消息对应于激活,表示它将会激活一个对象,这种消息称为调用消息(Call Message);如果消息没有对应激活框,表示它不是一个调用消息,不会引发其他对象的活动,这种消息称为发送消息(Send Message)
似乎是一个使用者,和几个系统之类交互。使用者完全没有激活。系统只有有进有出才会激活。
六、 活动图、状态图、顺序图区分:
需要考察单个用例内部多个对象的行为可以使用顺序图;
需要考察单个对象的行为就需要使用状态图;
需要考察跨用例或者跨线程的行为就需要考虑使用活动图
七、 类图:类名(对象),属性,操作
类的属性表示方式:
可见性 名称:类型 [= 默认值]
+ age :int =25
类的操作表示方式:
可见性 名称([参数列表]) [: 返回类型]
+ method(int a,intb): int
类之间的关系:
关联关系(Association)
用于表示一类对象与另一类对象之间有联系
用实线连接有关联的对象所对应的类
通常将一个类的对象作为另一个类的属性
自关联
一些类的属性对象类型为该类本身
多重性关联
表示一个类的对象与另一个类的对象连接的个数。
聚合关系(Aggregation)
表示一个整体与部分的关系。
成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。(梦回extend?)
在UML中,聚合关系用带空心菱形的直线表示。
组合关系(Composition)
部分和整体具有统一的生存期。
部分对象与整体对象之间具有同生共死的关系。
整体类可以控制成员类的生命周期,即成员类的存在依赖于整体类。(这也是梦回include?)
在UML中,组合关系用带实心菱形的直线表示。
依赖关系(Dependency)
使用关系。
体现在某个类的方法使用另一个类的对象作为参数。
在UML中,依赖关系用带箭头的虚线表示。
做属性,是关联;做方法的参数,是依赖。
泛化关系(Generalization)
用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。
在UML中,泛化关系用带空心三角形的直线来表示。
接口与实现关系(Realization)
类实现了接口,类中的操作实现了接口中所声明的操作。
在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。
八、 正向工程与逆向工程
正向工程:模型到代码
逆向工程:代码到模型
之后的包图、组件图、部署图、对象图、组合结构图、通信图、定时图、交互概览图等,需要了解英文名称、作用以及定义。由于篇幅过长,编辑软件不好用,距离不方便等原因,不予交代。