UML软件工程组织

软件工程中的数学思想——站在软件之外看软件
error.cao

何为站在软件之外看软件?在最近的程序人生的讲座、报道,谈及最多的问题就是站在软件之外看软件。

 内外的概念是一个物理概念,我来讲一个物理上的例子来理解如何是站在软件之外看软件:凡读此书之人,都知道爱因斯坦,也都知道爱因斯坦的相对论,如此足矣。大家都能理解我们生活在这个三维的空间,爱因斯坦的相对论补充了三维空间的理论,在此基础上添加了时间的第四维,作为常人无法理解时间一维到底如何被看及。

首先,我们知道复数表示论的四个象限,第一象限是正正象限,第二至第四象限都有虚轴;再看在三维空间上建立一个八个相空间,其中也仅有一个相空间是正正正的相空间。其次,我们看一个问题,台湾岛的海岸线有多长?我们根据地图,按比例测出一个数值来可以表示该海岸线的长度;我们也可以事必躬亲拿着米尺来量一下,我们会发现,我们测定结果比我们计算出来的大许多;为了精确起见,我们拿来厘米尺,再测量,又大了许多;再者我们使用游标卡尺来测量,我们会发现,我们测得的结果是我们根据地图测出来的几千万倍?为什么?原因很简单,在刻度的范围内,我们把曲线当成直线来测量了,再逐渐细化的过程中,问题被测定更精确,再精确测量结果的同时,我们发现真正测量结果是无穷大。奇怪?回到上面问题:我们为什么不能理解四维,有两个方面,一是我们始终站正的相空间上,二是我们拿我们认为最精确的刻度去度量空间。如果我们可以做到在空间之外看空间,那么我们可以把时间的概念引入,我们甚至可以从长度,宽度加时间来计算精确的体积(原始的体积定义是:长*宽*高),但有一点,因为精确的体积是无穷大?无穷大不能被理解,即真实空间不能被理解。好了,如此一点说明,你可能对我们理解时间的概念有所变更了(足矣),回到正题!

何为软件之外呢?

软件之外就是软件构架的思想,我们如何构架软件模型,一个问题--为什么软件人才流动如此让一个体制完好的公司处处面临危机--被提及时存在如下的问题:一公司的体制并没有完好,至少人力资源不体制不完好,二项目计划时没有考虑项目如此类的风险,三本质而又没有边际问题是企业文化不健康。在一个健康的体制上才容易构建系统的整体模型并易于实施。

软件之外是一个站在如何实施软件开发的新高度,如何度量项目的进度,我们有无一个标准来衡量?假如完全根据进度来实施将会如何----机械化。

一.在软件之外看软件什么

软件的实施需要工程化,而不是机械化,人是活动的,无法实施机械化,更何况软件的开发过程也是一个创造性过程。

再讲一个普通的例子,我在从事电力系统自动化项目实施时,有位自动化资深的客户给我讲了一个道理,他说:在世界上有两种人是推动社会进步的,一是勤劳而聪明的人,他在创造世界;一是愚笨而懒惰的人,他在要求别人创造世界。这样,自动化就出现了,它第一种人为第二种做的,但到现在也无法满足第二种人的需求。

这虽然是个笑话,但从其中可以体会到一个道理,在从事工程项目时有两个方面一个是客户的需求,一个项目实施者。

既然软件从无到有再到无的过程,被称为软件工程(将在第二章详细讨论),软件之外的问题也就是工程的实施者和软件的需求者。

先来谈软件的需求,在第二节,我们讨论了信息系统,作为目前的世界被称为信息的时代的世界,其信息的重要性是不言而喻的。我们构建一个系统,系统为之服务,服务者作为计算机所能提供的就是数据服务或数据化的服务。
在日常生活中,我们需要被服务的事物越来越多,而这些服务就是我们的需求,这些需求由系统来解决或提供,而这些系统向人们提供数据服务就是我们在工程中实施的对象。

那么,软件工程的实施对象从事什么样的服务。

