数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 9623|回复: 14

软件工程中的数学思想(作者error.cao)[推荐]

  [复制链接]
发表于 2004-2-27 18:31:20 | 显示全部楼层 |阅读模式

本帖内容来自:51CMM.COM,适合数学爱好者与计算机专业人士浏览。

[B]软件模型[/B]

一. 软件外的感想
  我记得小的时候和伙伴们一起玩泥巴团,有一种想当建筑师的想法,当时思想幼稚,总是把自己和建筑师们排在一起。
  对于游戏的本身,我是建筑师是没有错的,但是,我的功用仅仅在游戏的本身中才有"建筑师"的身份。若对于文学者来说,在书中描述的就是游戏,但读本书的人,并不拿本书当一本描述游戏的书。
  年龄让我的思想日趋成熟,一种一种的感悟在生活的过程中产生。直到我从事软件行业,才发现自己好象又回到了孩提时代?quot;玩泥巴团"游戏,在糅合着一些泥巴(软件上可能是代码),做一些看上去象"建筑"的东西。
  西方的软件工程化的思想常常以建筑的体系来描述软件开发的过程(UML的三大鼻祖如是用法:从狗窝到大厦),我并不同意如此的比喻,为什么?一个大厦建好后,其框架是不能更换的,在软件开发的迭代的过程中,其构架是变的,一个是活动的(软件过程),一个是不活动的(建造过程),但也的确没有更好的例子来说明软件工程化及其实施的过程。喜欢经济学的朋友一定喜欢张五常先生的散文式的经济学论文,中国人说他是中国的"科斯"。我就是认为该说法钻进一个套子里,何谓中国的"科斯"?在思想上我们在糅泥巴,即希望张五常先生是"科斯",但不可能,就加上"中国"吧。
  一个问题(软件以建筑描述或定义)就暴露了,软件工程在描述上并没有建立一个合理的定义机制,我们依然存在着糅泥巴的作风----以"不完全的构架"代替"完全的构架"。但如何区分真正的建筑和软件的"建筑",artifacts该词是用来描述软件的,从此在定义上我们可以分开软件(是指软件制品)和建筑物,一个是"品",一个是"物",从汉语的角度就很容易理解了。
  软件的一个新事物,从一个抽象化的高度来描述它,自然是和用例(using case)的共性,目前用例(used case)最多的就是建筑及其建筑学。为什么可以从一个抽象的角度描述它(一个新事物:软件的构造)?
  孩提时代的玩泥巴团是对建筑框架的模拟,在模拟一个建筑的构架,建立一个物理模型。而我当时是一个"构架师"(不完全构架师,因为构架师还要制作图纸)有了建筑师的的想法。软件建模也对一个真实世界上的事物建立一个物理模型,这个物理模型是软件制品(artifacts)的系统构架或是一个软件制品。
  如上的说法何以存在疑义?
  这个问题就是出在语义(semantics)上。
  首先抛开我认?quot;我就是建筑师"的想法。
  构造一个建筑物和玩泥巴团的相似之处是它们有共同的目标:建一个建筑(模型也是一种建筑)。采用的方法不同,材料不同,可使用性也不同。但更深一步说明,按照一个建筑物的图纸来建一个模型的话,在视图上创造了一个真实的物件,这个物件就是我们将要描述的真实的事物。
  物件和事物的概念就是以上"品"和"物"的概念。在软件建模上我喜欢两个词artifacts(制品)和system(系统)可以从中抽象出其的意义。
也许需要思考,软件模型或模型的模型被描述时,需要什么样的描述符号?
  首先从模型的概念来回答如是的问题。
二. 模型(model)
  模型这个词是相对于system的,是一个从system抽象的简单实体,以便描述该system。在广义上,模型还可以做动词解,做动词时,模型表明、指出某事物是什么东西,有何功用。为了研究其共性,列出模型三个特征:
  (1)它是现实系统的抽象和模仿。
  (2)它由那些与分析现实系统有关的元素组成。
  (3)它表明这些元素之间的相互关系。
  系统模型(system model)可以由多种方法求解,主要的是数学法。数学法不能说是一个方法,应该是一种行为,它可能包含操作、属性和状态。数学法分析问题一般是分析、归纳、提取、计算、证明和总结,其中最为重要的是描述一个合理化化的过程。
  单词"model"在中文中有两个含义:一是模型,名词;二是建模,动词。但在使用上常用"modeling"来表示建模。
如何合理解释"model"还是从孩提时代的游戏开始说。
  现在建筑上的"七宗罪"说法,我颇同意。关于国内的建筑(主要是城市化建设)问题主要出在规划上,城市建设规划有问题吗?
  在上面刚提过关于用建筑来定义、描述软件工程的,其实有两个问题,在城市建设方面,某一个建筑物就是模型,是一个模型元,若把整个城市当成模型的话,那么某个建筑物就是模块。
  既然可以把某个建筑物当成一个组成模型的最小元,我们就不可以拿之和软件的一个system比,虽然这个system最终是一个artifacts,但从建模方面考虑,必须当之为一个system。
  关于系统化的建模存在那些不合理的方面,软件模型是一个模型系统实践的过程,将有一种模型设计迭代的方式代替原始的一步到位的方式,在软件的建模上称将统一建模过程代替瀑布法建模过程。
  "七宗罪"是目前城建规划不合理的几个方面,虽然,"七宗罪"说法并不一定符合整个城市化建设,但视之、分析之会得到什么结果?是模型不合理还是建模过程不合理?
  第一城市化建设贪洋求大,盲目追求国际大都市,比如说一个县政府在此县城里建了一个10万平方米的广场。考察软件模块,本也希望该软件做出来后可以包罗万象、可以及时跟上时代潮流,所在软件的接口部分庞杂而混乱。
  为什么产生如此现象,在建模上有没有问题?若创建了模型和计算过数字(把模型的某些数据量化),该问题基本上不会发生。你愿意看见一个极不协调的模型?所以模型可以让你清楚看见思想构架出的实例。
  第二缺乏统一协调机制,重复建设严重,在胶东半岛的青岛、济南、烟台有一个机场就够,却建了三个。考察软件模块,如从同一个地方读数据因为两个模块可能不是一个来写,两个人就会写两个模块来解决该任务。
  建模问题?若建模了,大家都从设计的模块上来构架开发程序,大家知道程序采用统一的读数据方式,根本就不会重复"建设"。
  第三领导以权带法(标准),在建设项目时根本就不会关心该被建设的区域有没有被规划,领导说可以建就可以建。好了,如此问题在软件开发上好似不存在?一个项目,该项目的负责人因思想偏颇而让项目偏离原先的规划,由于没有讨论(项目负责人认为他的想法足已),项目无效。
  若使用建模,或更新建模,我们就有一个整体的计划。这个整个的计划一个主轴,该轴不是由某个人的想法的变化而变化,该变化一定参与讨论(更新已建的模型)。
  第四决策不当,不符合规划标准。该问题很简单,若建模型了,模型没有建对。做一个一些不符合规范的模型,该模型上构架事物又如何能正确呢。
  五是领导懂动科学。城市规划建设无方向性和前瞻性。作为软件开发者存在什么样的问题,现在做的程序一定要驾御现在的应用之上,一定需要的是前瞻性,为将来的软件升级做好适当准备。
  在软件的设计阶段,仅仅需要讨论的就是如何建模,因为我们有了模型了,才好在模型上进行构架软件本体(所以台湾把软件叫软体也是合乎道理的)。
  六是风景区开发无序。不是风景区开发无序存在问题,什么地方开发无序它都存在问题。有些人说浮沙之上不能筑高台,但若基础连浮沙都没有又如何筑台。无序的开发其部分难道不是在空之上筑台。
  七是缺乏有效的监督机制。法不是没有,但不执行你也没有办法,因为监督体制没有,其法也形同虚设。
  在此讨论了,如此没有建模带来的坏处,倘若建立简单模型呢?在软件实施时一定需要捡漏补缺。
  如此事实较为多,可以采用软件开发标准来按照逻辑开发软件产品,但根据SW-CMM(Software Capability Maturity Model)或UML(Unified Modeling Language)等开发过程(或其他什么过程)来实施时,虎头蛇尾,执行一半就不再执行了,麻烦!?
  UML就是将system的所有元素和元素的关系模型化,同时也包括对system的理解,构架和实施的模型化。如何描述该system的模型、模型元素、元素关系…。
  依然从城市化建设来谈。
  城市化建设有一点需要认识,城市化建设中有哪些建设是被包罗的。
  描述一下:学校、小区、马路、公园…
  给个城市化建设的具体描述:
  城市化建设将包含如下部分<<>>{学校、小区、马路、公园…},何以描述,该方法是采用数学上的集合描述法。城市化建设就是如上所有"元素"的建设的"集合"。
  模型元素的关系<<>>{模型关系描述一:在某某小区处建一个广场,该广场大小符合该处居民人口数量,一些设施符合该处居民的生活习惯。};{模型关系描述二:在某某公园门前建一条马路}…
  于是乎,便可以在纸上画出待建建筑的分布图,可以画出效果图,也可以根据勾画出的图形采用积木搭建一个模型。有了这个模型,可以看出该片建设的蓝图,而且模型产生的效果,清晰、直观,便于分析、修改和重构。
  如何描述这些模型元素和元素的复杂关系,而且描述对象和采用的描述的文字应该能被所有围绕模型工作的人识别和理解。为此,从最根本的数学语言入手,彻底了解模型语言和建模方式、方法。









