UML概述

比起UML的更重要的是OOA/D,你必须有思想,UML才有价值。它只是一种图形表示方法,它既是OOA/D思考的工具,也是一种沟通方式。

由于现在软件开发的专业化和横向分工化发展,例如需求由需求团队来做,分析由分析团队来做,设计由专门的设计团队来做,因此,同一个文档在不同角色之间传递,存在严重的沟通问题,UML语言的作用就在于此,使大家使用统一的标准化语言,它试图用统一的语言来覆盖整个软件过程,让不同的团队操着同一个口音顺畅沟通。

UML采用了可视化的图形形式来定义语言,通过它的元模型和表示法,准确而直观的把那些文字或其他方式很难表达清楚的,隐晦的潜台词用简单的图形表达和暴露出来,描述复杂的含义。

那么UML是如何描绘现实世界以及解决面向对象的困难的呢?

UML通过自己的元素,为现实世界建模,得到业务模型。即现实世界被业务模型映射并记录下来,得到原始需求。

接着,UML进行概念化过程,来建立适合计算机理解和实现的模型,指导开发。这个模型称为分析模型。它向上映射了原始需求,计算机可执行代码可以通过分析模型追溯到原始需求;同时,分析模型向下为计算机实现规定了一种高层次的抽象,这种抽象是一种指导,一种约束。该阶段同时诞生软件架构和框架。

然后,我们将概念模型(分析模型)实例化,得到计算机执行所需要的设计模型。

UML作为标准的面向对象建模语言,它需要某种建模方法的指导下进行建模工作,RUP就是统一过程,RUP+UML才是真正的建模方法。

建模基础

怎么建?

当你试图为现实世界建模的时候,首先要决定的是抽象角度,即建立模型的目的是什么,你的抽象角度决定了你认识事物的方式,也决定了你的建模方向。因此,我们在面向对象领域里,首先应该知道问题域的抽象角度。如果抽象角度找全了,且把这些角度都分析清楚了,问题域也就解决了。

具体来说,就是业务模型的所有参与者目标就是你的所有抽象角度,而不是一开始就弄清楚业务如何一步一步完成。实际上,这就是用例。

模是什么?

该问题依赖于确定了抽象角度下的场景模拟。

一旦确定目标,我们需要找出那些满足这一目标的事物,我们必须搞清楚谁发出了什么动作,作用于什么事物,产生什么后果,显然,这个操作过程是过程化的,但我们描述这个过程化的场景并不是最终目的,而是为了找出场景当中贡献于场景目标的那些事物,以及这些事物是如何贡献场景的。也就是场景模拟帮助我们找出抽象的对象,而场景本身则是这些对象在一定条件下交互的一个特定结果。当条件发生变化时,场景会变换,但我们不试图控制这种变化。

总结:特定场景(事件) == 静态事物(物)+特定条件(规则)+特定动作(参与者的驱动)

UML概述_第1张图片

用例驱动:

如果我们找到的那些事物,规则和行为实现了所有必要的用例,那么问题域也就解决了。总之,实现用例是必须要做的事情,一旦用例实现,则问题域解决,这就是用例驱动方法的原理。

在实际中,一个软件要实现的功能由用例来捕获,接下来的所有分析,设计,实现,测试都是由用例来驱动,即以实现用例为目标。在RUP中,一个用例就是一个分析单元,设计单元,测试单元,开发单元,设置部署单元。在RUP中,用例不仅能驱动分析设计,还包括:逻辑视图,进程视图,部署视图,实施视图。

抽象层次:

何为抽象层次,就是你认识事物的程度,比如说距离,抽象层次高,例如光年,抽象层次低,例如厘米。实际上,同一个距离,例如27000光年,因为光年封装了一些更为具体的信息,所以,你容易理解27000光年,这说明抽象层次越高,越容易理解,但具体信息少了。因为信息量大了,接近大脑处理的极限,人的理解力就下降。这也就是面向过程为什么困难的原因,这是需要的抽象层次,表示用一个概念来概括另外一部分信息,一旦人们接受了光年这个信息,理解就变得容易了,同时这个概念就屏蔽了更多具体的信息。这就是面向对象的优势所在,但随之而来的问题是,信息量因为高抽象层次而不足,因此,适当的时候采用适当的抽象层次,是很重要的。

抽象有两种方法,自顶向下,自底向上;前者容易让人从头开始认识事物,后者适合用于在实践中改进和提高认识。在软件开发中,主体上应该采用自顶向下的方法,用少量的概念覆盖系统需求,再逐步降低抽象层次,直到代码编写。同时,应当辅以自底向上的方法,通过总结在较低抽象层次的实践经验来改进较高层次的概念以提升软件质量。

抽象层次的确定,在UML上就是如何选择用例的粒度。另外一个问题,是边界问题。

视图:

视图不是很复杂,重点在于视角选择,建模的目的是向相关的人展示软件产品有着不同的方面,只有把这些方面都描述清楚,用很多个不同的视图去展示软件的这些方面,才能够说建立了一个完整的模型,UML为了说明这些不同的方面,定义了各种视图,来描绘软件的各个不同的方面,这就是建模的工作。

同时,建模的另外一项工作,就是视角选择,你所呈现的视图,是针对那些人员看的,为特定的信息选择正确的视图,为特定的干系人展示正确的视角,需要因时因地因人制宜。

对象分析方法:

一切都是对象,对象都是独立的,对象分析方法,是通过分析对象的很多场景中的对象实例,总结出对象的多个侧面,再通过整理这些对象的多个实例抽象出对象的一般特性。千万不要讲对象局限于一个场景中,一个对象实例。同时,对象具有原子性,永远不要打破对象的边界,否则,一片混乱。

另外,对象参与的场景越多,对象越有抽象价值,反之,越没有抽象价值。应当根据问题域的复杂程度设定多个抽象层次,在每个抽象层次上使用合适的抽象程度的对象描述。

独立性,原子性,抽象性,层次性是面向对象分析时应当遵循的一些原则和方法。







你可能感兴趣的:(UML概述)