一个事物被实施后,尤其是软件,它的目标就是人们为之的定义的功能,对于对象的本身称为操作,软件的操作就是自动地按照一定的逻辑来整理、分析和抽象数据。

软件的需求和软件的实施分开来谈是没有意义的,但作为理解上,一个大脑很难对两个事物进行同时分析。软件的实施是软件工程的整个过程,需求其实就是一个被服务的对象的思想或思想过程。

软件的实施就是把对软件的需求包装成软件的一个过程。

软件之外是什么?一是什么将被包装成软件,二是如何包装成软件。

二.如何看软件

如何"看"软件?这个"看"字包含有众多的含义。

首先,软件是虚的,是被比特存储的,不是使用显微镜就可以看见的,看软件分两个方面,一是看(观察)软件执行情况,二是看(分析)软件执行过程。

其次,我们还应该考察的是软件被构建的过程,也就是软件之外的第二个问题,在构建过程中有什么被记录,记录构建的过程的标识?

最后,软件被使用于何处,使用过程记录。

"看"软件的过程,是一个识别的过程,在识别的同时也还需要分析、记录、再分析、再记录等,若我们在参与软件的实施,那么这些分析记录的文档是不是软件的一部分。

当然是,但不是软件的执行部分,它是软件的服务部分! (其执行部分也是服务部分,软件的介绍将在第二章详细讨论。)

如何分析和记录软件的实施过程,UML提出"统一软件开发过程",对软件的实施过程进行了详细地定义和描述。

打开UML等图书,首先有一堆关于图的描述被说明,同样,UML的也是定义在各类图的基础上,但什么是图呢?

对于图,有两种解释,一是名词,说明一类(实体的)事物;二是数学概念,定义一类(抽象的)事物。名词是采用点线等方式描绘出的符号(说成符号也不大恰当);而数学概念是采用集合来定义的,描述各个元素之间关系的描述。
对于软件工程的实施,主要的是描述各个对象之间的关系,在第一节中,我们已经把事物对象描述为一个集合或一个集合中的元素,如此现在采用"图"来定义各个元素之间的关系最为切当。

三.什么是图

有序对G=(V(G),E(G))称为一个图,其中V(G)是一个非空的有限集。V(G)中的元素称为G的顶点,E(G)是V(G)中全体不同元素构成的不同无序对集合的一个子集,E(G)中的元素称为G的边。

前面已经说过,序对是一个关系的序,所以图的定义就变为:把集合中的元素和集合中各元素的关系描绘出来的图形的形式。

在图中,描述集合元素是对象的定义,而描述元素关系时是行为的定义。所以图也可以定义成:把对象和对象行为描绘出来的图形的形式。

如此,就明了了,图就是对象(采用一种符号表示)和对象行为(也采用一种符号表示)按照一定的逻辑关系组成的符号(组)。

(其实,在数学上若想搞清楚图的定义首先必须搞清楚群的定义,因为图的同构在群的基础说就简单多了,至于群,在本书上没有介绍,大系统的系统分析员或研究数据结构的读者可以参考一下其相关资料。)

对于图还有如下定义:我们称

V(G)是图G的顶点集(元素集),E(G) 是图G的边集(元素关系集);在不至于混淆的情况下,有时分别用V和E表示G的顶点集和边集。

G的顶点数|V(G)|有时也称为G的阶(对象元素的个数),通常用p来表示;G的边的数目|E(G)|一般用q表示。

为了方便,我们通常用uv来表示边{u,v}(其中u,v是V(G)的元素)。

边{u,v}是一个序对,或我们称为关联(该词不是数学术语),该关联的意思是两的元素间的有关系。有图为有向图时,该关联可以表示元素间的所属,但该处的有序对仅表示两个元素间的相关联的一一映射,若元素间存在多对一的映射的话,即在面向对象的分析设计中存在一个对象拥有多个子对象。

一个对象是一个类元(class unit)的实例,一个类被多个子类继承,每个子都可实例化时,其分析类元的"图"在类元(一个元素,就是图的一个顶点)上将有多边,这个边就是我们描述图时称之为的度。