[此贴子已经被作者于2004-2-27 16:47:55编辑过]

 楼主| 发表于 2004-2-27 18:32:39 | 显示全部楼层
三.模型元素的集合(set)和关系(relation)
  模型元素的集合和关系就是从数学上的集合和关系演化迩来的,如此来说明模型元素间的表述方式。
  数学间如此定义上述概念
  集合:一个集合是一些对象(objects)的整体。也可以说集合罗列了一些对象。
  序列或数组:和集合不同,序列(或数组(array))要考虑次序。也可以说序列是有次序的集合。
  集合与集合、集合元素与集合元素的关系:关系是有序偶(说明关系发生在两者之间,若在三者之间发生关系,则由两个关系合成)的集合。
  函数:函数是关系的一个特例。即给集合X的每个元素赋给集合Y的一个(或多个)元素。软件开发者对于函数的概念是一个操作过程,对一组地址或数字的操作方式、方法或过程。这个概念不矛盾,集合X元素(一组地址或数字)赋给(如何赋给:操作方式、方法或过程)集合Y(另一组地址或数字)。
3.1集合
  集合的概念对所有的数学和数学的应用都是基本的。
  一个集合简单的说就是一些对象的整体,如果一些集合是有限的也不是太大,我们可以用列出其中的所有元素来对它进行描述。
  在软件的开发过程,我们若是采用面向对象的方法,则在初始化对象的期间需要罗列各个对象的一些属性、操作,该属性和操作的表示,我们一般采用罗列的方式。
  该罗列的方式就是集合的表示法。
  例如:
  A={a, b, c, d}
  描述一个有四个元素a, b, c和d的集合。此时,可以把a, b, c, d四个元素更换为四个对象,即集合表示为:
  A={对象a, 对象b, 对象c, 对象d}
  即说明了要描述A,就必须对A 内的四个对象进行描述。当然四个对象本身还含有不同的属性和操作。该处又如何表述?
  假如,对象a={属性a1,属性a2}
  对象b={属性b1,属性b2}
  我们可以如下描述
  A={对象a={属性a1,属性a2},对象b= {属性b1,属性b2}, 对象c, 对象d}
  此时,是否有点象给对象进行初始化了?
  但却不是(为什么,读者可以自行考虑)。
  一个集合本身由其元素确定,而与元素排列次序无关。这样,A也可以表示成为
  A={对象a, 对象b, 对象d, 对象c }
  组成集合的各个元素是不同的。虽然为了某种原因(比如该对象被两次或多次初始化),表中元素可能有重复,集合中每个元素只出现一次。由此,我们也可以把A写为
  A={对象a, 对象b, 对象c, , 对象c, 对象d}
  如果集合很大、无限大或该集合无法确定的大小,我们可由列出其元素具有的必要的性质老描述它。
  例如:
  B={x| x 是大于10的整数}
  规定B是由所有的大于10的整数组成,即是,B由11,12,13,…等组成。此处,是成员的必要性质是"大于10的整数"。注意性质在垂直短线 | 后。
  在构建一个虚拟对象的时候,比如构建一个抽象类(abstract class),期间我们不能确定该对象的大小,因为其被继承性是要决定该对象的一些必要的性质,子对象在继承该基对象后,将拥有基对象声明的"必要的性质"。
  如果X是一个有限的集合,令
  | X |=X中元素的个数
  给出集合X的如式(A或B)那样的描述和一个对象x(比如对象a),我们就可以断定x是否属于 X。如果X的描述如A那样简单,一眼就可以看出来,如果如B一样,我们还要检验x是否具有列出的性质。如果x是在集合X中,我们写为x ∈X。
  没有元素的集合称为空集。
  既然是空集,在软件上应该是没有描述的对象了,并非如此理解,我们可以定义一个对象,该对象没有内容,由于没有内容,固然就不能实例化
  何为实例化?
  如,我们定义A如下
  A={对象a, 对象b, 对象c, 对象d}
  将A表述为
  城市化建设={学校、小区、马路、公园}
  我们将它表述为一个事实
  A市的城市化建设={A市第七小学学校、教育新区小区、教育新区路马路、教育新区休闲式公园}
  这个"A市的城市化建设"就是"城市化建设"的一个实例。
  若A为空集时,该对象的描述是不能被实例化。
  不能被实例化的类(对象的描述)可否被继承?
  如果两个集合X和Y有相同的元素,说两个集合相等,记为X=Y。另一个说法是,如x ∈X那么x ∈Y,且如x ∈Y那么x ∈X。
  由于X的任意元素都在X中,任何的集合X是其本身的子集。如果X是Y 的子集,但X≠Y,我们说X是Y的一个真子集。
