《大象 Thinking in UML》学习笔记(二)——建模基础

一、建模

建模(Modeling),是指通过对客观事物建立一种抽象的方法用以表征事物并获得对事物本身的理解,同时把这种理解概念化,并这些逻辑概念组织起来,构成一种对所观察的对象的内部结构和工作原理的便于理解的表达。

建模主要包含两个问题,一个是怎么建?另一个是模是什么?

怎么建?
同样的事物在不同的世界观的人眼里会产生不同的结果,而这个世界观在建模里对应的是抽象角度,抽象的角度不同决定了建模方向的不同。
无论在需求分析、系统分析还是系统设计上,要采用面向对象的方法,在面对问题领域的时候首先不要决定去通盘考虑,而是找出问题领域里包含的抽象角度,把抽象角度找全了,并且这些角度都分析清楚了,问题领域也就解决了。
做需求的时候,首要目标不是要弄清楚业务是如何一步一步完成的,而是要弄清楚有多少业务的参与者?每个参与者的目标是什么?参与者的目标就是抽象角度,也就是用例。

模是什么?
一旦决定了抽象角度,就确定了一个目标。
一个由抽象角度确定了的目标需要由静态事物加上特定条件下产生的一个特定场景来完成,即静态的事情(物)+特定的条件(规则)+特定的动作(参与者的驱动)=特定的场景(事件)
这个就是上一章里说到认识世界的四个要素联系起来了:人、事、物、规则。

综合以上所示,建模公式的就是:

《大象 Thinking in UML》学习笔记(二)——建模基础

二、用例驱动

从建模公式我们可以知道,要想解决问题领域就需要归纳出所有必要的用例,实现了这些用例,问题也就解决了。
所以为了实现这些用例,我们就需要实现与之相关的分析、设计、实现、测试,这就是用例驱动。

用例具体可以驱动的具体内容有:
逻辑视图:建模公式中的“人”、“事”、“物”、“规则”是如何分类资质的;
进程视图:建模公式中的“人”、“事”、“物”、“规则”是如何交互的,它们的关系如何;
部署视图:建模公式中的“人”、“事”、“物”、“规则”是如何部署在物理节点上的;
实施视图:建模公式中的“人”、“事”、“物”、“规则”是如何构成系统的“零部件”,以及我们如何组织人力生产和组装这些“零部件”以坚持最终系统;

用例驱动视图为:
《大象 Thinking in UML》学习笔记(二)——建模基础

三、抽象层次

抽象层次是面向对象方法中极其重要但又非常难以掌握的技巧,抽象层次越高,具体信息越少,概括能力越强
抽象层次是为了帮助人去更容易理解事物,它将一部分具体的信息封装起来用一个新的概念去替代,比如长度的单位,天所学所用的光年相对于米、公里这些常见单位来说更加抽象,但说太阳系距离银河系中心大约有27000光年就比说这个距离是255439722759681600000米更容易让人理解

抽象有两种方法,一种是自顶向下,另一种是自底向上。
自顶向下的方法适用于让人们从头认识一个事物;
自底向上的方法适用于在实践中改进和提高认识。

软件开发中,主体上应当采用自顶向下的方法,用少量的概念覆盖系统需求,再逐步降低抽象层次,直到代码编写。同时应当辅以自底向上的方法,通过总结在较低抽象层次的实践经验来改进较高层次的概念以提升软件质量。


四、视图

视图用于组织UML元素,表达出模型的某一方面的含义。
视角是人们观察事物的角度。

针对每个视图来说,不同的视角展示了同样信息的不同认知角度以便于理解。

在建模里,UML里定义了用例图、对象图、类图、包图、活动图等不同的视图,不同类型的视图表示从不同的视角描述了一个软件的结构和组成,而所有这些视图的集合表达了一个软件的完整含义。

一个好的模型,需要为特定的信息选择正确的视图,为特定的干系人展示正确的视角。

《大象 Thinking in UML》学习笔记(二)——建模基础

五、对象分析方法

一切都是对象
在面向对象方法里,一切有名字的东西都是对象,都应当使用对象的观点来看待它。

对象都是独立的
对象和对象之间都是天然独立的,只有在某个特定场景下,它们的某一个特定实例才相互联系在一起。

对象都具有原子性
无论在什么时候,在分析过程中都应当将对象视为一个原子,原子是个整体,内部不可分割,外部通过边界和其他对象对接。这种方式也叫做面向接口编程。

对象都是可抽象的
对象参与每个场景时都会展现其某一个方面性质,这方面性质都可以抽象出来。对象所参与的场景越多,其越具有抽象价值。

对象都有层次性
对象都是有抽象层次的,高层次描述粗略但适应范围广,低层次描述精确但适应能力窄。需要根据问题领域的复杂程度设定多个抽象层次并使用合适的抽象程度对象进行描述。

《大象 Thinking in UML》学习笔记(二)——建模基础