如果e=uv∈E(G),则说e关联(该词是数学术语)u和v,称u,v分别为e的端点,并且称这两个顶点是相邻的。在这种情况下,我们亦称v是u(或者u是v)的一个相邻者。

描述相邻者时,其不一定有关系,若称为相邻关系也为关系的话,那么,这个相邻关系可能会体现的在时间顺序上。事件或触发过程将依此关系为依据。

对相邻关系元素的取值,在数学上具体定义如:

设u∈V(G),u的邻域,记作Ng(u)(在不至于混淆的情况下记为N(u)),它是G中全体相邻于顶点构成的V(G)一个子集合,即
 
 与G的同一个顶点相关联的两条边称为相邻边。

和同一个元素发生关系,作为元素本身肯定是被触发的,无论关系的紧密与否,这和描述对象无关。

在图的定义中,如果我们删去"边必须相同的"的限制,则导致的结果称为多重图;连接同一对顶点的两条或者更多条边(但是有限的)被称为多重边。

如果我们再在多重图中删去"边必须连接不同的顶点"的限制,即允许有自环的存在,则由此导出的结果称为伪图。

图的定义在日益被描述清楚,如何对图的具体定义,对图的定义,我认为无须具体了解,在系统分析中由于人们对UML认识和使用的日益广泛,于是图示来描述问题被广泛采用,其实在对事物(系统)分析最被人接收的还是图。
对图的定义和实质地认识,我认为还是必要的,如果我们先来描述UML语言,再来描述图(即便是UML图)我们还有许多疑问,这些疑问在那里?对图能描述什么?如何来描述?图元间的关系如何?当然,对于那些简单的图来说,自然没有研究如此之深的必要,但对于大系统必要使之。

 从简单图到多重图是一个拓扑的过程,但对于系统来说是一个拓展的过程,从建立简单的模型到大系统的模型的建立的过程。

若系统内模块存在同构或同胚(概念将在下面叙述)等情况,其模块的构建就存在封装性,就有必要对其基础的模块进行封装以便重用。

在图的定义里,如果我们把"无序"两个字改为"有序",便得到所谓的有向图的概念。更确切的讲,所谓的有向图D是一个有序对(V(D),A(D)),其中V(D)是一个非空有限集, V(D)的元素称为顶点,A(D)是由V(D)中的元素组成的一些有序对构成,并且要求:
  ①构成有序对的两个元素不同;
  ②任何两个有序对不同。

 显然,A(D)是一个有限集。A(D)中的元素称为弧。

在不至于混淆的情况下,我们通常将弧(u,v)(u,v是D的顶点)用uv来表示。如果e=uv是D的一条弧,则称u和v是相邻的且称e是从u关联到v;我们也称顶点u控制顶点v。形如uv和vu的一条弧称为对称弧。

 设D是一个有向图,它的逆仍是一个有向图,记为D',D'的顶点集为V(D')=V(D),弧集为A(D')={vu;uv∈A(D)};有向图D的基础图是指向无向边来代替D中每一条弧而得到的图或多重图。 一个图的顶点为位置无关,图中两个顶点之间的连线与它的长度,曲直或者形状也是无关的,这要考虑的是两个顶点之间是否有线相连,这正是所谓两个顶点之间的拓扑性质。正如此,有些表面上似乎完全不同的图,却是相同的。于是我们称这两个图是同构的。

在这里,我们将需要认识到,建立模型时由于各个人的知识范围,认知渠道极其经验等方面的影响,所建的模型可能在表面上完全不同,但表达的内容和表述的形式却是完全相同的,关于图的特性,比如说同构等,将是对模型的基础。

图同构的定义

设G1,G2是两个简单图,图G1与G2被称为是同构的,写着G1≌G2,如果存在一个从V(G1)到V(G2)之间保持相邻性的1-1映射σ。就是说,在V(G1)到V(G2)之间存在一个1-1映射σ,使得对于Ⅴu,v∈V(G1),uv∈E(G1),当且仅当 σ(u)σ(v)∈E(G2)。