空集是任何集合的子集。
  一个较为奇怪的事情产生了。
  何谓子集,子集的性质在父集合中都完全拥有,那么从一个父类(此时我应该提醒大家,看本书的人一定要学习过面向对象的编程)继承而来的子类,是否完全拥有父类的全部性质,好了,此时,你是否可以说父类是子类的一个子集。
  在面向对象的编程上,还有一个类从多个父类上继承其性质,此时对于该从多个父类继承的子类的理解还有问题吗?
  我们来表述它:
  子类={父类1,父类2,…}
  最为精确的说法为
  子类(属性、操作)={父类1(属性、操作),父类2(属性、操作),…}
  空集又如何说,一个"莫须有"对象。我们还不如理解从一个"莫须有"类(空集)上继承就是创建一个新类。
  此时,我必须声明一个概念,此时所说的集合虽然是数学上集合,但应该理解为对对象事物"概括性"地描述。
  给定集合的X和Y,有各种方法可以把X和Y联合成一个新的集合。
  集合X∪Y={x | x∈X且x∈Y}称为X和Y的并集。并由属于X或Y的所有元素组成。
  何以有"并集"的性质,包(package)是一个例子。
  集合X∩Y={x | x∈X且x∈Y}称为X和Y的交集。并由同时属于X或Y的所有元素组成。
  如果X∩Y=Φ,说X和Y不相交。令S表示一些集合的集合,如S中不同的集合X和Y都是不相交的。
  何以有"交集"的性质,接口(interface)是一个例子。无论是包还是接口,我们来描述它,是需要考察它的功用,固然,我们需要一个良好的性质机制,更容易考察我们描述事物的性质。
  集合X-Y={x | x∈X且x¢Y}我们称为差集,由所有属于X但不属于Y的元素组成。
  有时我们讨论一些集合,它们全部是某些集合U的子集,此集合U成为全集。全集U应该在叙述中明确地给出或推断出来。给出一个全集U或U的一个子集X,集合U-X称为X的补。
  集合的"并"、"交"、"差"和"补"是集合的几大运算性质,若此处不是考察面向对象的软件的设计,而是描述比如数字系统的运算,那么关于此的说明就会很多。
 楼主| 发表于 2004-2-27 18:41:26 | 显示全部楼层
3.2序组
  一个序列(或有序组)是一个表,要计及次序。
  序组,我们使用最多的地方就是定义数组,数组的使用有很多方面,在计算机的硬件方面,比如内存地址,硬件中断等。
  在计及次序的概念上,有个最为重要的概念就是事件(event),事件的产生是由约束条件的触发,当条件满足时,事件就会产生。
  事件的产生将驱动消息机制的应用程序动作,从而使得"当条件满足时,计算机按照指定的指令进行执行"。
看一下数学概念上的序列(在概念上都是一致的)。
  如:
  {0 .1, 2.0, 3.0,4.0, … }
  就是一个序列,注意此处的次序(依次增大)是最重要的。
  如果s是一个序列,我们常把其第一项表示为s1(如上序列的值0.1),第二项表示为s2(如上序列的值2.0),等等。一般地,sn表示序列的第n项。我们把n称为序列的下标。
  序列最重要的两个形式是增序列或减序列。
  所谓的增序列或减序列只是相对于序列中元素的大小而言的,若元素是不可比的,又如何表示?该问题并不存在,序列讲究的是次序,即所有的元素都是可比的(对于有些元素我们仅仅关注它的标识,观察它的标识是否具有次序性)。
  如果对于所有的n,有 Sn≤Sn+1 序列s 就是增序列,如果Sn≥Sn+1则称为减序列。
  从已知的序列形成一个新的序列的一个方法是,只取原序列中的某些些项,而保留各项的次序不变。所得次序称为一个子序列。
  以上大家关心的是序列的定义,并非所有的序列都如上描述的那样,好似没有边界,序列和集合一样,具有有限的序列。
  所谓的串就是一个有限的序列。
  那么,在序列X上的一个串是由X中的元素组成的一个串。
  在此处不再累述,序列的有限性和无限性的意义,其等同集合。
