预备知识:
一、UML的特性与发展现状
UML是一种Language(语言)
UML是一种Modeling(建模)Language
UML是Unified(统一)Modeling Language
1. 已进入全面应用阶段的事实标准
2. 应用领域正在逐渐扩展,包括嵌入式系统建模、业务建模、流程建模等多个领域
3. 成为“产生式编程”的重要支持技术:MDA、可执行UML等
二、建模的目的与原则
1. 帮助我们按照实际情况或按我们需要的样式对系统进行可视化;提供一种详细说明系统的结构或行为的方法;给出一个指导系统构造的模板;对我们所做出的决策进行文档化。
2. 仅当需要模型时,才构建它。
3. 选择要创建什么模型对如何动手解决问题和如何形成解决方案有着意义深远的影响;每一种模型可以在不同的精度级别上表示;***的模型是与现实相联系的;单个模型是不充分的。对每个重要的系统***用一组几乎独立的模型去处理。
三、谁应该建模
1. 业务建模:以领域专家为主,需求分析人员是主力,系统分析员、架构师可参与
2. 需求模型:以需求分析人员为主,系统分析员是主力,领域专家提供指导,架构师和资深开发人员参与
3. 设计模型:高层设计模型以架构师为主,系统分析员从需求方面提供支持,资深开发人员从技术实现方面提供支持。详细设计模型则以资深开发人员为主,架构师提供指导。
4. 实现模型:以资深开发人员(设计人员)为主,架构师提供总体指导。
5. 数据库模型:以数据库开发人员为主,架构师提供指导,资深开发人员(设计人员)予以配合。
正式开始
UML组成,三部分(构造块、规则、公共机制),关系如下图所示:
#p#
一、构造块
1. 构造块是对模型中***有代表性的成分的抽象
建模元素:UML中的名词,它是模型基本物理元素。
行为元素:UML中的动词,它是模型中的动态部分,是一种跨越时间、空间的行为。
分组元素:UML中的容器,用来组织模型,使模型更加的结构化。
注释元素:UML中的解释部分,和代码中的注释语句一样,是用来描述模型的。
a. 建模元素
◆ 类(class)和对象(object)
◆ 接口(interface)
◆ 主动类(active class)
◆ 用例(use case)
◆ 协作(collaboration)
◆ 构件(component)
◆ 节点(node)
类(class)和对象(object)
类是对一组具有相同属性、相同操作、相同关系和相同语义的对象的抽象。UML中类是用一个矩形表示的,它包含三个区域,最上面是类名、中间是类的属性、最下面是类的方法。
对象则是类的一个实例 (object is a Instance of Class)
接口(interface)
接口是描述某个类或构件的一个服务操作集。
主动类(active class)
主动类实际上是一种特殊的类。引用它的原因,实际上是在开发中需要有一些类能够起到启动控制活动的作用。主动类是指其对象至少拥有一个进程或线程,能够启动控制活动的类。
用例(use case)
用例是著名的大师Ivar Jacobson首先提出的,现已经成为了面向对象软件开发中一个需求分析的最常用工具。用例实例是在系统中执行的一系列动作,这些动作将生成特定执行者可见的价值结果。一个用例定义一组用例实例。
协作(collaboration)
协作定义了一个交互,它是由一组共同工作以提供某协作行为的角色和其他元素构成的一个群体,对于某个用例的实现就可以表示为一个协作。
构件(component)
在实际的软件系统中,有许多要比“类”更大的实体,例如一个COM组件、一个DLL文件、一个JavaBeans、一个执行文件等等。为了更好地对在UML模型中对它们进行表示,就引入了构件(也译为组件)。构件是系统设计的一个模块化部分,它隐藏了内部的实现,对外提供了一组外部接口,在系统中满足相同接口的组件可以自由地替换。
节点(node)
为了能够有效地对部署的结构进行建模,UML引入了节点这一概念,它可以用来描述实际的PC机、打印机、服务器等软件运行的基础硬件。节点是运行时存在的物理元素,它表示了一种可计算的资源,通常至少有存储空间和处理能力。
b. 行为元素
交互(interaction)
是在特定语境中,共同完成某个任务的一组对象之间交换的信息集合。交互的表示法很简单,就是一条有向直线,并在上面标有操作名。
状态机(state machine)
是一个对象或交互在生命周期内响应事件所经历的状态序列。在UML模型中将状态画为一个圆角矩形,并在矩形内写出状态名称及其子状态。
c. 分组元素
对于一个中大型的软件系统而言,通常会包含大量的类,因此也就会存在大量的结构事物、行为事物,为了能够更加有效地对其进行整合,生成或简或繁、或宏观或微观的模型,就需要对其进行分组。在UML中,提供了“包(Package)”来完成这一目标。
e. 注释元素
结构事物是模型的主要构造块,行为事物则是补充了模型中的动态部分,分组事物而是用来更好地组织模型,似乎已经很完整了。而注释事物则是用来锦上添花的,它是用来在UML模型上添加适当的解释部分。
#p#
2. 关系
UML模型的关系比较多,如下图:
a. 关联关系
关联(Association)表示两个类之间存在某种语义上的联系。关联关系提供了通信的路径,它是所有关系中最通用、语义最弱的。
在UML中,使用一条实线来表示关联关系。在关联关系中,有两种比较特殊的关系:聚合和组合。
聚合:聚合(Aggregation)是一种特殊形式的关联。聚合表示类之间的关系是整体与部分的关系。
如果发现“部分”类的存在,是完全依赖于“整体”类的,那么就应该使用“组合”关系来描述。
组合:组合是聚合的变种,加入了一些重要的语义。也就是说,在一个组合关系中一个对象一次就只是一个组合的一部分,“整体”负责“部分”的创建和破坏,当“整体”被破坏时,“部分”也随之消失。聚合就像汽车和车胎,汽车坏了胎还可以用。组合就像公司和下属部门,公司倒闭了部门也就不存在了!
b. 泛化、实现与依赖
泛化关系描述了一般事物与该事物中的特殊种类之间的关系,也就是父类与子类之间的关系。
实现关系是用来规定接口和实现接口的类或组件之间的关系。接口是操作的集合,这些操作用于规定类或组件的服务。
有两个元素X、Y,如果修改元素X的定义可能会引起对另一个元素Y的定义的修改,则称元素Y依赖(Dependency)于元素X。
二、规则
命名:也就是为事物、关系和图起名字。和任何语言一样,名字都是一个标识符
范围:与类的作用域相似.
可见性:Public,Protected,Private,Package
三、UML公共机制
1. 规格描述
在图形表示法的每个部分后面都有一个规格描述(也称为详述),它用来对构造块的语法和语义进行文字叙述。这种构思,也就使可视化视图和文字视图的分离。
2. UML修饰与通用划分
在为了更好的表示这些细节,UML中还提供了一些修饰符号,例如不同可视性的符号、用斜体字表示抽象类。
UML通用划分:
◆ 类与对象的划分:类是一种抽象,对象是一个具体的实例
◆ 接口与实现的分离:接口是一种声明、是一个契约,也是服务的入口;实现则是负责实施接口提供的契约
3. UML扩展机制
构造型:在实际的建模过程中,可能会需要定义一些特定于某个领域或某个系统的构造块
标记值则是用来为事物添加新特性的。标记值的表示方法是用形如“{标记信息}”的字符串
约束是用来增加新的语义或改变已存在规则的一种机制(自由文本和OCL两种表示法)。约束的表示法和标记值法类似,都是使用花括号括起来的串来表示,不过它是不能够放在元素中的,而是放在相关的元素附近。
4. UML视图和图
附:开发过程与图的对应关系