我们把从V(G1)到V(G2)之间的保持相邻性的这个1-1映射σ叫做图G1到图G2间的一个同构映射。

判断两个图是否具有良好的实际应用的背景。最直接的应用就是应用于系统工程中,判断两个系统是否同构,在这个系统上建模中具有非常使用的价值。另一个直接的应用是在计算机(主要是软件工程)中构造某种类型的图(比如UML的各类图)时,排除同构图。当然判断两个图的同构是非常困难的事,但UML的各类图中,一般都较为简单,当然我们不能阻止你构建一个庞杂的系统模型。

当然对于图应用并不仅仅,在判断两个图的是否同构上,另外,我们通过对图的认识,建立一个合理的模型,比如一个基图就可以表述完整的,你却采用了多重图来描述,在某些方面会给系统带来额外的负担。

设v是图G的一个顶点,我们把关联的顶点v的边数目称为v的度数,简称度,记为d(v)。何谓度,度即是集合中关系(数),在前面我们说过,关系是笛卡儿积的一个子集,这个子集就是边,其元素的个数就是度。图G的最大度和最小度是指图G中度数构成的集合的中的最大值和最小值,分别用Δ(G)和δ(G)表示。

四.图研究什么

在面前图的研究领域上存在一个问题:在使用计算机构造图时会出现同构现象。

一般情况下,以何种方式?构造什么样的图?图本身就是一种可以能被描绘成图一个集合,在软件领域,我们关心的基本上是序列(集合),这个问题在建模表现得很突出。

图有两个方面,一个是边,一个是顶点。

顶点是没有序列的概念的,那么的边的序列如何定义?是方向?

在图上,我们一般是采用研究图的(某个顶点的)度数来研究图的构造的。以下看一下度的序列。

设图G为简单图,则:
  ① 0≤di≤p-1,I=1,…,p;
  ② 在d1,d2,…,dp中至少存在两个值相等。
  关于①的证明由图的定义易知,关于②证明由①易证。

设π=(d1,d2,d3,…,dp)是一个非负整数的单调递减(或单调递增)序列,如果存在一个p阶简单图G,满足π(G)= π,则称π是可图序列的,或简称π是一个图序列,并称G是π的一个实现。

在图的序列领域中主要研究如下问题:
 
 第一:图序列的基本特征是什么?即一个非负单调递整数序列π=( d1,d2,d3,…,dp)是图序列的充要条件是什么?

第二:π=(d1,d2,d3,…,dp)是一个图序列,那么π对应的实现有多少?

第三:如何把图序列π=(d1,d2,d3,…,dp)对应的实现全部构造出来。

对于研究的问题,第一个问题是图论实施的基础,我们来考察系列的队列,是研究有向的关系(可以看成采用序列表示的事件触发的关系),设一个序列是图序列,但该序列不是用来表示我们要研究的图,而研究我们图的元素关系的图。

对于第二个问题,则是我们开始关心的问题,对于一个图序列实现什么是至关重要的,建立一个关系,其关系到几个元素,关系是什么?比如一个人结婚,我们找到一个关系:请亲戚朋友吃酒,关系几个元素(来那些人),各个关系什么,有的是亲戚有的是朋友。

对于第三问题是实质性问题,就是我们需要解决的问题,如何把序列(对应的元素或关系全部构造出来!)的实现(关系的构造图)全部构造出来。

下面来研究一下图系列的基本性质:


五.图的同构与拓扑



 六.树

树和数据结构,树是简单的图,学过数据结构的就知道类似"两叉树"的理论,简单地讲树就是在图的所有结点中,任意两个结点之间只有唯一的一条简单路径的图。

在自然界中,树是一中根在下的有枝的植物,至于植物它的枝是梯形结构的,我们在图论中描述树时,我们常常把根画在上面,而把"枝"画在下面。

树的术语和特征(采用语言的描述时称为语义)

 

版权所有:UML软件工程组织