3.3关系
  关系可以想成一个表,其中列出一些元素和其他元素之间的关系,见下表

  如上的关系可被一个序偶集合描述
  序偶集合:(公园,人)=> 关系:公园是人的休憩场所
  从场所被人使用的角度,元素与人的关系是一个描述元素与人关系的元素。
  一个从集合X到集合Y的(二元的)关系R,是笛卡尔积X×Y的一个子集,如果(x,y)∈R,我们写为xRy且说x和y有关。
  渐入复杂的描述。
  我们更改上述的表来说明问题。

  记录笛卡尔积X×Y ={(公园,树),(公园,车),(公园,人),(马路,树),…(小区,人)}
  关系R={(公园,树),(马路,车),(小区,人)}
  注:关于各元素间的关系,在UML类元的"关系"将有详细说明。
  集合 {x∈X| 对于有些y∈Y,(x,y)∈R}称为R的定义域。
  定义域其简单表示是自变量的变化范围。
  表示在对象上的结果,对于序偶(公园,树),树和公园都一个对象,这两个对象间的关系为公园是树的生长场所,假如公园是自变量,符合关系"树在公园的数量",随公园不同,树的数量也不同。那么这个关系的定义域就是这个公园。
  集合 {y∈Y| 对于有些x∈X,(x,y)∈R}称为R的值域。
  值域就是应变量的变化范围,上述例子的树的数量就是值域。
  如果一个关系由一个表给出,则定义域表的第一列的元素组成,而值域由表的第二列元素组成。
  如果集合或序列(有序的集合)的表述是完整的,就是说我们在描述一个对象时,对该对象的一些特征描述是完整的,不遗漏,在对该对象的建模时将会合理考虑接口、扩展机制和相关的约束条件。
  可以把某些集合上的关系画成一个有向图,也称为关系图(图的定义我们将在图论中描述)。要画出一个集合X上的关系的关系图,首先,有顶点(或结点),表示元素。箭头表示关系。(关于图上如何描述该关系,也将在图论中具体定义)
  集合X上的关系R,如果对于每个x∈X都有(x,x)∈R,则称为R是自反的。
  集合X上的关系R,如果对于每个x,y∈X,如(x,y) ∈R必有(y,x)∈R,则称为R是对称的。
  集合X上的关系R,如果对于每个x,y∈X,如(x,y) ∈R且x≠y必有(y,x)¢R,则称为R是反对称的。
  集合X上的关系R,如果对于每个x,y,z∈X,如(x,y) ∈R且(y,z)∈R,必有(x,z)∈R,则称为R是传递的。
  如此定义的关系,是较为复杂的,首先是该关系R的两组元素是相同的,或是描述一组内部元素的关系,首先集合上的元素可以表示自变量也可以表示应变量。在第三章描述的UML中定义的关系,并没有关注对象(或类元)间的如此复杂的关系。但关系是什么样的性质,将关联到各个对象被触发的机制。
  对象的事件机制将使用关系的特性,比如传递性、反对称性等,虽然该特性是认为在事件机制上设定的,但这些特性将有助我们设计模型。
  关系可用于把一个集合的元素排序(当然不仅是排序)。
  例如,整数集合上的关系:
  (x,y) ∈R且x≤y
  把整数从小到大排序。注意如此的关系是自反的,反对称的和传递的。我们称这种关系为一个偏序。
  即集合X上的关系R,如果是自反的反对称的和传递的,则R称为一个偏序。
  设R是集合X上的一个偏序。如果x,y∈X且x≤y或y≤x成立,我们说x和y是可比的,如果x,y∈X且x≮y或y≮x,就是说x和y不可比。如果X中的元素都可比,那么我们称R为全序。
  这个概念较难理解,我们考察对象时,一般记如上的关系,来比较说明偏序和全序。
  一个数学例子,关系R为"大于等于"。
  设集合X={2,3,4}
  则 关系R={(2,2),(2,3),(3,3),(3,4),(4,4),(2,4)}
  考察自反性:(2,2),(3,3), (4,4) ∈ R
      反对称性:(2,3)∈ R 而 (3,2) ¢R
  考虑传递性:(2,3)(3,4) ∈ R 而 (2,4) ∈ R
  考察X其元素,X内的所有元素是可比的。故关系R是全序。
  在计算机的数字系统存在的序列,若关系存在一般皆为可比。
  在但面向对象的设计上,其描述对象的集合一般不可比的。故偏序描述的是对象间关系,一般为事件关系。
  如一个事件例子
  设集合X={开始状态,运行状态,损坏状态}
  关系为触发R={(始,始),(始, 运),(运, 运),(运, 坏),(坏, 坏),(始, 坏)}
  考察自反性:(始,始),( 运, 运),(坏, 坏)∈ R
  反对称性:(始, 运)∈ R 而 (运,始)¢R
  考虑传递性:(始, 运),( 运, 坏) ∈ R 而 ( 始, 坏) ∈ R
  考察X其元素,X内的所有元素是不可比的。故关系R是偏序。
  全序是偏序是次序的序列表示。如何说法,偏序则是常常表示对象的集合,而偏序表示的对象含有的性质,如时间次序,体积大小的就具有可比性,我们在描述对象时,该性质(比较出的结果才是我们需要的)。
  在对集合的学习中,如此掌握集合即可,在描述(面向的)对象的关系,或(面向的)过程的关系,集合原理是基础性,我们考察集合原理结果是把对象(们)拿到集合论里来描述、分析,如此就简单多了。
  继续考察集合内元素的关系。
  X上的一个自反的,对称的和传递的关系称为X上一个等价关系。
  若给出一个集合X上的等价关系R,我们可以由把X中的元素按相关来分组,以进行划分。互相相关的元素可以认为是等价的。
  得出如下理论:
  令R是集合X上的一个等价关系。对于每个a∈X,令
  [a]={ x∈X|xRa }
  则
  S={ [a]|a∈X } 是X的一个划分。



[此贴子已经被作者于2004-2-27 11:56:51编辑过]

 楼主| 发表于 2004-2-27 19:47:11 | 显示全部楼层
3.4关系矩阵
  表示从X到Y的关系最简单的方式是使用关系矩阵。计算机可以采用如此的方式对数据及关系进行分析。
我们用X中的元素来标志行,用Y的元素来标志列。如果有xRy,我们就令x行y列的元素之值为1,否则为0。这个矩阵就称为关系R的矩阵。
  在数学表示法上矩阵是一个中括号,按照次序放置好标志行和标志列的元素,但在软件实现上更倾向于采用循环方法。
3.5关系数据库
  关系数据库是从二元关系拓展而来的,一个表有n行,对应的关系我们称为n元关系。
  一个数据库是由一些计算机管理的记录的整体。
  关系数据库有以下几种简单的操作:
  选择:从多元关系中,按某个元素或某几个元素的性质,通过连接的形式,表达出与之有关的所有元素。
  投影:即关系的映射。一种关系被表达出后,一个元素通过这种关系连接(元素间的连接)到另一个元素。
  连接:即关系的连接。将相同的、相似的,也可以是不同的元素间关系,连接在一起,形成一种新的映射(关系将更复杂)。
 关系数据库的操作是对m(行数)个n(字段数)元关系的重新定义!
3.6函数
  一个函数是一个特殊类型的关系。
  在程序设计语言上,从汇编开始我们就开始注意"函数"的功用,而程序设计上的函数并不同该数学表示法,在程序设计语言上的函数是"数学表示法"单从关系或多从关系的处理集合。
  考察一下数学上具体定义:
  一个从X到Y的关系是笛卡尔积X×Y的子集,且有
  R的定义域={ x∈X | 存在y∈Y,使(x,y)∈R }
  如f是一个X到Y的关系,为使得f也是一个函数,f的定义域必须等于X,且如有(x,y')在f中,则必y = y'
  一个从X到Y的关系f是一个有下列性质的从X到Y的关系:
  1.F是定义域就是X
  2.如有(x,y),(x,y') ∈f,必有y=y'
  一个从X到Y的函数有时表示为f:X->Y。
  如果x是一个非负的整数,y是一个整数,我们定义x mod y为x除y的余数。
简单地说,在定义域上定义一个值,在值域上可以有值(通过相应的关系)对应。此处需要注意,在软件系统上系统的元素(可称为模块)并非定义域或值域模式,需要抽象化地理解。
3.7小结
  根据目前的教育情况,在国内的从事计算机软件开发的人士,在数学水平上都不甚高,在项目实施中对项目的分析就缺乏一种工具,一种分析手段;而且是一种非常重要的量化手段,固然,在此我较为详细介绍数学中最简单的集合的概念,并通过软件模型对(面向的)的对象进行说明。

参考资料:
熊全淹 《近世代数》 武汉大学出版社
Richard Johnsonbanugh 《Discrete MatheMatics》 电子工业出版社
<日>儿玉之宏 等著 方嘉琳译 《拓扑空间论》 科学出版社
<美>Date C.J. 著 孟小峰等译 《An Introduction to Database system》机械工业出版社
 楼主| 发表于 2004-2-27 20:25:17 | 显示全部楼层
[B]站在软件之外看软件[/B]

  何为站在软件之外看软件?在最近的程序人生的讲座、报道,谈及最多的问题就是站在软件之外看软件。
  内外的概念是一个物理概念,我来讲一个物理上的例子来理解如何是站在软件之外看软件:凡读此书之人,都知道爱因斯坦,也都知道爱因斯坦的相对论,如此足矣。大家都能理解我们生活在这个三维的空间,爱因斯坦的相对论补充了三维空间的理论,在此基础上添加了时间的第四维,作为常人无法理解时间一维到底如何被看及。
  首先,我们知道复数表示论的四个象限,第一象限是正正象限,第二至第四象限都有虚轴;再看在三维空间上建立一个八个相空间,其中也仅有一个相空间是正正正的相空间。其次,我们看一个问题,台湾岛的海岸线有多长?我们根据地图,按比例测出一个数值来可以表示该海岸线的长度;我们也可以事必躬亲拿着米尺来量一下,我们会发现,我们测定结果比我们计算出来的大许多;为了精确起见,我们拿来厘米尺,再测量,又大了许多;再者我们使用游标卡尺来测量,我们会发现,我们测得的结果是我们根据地图测出来的几千万倍?为什么?原因很简单,在刻度的范围内,我们把曲线当成直线来测量了,再逐渐细化的过程中,问题被测定更精确,再精确测量结果的同时,我们发现真正测量结果是无穷大。奇怪?回到上面问题:我们为什么不能理解四维,有两个方面,一是我们始终站正的相空间上,二是我们拿我们认为最精确的刻度去度量空间。如果我们可以做到在空间之外看空间,那么我们可以把时间的概念引入,我们甚至可以从长度,宽度加时间来计算精确的体积(原始的体积定义是:长*宽*高),但有一点,因为精确的体积是无穷大?无穷大不能被理解,即真实空间不能被理解。好了,如此一点说明,你可能对我们理解时间的概念有所变更了(足矣),回到正题!
  何为软件之外呢?
  软件之外就是软件构架的思想,我们如何构架软件模型,一个问题--为什么软件人才流动如此让一个体制完好的公司处处面临危机--被提及时存在如下的问题:一公司的体制并没有完好,至少人力资源不体制不完好,二项目计划时没有考虑项目如此类的风险,三本质而又没有边际问题是企业文化不健康。在一个健康的体制上才容易构建系统的整体模型并易于实施。
  软件之外是一个站在如何实施软件开发的新高度,如何度量项目的进度,我们有无一个标准来衡量?假如完全根据进度来实施将会如何----机械化。
一.在软件之外看软件什么
  软件的实施需要工程化,而不是机械化,人是活动的,无法实施机械化,更何况软件的开发过程也是一个创造性过程。
  再讲一个普通的例子,我在从事电力系统自动化项目实施时,有位自动化资深的客户给我讲了一个道理,他说:在世界上有两种人是推动社会进步的,一是勤劳而聪明的人,他在创造世界;一是愚笨而懒惰的人,他在要求别人创造世界。这样,自动化就出现了,它第一种人为第二种做的,但到现在也无法满足第二种人的需求。
  这虽然是个笑话,但从其中可以体会到一个道理,在从事工程项目时有两个方面一个是客户的需求,一个项目实施者。
  既然软件从无到有再到无的过程,被称为软件工程(将在第二章详细讨论),软件之外的问题也就是工程的实施者和软件的需求者。
  先来谈软件的需求,在第二节,我们讨论了信息系统,作为目前的世界被称为信息的时代的世界,其信息的重要性是不言而喻的。我们构建一个系统,系统为之服务,服务者作为计算机所能提供的就是数据服务或数据化的服务。
在日常生活中,我们需要被服务的事物越来越多,而这些服务就是我们的需求,这些需求由系统来解决或提供,而这些系统向人们提供数据服务就是我们在工程中实施的对象。
  那么,软件工程的实施对象从事什么样的服务。
  一个事物被实施后,尤其是软件,它的目标就是人们为之的定义的功能,对于对象的本身称为操作,软件的操作就是自动地按照一定的逻辑来整理、分析和抽象数据。
  软件的需求和软件的实施分开来谈是没有意义的,但作为理解上,一个大脑很难对两个事物进行同时分析。软件的实施是软件工程的整个过程,需求其实就是一个被服务的对象的思想或思想过程。
  软件的实施就是把对软件的需求包装成软件的一个过程。
  软件之外是什么?一是什么将被包装成软件,二是如何包装成软件。
二.如何看软件
  如何"看"软件?这个"看"字包含有众多的含义。
  首先,软件是虚的,是被比特存储的,不是使用显微镜就可以看见的,看软件分两个方面,一是看(观察)软件执行情况,二是看(分析)软件执行过程。
  其次,我们还应该考察的是软件被构建的过程,也就是软件之外的第二个问题,在构建过程中有什么被记录,记录构建的过程的标识?
  最后,软件被使用于何处,使用过程记录。
  "看"软件的过程,是一个识别的过程,在识别的同时也还需要分析、记录、再分析、再记录等,若我们在参与软件的实施,那么这些分析记录的文档是不是软件的一部分。
  当然是,但不是软件的执行部分,它是软件的服务部分! (其执行部分也是服务部分,软件的介绍将在第二章详细讨论。)
  如何分析和记录软件的实施过程,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)表示。

 楼主| 发表于 2004-2-27 20:35:50 | 显示全部楼层
四.图研究什么
  在面前图的研究领域上存在一个问题:在使用计算机构造图时会出现同构现象。
  一般情况下,以何种方式?构造什么样的图?图本身就是一种可以能被描绘成图一个集合,在软件领域,我们关心的基本上是序列(集合),这个问题在建模表现得很突出。
  图有两个方面,一个是边,一个是顶点。
  顶点是没有序列的概念的,那么的边的序列如何定义?是方向?
  在图上,我们一般是采用研究图的(某个顶点的)度数来研究图的构造的。以下看一下度的序列。
设图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)对应的实现全部构造出来。
  对于研究的问题,第一个问题是图论实施的基础,我们来考察系列的队列,是研究有向的关系(可以看成采用序列表示的事件触发的关系),设一个序列是图序列,但该序列不是用来表示我们要研究的图,而研究我们图的元素关系的图。
  对于第二个问题,则是我们开始关心的问题,对于一个图序列实现什么是至关重要的,建立一个关系,其关系到几个元素,关系是什么?比如一个人结婚,我们找到一个关系:请亲戚朋友吃酒,关系几个元素(来那些人),各个关系什么,有的是亲戚有的是朋友。
  对于第三问题是实质性问题,就是我们需要解决的问题,如何把序列(对应的元素或关系全部构造出来!)的实现(关系的构造图)全部构造出来。
  下面来研究一下图系列的基本性质:


五.图的同构与拓扑


六.树
  树和数据结构,树是简单的图,学过数据结构的就知道类似"两叉树的理论,简单地讲树就是在图的所有结点中,任意两个结点之间只有唯一的一条简单路径的图。
  在自然界中,树是一中根在下的有枝的植物,至于植物它的枝是梯形结构的,我们在图论中描述树时,我们常常把根画在上面,而把"枝"画在下面。
  树的术语和特征(采用语言的描述时称为语义)

参考资料:
  1.Richard Johnsonbanugh 《Discrete MatheMatics》 电子工业出版社。
  2.丘维声 《有限群和紧群的表示论》 北京大学出版社。
  3.许进 《自补图理论和应用》 西安电子科技大学出版社。



[此贴子已经被作者于2004-2-27 13:08:45编辑过]

 楼主| 发表于 2004-2-27 21:14:12 | 显示全部楼层
[B]系统的构造模型[/B]

  在此处我对建模的基础再次声明。我首先不愿让本书落入数学符号的说教中,我澄清我以下的观点:
  1.该处的数学仅仅是一种描述,比如集合就是对象整体的描述。
  2.如下所说的数学性质仅仅是对该集合对象或集合内对象的性质,即我们对什么建模,建出的模型的性质是什么;这些性质有否扩展机制;如何扩展,其理论基础是什么;集合的关系、函数、数字系统和算法将描述该模型的运转情况。比如说COM的接口有自反性,若你知道自反性是什么样的性质,有何可利用的机制,对于技术本身的理解是有益无害的。
  3.如下所说的还包括对模型的构造的过程和结果有描述,将对构造出的模型进行分析,该模型是否为最简单的模型,该处构造的模型是否已经被构造过,如此将在图论中被详细说明。
  当然,在本书中讨论这些有点深,但我们在分析UML语法时,你会感到,原来这些关联是应该的,是理所当然的。
一.系统模型
  计算机需要采用一种符号来记述使用者通过某种方式来操作它。这是一个对对象描述的过程,在该过程中,我们重点是在叙述上构架一个系统,当然,该系统是模型系统。
  在第一节,我们已经简单地描述系统模型。什么是系统模型?和系统(system)一样,也有众多的定义,为了研究系统的行为,有些系统,如一台收音机,可以直接在系统上进行实验,但是对于大多数系统,尤其是社会经济,就不可能在现实系统上进行实验,而是(也必须是)将系统简单又是从现实系统中抽象成比较简单的实体,然后在这个实体上进行实验,这个比现实系统简单而又是从现实系统抽象出来的实体称为系统的模型,它仍然是一个系统,这个系统和现实系统之区别,称为模型系统(简称模型)。
  系统模型可划分为两大类:物理模型和数学模型。
  本书仅讨论数学模型,对物理模型有兴趣的读者可以查阅相关模型方面的书。
  数学模型包括动态模型和静态模型;动态模型或静态模型都含有两个属性或操作,分析方法的解数有值解和分析解。 系统模型的建立的原则和步骤:
  建立系统模型是一件高技术和高艺术的工作,不可能有统一的规律或规则(如此你将会感到模型是否为最简的或是否为重构的重要性),如下有一些不成文的规定:
1.模型要有一定的精度
  既然模型是现实的系统的替代物,它必须反映现实系统的本质,且有一定的精度,失真太大就失去了模型的意义,在如此的模型上做实验有害无益,浪费资金和时间。但是模型毕竟不是现实系统,不可能把所有的细节都包括进去,也就是说,如果十分精确,是不可能的,下一节的一个例子将告诉你,一个十分精确的描述将是无限的。
  但有一个原则需要牢记:我们必须能够控制我们的模型。
2.模型要足够简单
  由于实际的系统太复杂,所以要建立模型,如果模型也太复杂,就没有意义了,所以在建立模型时需要抓住本质的元素(对象的属性和操作)。
3.遵循自然规律和经济规律
  在模型中包含各种变量和参数,同时要用到各种公式、定律。基于上述求解,因此模型必须符合科学规律和经济规律。公式要有依据,参数要可靠。
4.尽量采用现成的模型
  如果该模型已经有人运行过类似的模型,则尽可能的使用,即使不十分合适,也可以借用其核心的部分,如此,将减少资金、精力和时间。
5.模型必须反复修改
  由于人对世界的认识是一个过程,因此不可能一次就把模型建好,必须反复测试,逐步完善。
  建立模型,前人给出经验公式:
  ①分析问题、确定目标
  ②收集数据
  ③找出各变量之间的关系
  ④确定约束条件
  ⑤规定符号、代号
  ⑥建模
  ⑦评价模型
  ⑧修改模型(一个迭代过程,从步骤开始,但不是所有的步骤都经历)
  对于一个增量的模型,我们需要在⑥⑦⑧过程中进行不停的迭代。
  对模型的研究,我们首先引入一个新的概念:运筹学。
  运筹学就是研究、筹划一个工作如何进行的更好;在一定的资源的条件下生产出最多的产品,从若干个方案中找出最好的一个方案。
  该方法对研究模型无疑有重大的意义。
  运筹学研究的模型主要有以下几种类型:
  1.分配类模型 这类模型主要研究最优分配,例如由若干种有限的原料制成产品的最优分配。这类模型包括线形规划、非线形规划、整数规划和动态规划等模型,其中线形规划应用最为广泛,理论也很完善和成熟。
  2.网络模型 网络模型用图示描述,另有一套计算方法。在现实系统中,诸如此类的问题很多,如最大流问题、最短路径问题、运输问题等都可以采用网络模型求解。
  3.选址模型 选址模型用于选择一个或几个服务设施,使这些实施点对附近供应费用达到最小。
  4.排序模型 排序模型是生产管理中使用的模型,例如不同类型的零件加工顺序等。
  5.决策模型 决策模型用于在若干个方案中找到一个最优方案。决策在所有经济活动中都存在,甚至在生活也存在决策。
  6.排队模型 研究排队的规律,用于大型的随机的服务系统中。在计算机的操作系统上对中断处理就是使用排队模型。
  7.存储模型 存储模型研究在存储费用最小的情况下的库存量、定货批量和定货次数等一系列问题。
  在对软件系统(对系统的在实施软件上的建模)我们讨论最多的就是网络模型和决策模型。
  网络模型就相当于UML中的采用的时序图(在UML中时序图是非常重要的一种图,但在此处我们仅仅需要知道什么是网络模型,时序图在第四章讨论)。
  网络模型主要是画网络图,网络图由节点和箭头组成,节点称为事项,箭头称为活动。
  如图的描述

  该图表示第j个事项开始工作必须等第i个事项结束(或完成),箭头上面的符号n表示完成第i事项完成的时间为n天(在软件工程上一般是按人月(Man-Month)来计算)。
  我们引进一个例子来说明问题
  一个农场主养了一群羊,每到年底的时候,他都要决定卖掉几只,用卖羊的钱改善生活;留下几只,以供明年的发展。在留羊的时候,需要看看羊的干草是否可以够留下的羊吃过冬天,如果不够,那么农场主需要把卖羊的钱用来买草。
  我们来表示买羊买草的过程

  该图并不复杂,其中没有关联交差的活动,若其中有交差的活动,我们将需要考虑各种不同组合,以达到最优的效果。
  关于网络模型,我们将在UML的时序中在进一步地说明。
决策模型
  决策遍及各个领域,人类在和"自然"斗争时也需要决策,何谓决策,决策是人(主体)行动的先导。决策问题包括三个方面,一是决策者所要达到的一定的目标;二是决策者可以选择的行动方案;三是采取这些行动后可能产生的效果。为了能准确进行决策,需要决策者对被决策系统(客观事物)的本质有足够地认识,并且需要对有关信息进行收集,处理和分析,以得到一个合理地、完好的解决方案。
决策的分析过程
  需要决策分析的系统一般非常复杂,而且数据庞杂(我不是在吓唬你),各种情况之间关系复杂,同时还有许多不确定的因素。
①陈述问题
  定义目标,提出可控因素及不可控因素,也即选取可能的策略及自然状态,提出各种自然情况的可能性。
②建立模型
  将已经陈述的问题模型化,可以根据可控因素和不可控因素的情况分析如上的问题,将问题分步转化为模块,并组合成模型,并逐步分析修改。
③求解模型
  用分析方法求解的模型直接可以通过分析法求解,如果不能用分析法求解就用模拟法求解。在求解的过程中必须考虑将不同参数输入以检验输出结果的变化。
④实施模型
  模型地实施需要全方位配合,当然也是系统成败的关键。
  如此模型的求解和实施是建立于对模型地分析的基础上,在软件工程领域内,对模型的分析,主要集中于该(决策)系统的风险。不同的风险因素,将对如何构建系统的模型产生直接影响,关于软件工程中存在的风险。我们将在第二章软件工程中作详细的讨论。
  如何描述一个建好的系统模型,我们刚才见了系统决策过程的第一步就是对系统的描述,描述系统存在的问题,以便有的放失采取行动。
  我们首先来看一下计算运行环境的系统和信息。



[此贴子已经被作者于2004-2-28 8:44:29编辑过]

 楼主| 发表于 2004-2-27 21:43:31 | 显示全部楼层
二.系统与信息
1.系统的定义
  系统(system)这个词已经人人皆知了,在第一节中,也对系统和模型(model)进行了比较。首先,需要区别两个定义:一是模型和系统的差别,二是制品和系统的差别。
  模型和制品在第一节,就可以找到它们的简单定义。现在来考察一下系统:
  系统就是由多个元素有机地(相互有合理的关系)结合在一起,并执行特定的功能(设定的)以达到特定的目标的集合体。
  说的详细一点,系统就是由各元素和子系统组成的;各元素之间是相互作用或相互制约的;系统是有目标的;系统和环境有关,要适应环境的变化;系统有强烈的整体性,单元要服从整体。
  整理系统的特性如下:
  ⑴整体性 组成系统的各元素不是简单集合在一起,而是有机地组成一个整体,每个元素都要服从整体,追求整体最优,而不是每个元素最优。(如此就是全局的观点,还符合经济规律)系统是组合起来的,在第二章中的描述系统时将通过子模块来组成整体系统,那么子模块将是系统的元素。此时,需要每个子模块都达到最好的、最完善,但可以通过协调、综合,仍然可使整体系统具有较好的功能;反之,若每个模块都追求最好,相关的协调性必然存在问题,故系统也较之为差。
  (读者可以考虑我们工作的团队之间的关系是否也是如此,所以在序言里提及作为程序员,在团队内要以"系统"的最优为前提,而不是个人最优,如此需要良好的心态)
  ⑵层次性 系统的中的每个元素仍然可以看成一个系统,也是其子系统。一个系统中含有众多的模块,而这些模块也是一个系统,这些模块还含有子模块,其子模块也是一个系统,直至模块中的元素,但对于元素中的属性是否也可以认为是一个系统?
  ⑶相关性 系统内的各元素是有联系的和相互作用的,这些系统间相互联系和制约,从而有机地集合在一起形成一个具有有、特定功能的系统。
  ⑷目的性 任何一个系统都有一定的目标或目的,该目标就是通过系统的功能达到的,因此任何系统都有某种功能,而功能是通过组织某些组织、机构来实现的。
  ⑸适应性 任何系统都处于环境之中,所以系统必须可以适应周围的环境。
  系统属性,在系统中我们称有意义的元素为实体(entity),表示实体的特征为属性(attribute),实体的运动的规定时间叫活动(activity),描述系统在任何时间的必要变量叫状态变量,简称状态(state),表示状态变化的出现称为事件(event)。
  对于系统的类型,一般有五种分法:
  ⑴按复杂的程度分
  ⑵按系统抽象程度分
  ⑶按系统功能分
  ⑷按系统有外界关系分
  ⑸按系统内部结构、形态分
  系统方法,从本质上讲,系统方法是一个哲学名词,它是研究系统工程的思考问题和处理问题的方法论,所谓的系统工程,一是以研究大规模复杂的系统为对象的一门新兴边缘学科,二是具有和一般工程技术有相同的特征,但又具有本身的特点,它并不研究特定的工程物质对象,它是以研究任何物质系统、概念系统。
  系统方法的核心是:系统的思想、数学的方法,计算机的技术。
  所谓系统的思想即把研究对象作为整体来考虑,着眼于整体最优运行;数学的方法就是用定量的技术即数学方法研究系统,通过建立系统的数学模型和运行模型,将得到的结果进行分析,再用到原来的系统。计算机技术是求解数学模型的工具,在系统的数学模型上进行模拟,以实现系统的最优化。
  系统方法的表示,美.H.Hall提出过三维结构:
时间维
  ① 规划阶段 对系统进行定义、确定目标、制定开发计划和策略。
  ② 制定方案 提出具体解决方案。
  ③ 研制阶段 实现系统研发方案。
  ④ 试运行阶段 将项目投入试运行。
  ⑤ 安装调试阶段 将整个系统安装好,拟定运行维护规范和运行计划。
  ⑥ 运行阶段 按预期目标运行系统。
  ⑦ 更新阶段 改进旧系统使之成为新系统。
逻辑维
  ① 问题确定 通过收集数据确定问题。
  ② 确定目标及评价标准 根据问题制定目标和相关标准。
  ③ 系统综合 分析实施项目策略。
  ④ 系统分析 通过建模、推断可供选择的各种方案的可能结果。
  ⑤ 最优化 分析出最优化的系统方案。
  ⑥ 系统决策 从各种方案中选出最优方案。
  ⑦ 计划实施 将最优方案付于实施。
知识维
  ① 基础知识 分析实施系统各种基础知识。
  ② 专业知识 分析实施系统的相关专业知识。
2.系统的信息(infomation)
  信息一词已不再陌生,IT行业就是信息行业,但有一个观点需要声明,对于"数据(data)"一词的定义IT行业就是把它当做信息,反之依然。所以在以后提及信息一词就可以认为是数据。但对于非IT领域,一般上认为数据是经过加工后的信息。
信息的基本属性:
  ① 真伪性 真实是信息中心价值,不真实的信息价值可能为负。
  ② 层次性 信息是有层次的,一般分为战略级、策略级和执行级。如一个软件公司领导他关心的是战略性的数据(就是信息):产品销路、公司结构等;部门主管和项目经理关心策略级数据:开发方向、开发成果等;系统设计师 、系统构架师和程序员关系执行级数据:开发什么、如何开发等。
如何区分战略级、策略级和执行级的数据:
  a战略级数据都来自外部,例如关系企业市场、发展目标;策略级数据有来自内部的也有来自外部的,例如生产效益;执行级数据都是来自内部,如:完成指标。
  b 战略信息灵活多变,有时需要用计算机和数学方法进行分析,采用的工具复杂,但分析出的结果仅供决策折参考;策略级信息是商量所得的信息,比如开会讨论问题的解决办法,或由公司领导提出的解决办法;执行信息就是执行这些解决办法的的具体实施情况。
  c 战略信息精度要求不高,50%以上的精度就可以了;策略级信息的精度比战略信息精度要高;执行信息的精度要求是最高,比如在编写代码的时候是不能有丝毫差错,不然编译就无法通过。
  ③ 不完全性 比如在软件需求中,作为系统分析员或系统的协调人员,希望从用户那里得来的信息是完全的,这绝对是不可能的。对于系统分析人员来说,如何合理的从众多的信息中通过过滤而得到可以使用的信息是至关重要的。
  ④ 滞后性 数据或信息只有已经存在我们才能获得,对于那些现在还没有的信息,仅仅可以通过预测(forecast)方式来得到。
  ⑤ 扩展性 对于任一条信息,只有通过其加工和再分析,才能有用,对其加工和再分析的所得到的信息,也是我们需要的信息(或就是我们需要的信息)。
  ⑥ 共享性 一条信息并不一定指定有哪个系统可以使用,对于和该信息有关联的系统都可以使用。信息的共享不同于其它的共享,比如有两个人每人各有一个苹果,他们交换后,每人还是一个苹果;但若每人有一个笑话,交换后,每人就有两个笑话。
3.信息的管理
  任何信息都是有一定的生命周期的,(某个事物)从信息的获取、加工、存储、维护、使用和退出的整个过程称信息的生命周期。
信息的收集
  信息直接作用于软件工程的两个方面:一是系统需求分析,对于系统分析员来说,客户的需求信息是主要的也是必要的;二是软件编制和支持,对系统构架师和代码编写者来说,采用什么样的结构形式便于接口、扩展和维护。
信息的识辨贯彻整个软件开发过程,固然,需要对其大量的信息进行识辨和提炼。
  在软件工程上,信息的识辨有三种方法:
  ①由决策者(项目管理者或客户)识辨。系统分析员向其调查或询问,让其从信息中抽取有用的信息。
  ②由系统分析员识辨。系统分析员通过观察进行识辨,同时和系统协调员一起参加进行信息的识辨。
  ③提出条件让计算机进行自动筛选,目前市场上也出现了一些过滤器,在internet上浏览时,我们可以使用Yahoo或Google(称为搜索引擎)来筛选查询我们需要的信息。
  信息识辨后,需要对信息进行采集,即通过一种途径把它记录下来,同时也进行适当的整理,使之系统化。
采集和整理有三种途径:
  ①从上而下的广泛采集或按时间、空间的顺序广泛采集。
  ②有目的地对某个点进行逐点采集。
  ③ 随机收集。
  收集和整理完毕后,进行信息的表达(或叫数据的表达),在软件系统上称为GUI,但面前的媒体技术的发展,信息的表达形式出现多样化,无论采用一般什么设备无非还是图表形式、文字形式和声音形式。
4.信息的传输
  目前的信息传输主要的载体是网络或其他的通讯媒介,但随着时间的发展,大量的信息将从Internet网络(公网或域网)进行传输。无论采用那种方式进行传输,或传输什么类型的数据,无外有以下几个问题:
  ① 技术问题 如何正确的、无错码地传输。
  ② 语义问题 如何表述自己的问题,双方可以完好的识别,在通讯上该表述的方式叫通讯原语。
  ③ 效率问题 目前具体事例叫带宽。
信息表述问题之一:数字系统
  数字系统包括众所周知的十进制系统,还有二进制、十六进制。
  一个比特是一个二进制位,值为0或1。
  在数字系统的计算机中,数据和程序都是用比特来编码的,今天硬件是由一个电子线路的状态来表示一个比特。电子线路必须能处于两种状态:一个表示0,另一个表示1。讨论二进制系统、十六进制系统如何使用比特、十六个符号来表示整数。
  由于目前计算机传输系统仅可以传输二进制的符号,我们需要传输一个图片或几个文字,都必须将其转化?quot;0"或"1"表述的比特编码。
信息表述问题之二:编码和解码
  信息在传输过程中,需要对信息进行编码,在计算机中,任何信息都以文件(file)形式来存放的,文件本身就是一个以二进制编码的,固然在传输时可以直接传输以二进制形式表述的文件。但为了防止传输中产生错误,在信息的传输的过程中,还必须加入一些容错的机制,比如校验或冗余。
  所以一般的在文件传输中,是把文件分成片,在每一片上再加上校验代码,把进行处理的文件再在网络上传输。当然在接收端在逆向处理。
  在通讯上,一般上述的两个过程叫作编码和解码。
  (编码和解码其实是电子实时通讯的术语,其意义就是对输入和输出的信号编码和解码。)
信息表述问题之三:信息变换
  主要应用于加密系统,对某些数据,是机密的,必须对其重新"包装"在进行传输,把该信息进行适当的算法变换,处理后再进行传输。
  信息加工(有兴趣的读者可以参见"数字信号"一类的书籍)
  对于信息。初次采集得到的信号一般称为一次信息,而把经过处理的信息称为二次信息;有些时候也原始的信息称为为一次信息,把采集得到的信息得到称为二次信息(这种情况一般中间有采集器,比如电力系统的PT、CT)。
  初级加工:比如滤波、整理(这一类术语可以在"数字信号"一类的书籍上找到,对于那些没有经过计算机专业培训的读者有不要参考一下)。处理模式如图

[此贴子已经被作者于2004-2-27 16:37:37编辑过]

 楼主| 发表于 2004-2-28 00:38:37 | 显示全部楼层
三.计算机信息系统
  计算机信息系统泛以计算机为核心,包括人、机器、规章制度等组成的收集、传递、加工、维护和使用信息的系统。
  计算机信息系统按照规模、功能、水平的不同有多个层次,多种类型,比如管理信息系统(MIS)、决策支持系统(DSS)、专家系统(ES)、办公自动化系统(OA)等。
  我们来介绍一下决策支持系统,以及决策支持系统和其他系统的关系,来分析一下信息系统的模型。
  决策支持系统是支持决策过程的一类信息系统,决策支持系统是一个决策支持的工具,决策者在决策过程中通过人机交互从计算机中存取信息,选择方案。
  决策支持系统的逻辑结构:

  (注:DB数据库/DD数据字典/ MB模型库/MD模型字典/RB规则库)
  数据库系统提供数据(信息)的存放,其中数据库操作是对数据库系统进行更新、分析、更改等,而其表示系统和部件界面是人机界面系统。同样对于模型库系统,会话操作等也含有人机界面和操作。
  从决策支持系统分析中我们可以看出,对系统的操作(分析呀等)就是对模型的操作,但该模型的含义较我们在上面说的较为深一点。该处的模型是系统的表示,其实就是系统(但它还是系统的模型)。此处确实是系统的模型,但什么样的系统模型也是模型,所以没有必要去深究什么系统呀、模型呀等概念,系统也是模型(等同于系统的模型)。
<待续>
发表于 2004-3-3 01:44:15 | 显示全部楼层
就是
也发个给我吧
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-30 15:40 , Processed in 0.064986 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表