精华内容
下载资源
问答
  • 总所周知,λ-演算与组合子演算构成邱奇计算理论与图灵图灵机模型共同构成了计算机计算理论支柱。在前面文章中我们已经讨论过了自动机与图灵机相关理论,在这里我们将进入 λ-演算与组合子 计算理论相关...

    【逻辑与计算理论】从逻辑到计算的转变之路


    总所周知,λ-演算与组合子演算构成的邱奇计算理论与图灵的图灵机模型共同构成了计算机计算理论的支柱。在前面的文章中我们已经讨论过了自动机与图灵机相关理论,在这里我们将进入 λ-演算与组合子 计算理论的相关介绍。对于 λ-演算 你可以把它看成是高阶函数的一个形式系统。于是我们就有必要重新理解或定义一下什么是函数的概念了。

    PS: 在我们后面的讨论中经常会出现一些LIsp 和 Haskell 的一些表达式代码,以供更贴近计算层面进行讨论问题。若对于这类函数式语言不熟悉的读者可自行简单了解即可。

    一、函数

    为什么是函数?如果有人让你用简单一句话说明数理逻辑和普通逻辑有什么本质不同,你该怎么说呢?回答就是:数理逻辑有函数,而普通逻辑没有。将函数概念引入逻辑是弗雷格的功劳,他的一阶谓词逻辑,其本质就是真值函数式逻辑(truth-functional logic)。什么是真值函数式逻辑?也是一句话,命题的真值是该命题各个组成部分真值的函数。例如:~p,如果p的真值为真,那么~p的真值为假。用中学函数概念说就是:p是自变量,~p是因变量,而作为否定的“~”就是函数;如果我们用“ƒ”代替“~”,那么这个函数就可以写成ƒ(x) = ~x,当x=p时,我们等式代入:ƒ(p) =~p。在比如例子:(p ∧ q) → (~r ∨ p)。这个式子由合取、析取、蕴含和否定构成。如果我们把否定函数称作ƒn、把合取函数称作ƒc、把析取函数称作ƒd、而把蕴含称作ƒi,这样,我们就有了下面四个函数:

    ƒn(x)=~x                       ƒc(x, y) = x ∧ y                       ƒd(x, y) = x ∨ y                       ƒi(x, y) = x → y

    把上面的值代入:

    ƒn(x)=~x,x = r,∴ ƒn(r)=~r                                              
    ƒd(x, y) = x ∨ y,x = ƒn(r),y = p,∴ ƒd(ƒn(r), p) = ~r ∨ p
    ƒc(x, y) = x ∧ y,x = p,y = q,∴ ƒc(p, q) = p ∧ q
    ƒi(x, y) = x → y,x = ƒc, y = ƒd(ƒn(r), p),∴ ƒi(x, y) = ƒc → ƒd = (p ∧ q) → (~r ∨ p)

    这其实实际上就是我们所熟悉的命题逻辑的基本运算,用函数的符号“重写”了一遍而已。

    可以说,弗雷格把函数概念引入逻辑是真正的逻辑学史上的、自亚里士多德以来最大的革命性创新,它把逻辑变成了完全和数学一样的对象。它使后来的研究者认识到,既然逻辑的形式本质上就是函数,那么,对逻辑学的研究其实就是对函数的研究。一旦捅破这层窗户纸,逻辑学的研究就真正走上了康庄大道,由此催生了许多影响整个20世纪甚至今天到未来的新学科:1920年代,由Schönfinkel创立、Haskell Brook Curry发展的组合逻辑,1930年代由Alonzo Church创立的的lambda-演算以及后来发展起来的类型论,其本质就是可计算函数。可以说,逻辑学由于插上了函数的翅膀才可以催生、演变为计算理论——可计算函数的研究,它的实质就是计算机科学最本质的问题:可计算性问题和计算复杂性的研究。

    所谓 lambda-演算,就是把函数的研究进一步抽象化,研究函数的的抽象形态、抽象形态对具体值的应用,以及函数值的最终的“实现”——β-归约。

    随着影响的扩大,有学者通过逻辑的研究把这种函数方法运用到自然语言的研究,便产生了范畴语法。所以从某个程度、某个方面来说,20世纪的形式科学就是函数的科学,函数,已经成为学习计算机科学、数学、逻辑学、语言学和哲学的跨学科的共同语言。

    将 lambda-演算最终应用于计算机语言,就是美国数学家John MacCarthy所创立Lisp。Lisp的意思就是List Processing。而所谓List,就是形如数列那样的一系列符号的排列,例如1,2,3,……,为了区别list和一般的符号序列,MacCarthy决定把符号序列放入圆括号中,去掉逗号,就变成了(1 2 3 ……)。那这个序列和函数有什么关系呢?如果我们把序列的第一个符号看做是函数符号,而剩下的则是函数的变量,我们后面称作参数,那么在这个序列中,“1”就变成了函数?什么?数字也可以做函数?这个就是Lisp最有趣的地方。在Lisp中,函数、参数都看做是表达式,统称s-表达式(s的意思就是symbol:符号),这使得计算机中常见的区分数据和处理过程在Lisp中变得模糊了。在我们这一系列的讨论之中将所有Lisp语言的表达式都看做是这种用括号括起来的抽象函数。

    例如我们上面的逻辑函数表达式用Lisp的语法就可以写成:

    (~ r)
    (∧ p q)
    (∨ (~ r) p)
    (→(∧ p q)(∨ (~ r) p))


    这些写法和我们常见的函数的唯一区别就是:函数符号和参数之间不再用括号,而把整个表达式用括号围起来。另外,函数的定义也有所扩大,将一般的代数运算和关系也用函数表示,例如加减法:(+ 5 6),(< 5 6)。而谓词表达式同样可以成为函数,比如
    (∧ (白 雪) (红 血))——“雪白血红”。


    Haskell则更是对lambda-演算的“直译”,保持了这种形式化的原汁原味。与Lisp不同,Haskell的表达式没有括号,而且对函数和代数表达式仍然按人们习惯的方式。如果用Haskell的方式表达上面的命题逻辑式:

    not r
    p && q
    not r | | p
    (p && q) ==> (not r | | p)

    但我们应该清楚的一点就是:无论是Haskell还是Lisp,它们只是lambda-演算的在计算机上的表达,表达方式(即语法)虽不同,但最重要的概念,基本精神是一致的:函数是这些表达式中的“一等公民”、基本元素。有了函数,无论是数学、逻辑、自然语言都可以用这种统一的方式表达,这就是我们为什么要用编程语言、用Lisp、Haskell表示逻辑的最基本动机和理由。

    因此对函数概念的透彻理解,将会帮助我们更加容易理解 lambda 演算与 Church 的计算理论。

    在这里我们强调函数的如下三个层次:

    (1) 函数的内涵表达式——抽象;
    (2) 函数符号和参数的关系——应用;
    (3) 函数的代入求值——代入替换。
    最后,函数的外延表达式:有序对的集合和外延性原理。因为(3)的理论基础就是基于外延性原理的可替换原则。

     

    二、逻辑和计算的关系

    逻辑和计算,从概念上看似是两门不相干的学问,学逻辑的,大部分在哲学系,少部分在数学系,对他们来讲,逻辑就是关于“思维”的,是形而上的;从数学角度来说,就是数学的一个分支;而学计算机的,因为程序语言和离散数学的关系,了解多一些,但大多也是技术层面的知识,例如一个程序代码中的判断表达式之间的关系,布尔类型的使用。很少有人真正从本质上探究逻辑和计算的关系。而在这里我们就从命题逻辑出发,一路走下去,走到λ-演算和函数式编程去探讨一下它们之间的关系。当然我们这里还是比较浅层次的讨论,没有深入到理论问题,如类型论、证明论和范畴论等。当然本篇文章作为计算理论的开篇,自然不会涉及太多较深的知识,随着后续文章的讨论,我们将会更加深入一些。

    在我们开始这个话题之前,先引用一段《计算机程序的构造与解释》(Structure and Interpretation of Computer Programs,简称SICP)的第一作者Abelson1986在MIT开讲第一课的关于计算机程序看法的头一段话:
     

    “ 欢迎大家到这里来上这门计算机科学的课程。不过“计算机科学”这个名称是个很糟糕的名称:首先,它不是科学,你可以叫它工程、叫它艺术,不过我们后面会讲到,它更像巫师手里的魔法,一种带有灵性的魔法。第二,计算机科学和计算机无关。这种无关就像物理学并不是研究加速器,生物学不是研究显微镜,几何学不是关于土地测量的学问一样。不过,计算机科学确实在许多方面和几何学相像。因为几何学的起源确实来自于土地测量,几千年前因为尼罗河水的泛滥,人们个人所拥有的土地边界被冲毁,隔几年就需要重新丈量土地界定边界,这就造成了土地测量学的发达。因此对古埃及人来说,几何学就是土地测量学的技术。我们现在把计算机科学看做是关于计算机的学问,理由和当年埃及人把几何学看做是土地测量学完全一样。因此当人们刚刚开始认识一个新学科的时候,往往会把手头进行的工作和该学科的本质搞混,往往会把使用的工具当做研究对象。目前的现实情况(1986年),我们对计算机科学的认识大致上和埃及人对几何学的认识差不多。现在回过头来审视发展了2000多年的几何学,就会认识到:真正的几何学,是关于形式化空间概念的学问,是关于数学真理性质的学科,是对数学对象的建模。这种科学的本质就是:它是一种陈述性知识,用定义、定理等语言手段陈述属于这个学科真理的知识,这种知识的本质就是:什么是关于这个学科真理?

    而计算机科学,未来的人们会认识到它的实质实际上是形式化“过程”(process)的知识:概念创建、实现和完成的过程,这种知识的本质就是:如何“证实”(verify)真理?计算机科学的任务就是精确阐述某个知识的实现方法。”

    正如 Abelson 教授所述,一种是陈述性知识,一种是过程性知识,这两种知识的关联,就在于如何将陈述性知识转换为过程性知识。这是我们理解逻辑和计算关系本质的核心思想。下面让我们开始探索之旅的第一步。

    1. 从命题和命题逻辑到函数

    命题:即以肯定陈述句形式出现,并且可以判断其真或假的句子。比如:
    (1)
    a. 张晓华很聪明
    b. 李建很聪明
    c. 王立波很聪明

    在将这些句子主语和现实世界中的具体人物联系起来之前我们无法判断其是真是假。从句子形式上看其共同点是:在“很聪明”这个谓语之前有三个不同的人名做主语。如果用文本的形式表示,或者说有点数学味的表示,我们可以用提取公因式法:

    很聪明 {张晓华、李建、王立波}

    如果数学味再强一点,我们可以建立一个函数,这个函数的定义域就是花括号里的人名,值域就是真值集合{真、假}。如果用ƒ表示谓词“很聪明”,那么:

    ƒ:{张晓华、李建、王立波} → {真、假}

    如果我们假定只有“张晓华”一人“很聪明”的话,我们就会得到三个命题:

    (2)
    a. ƒ(张晓华) = 真
    b. ƒ(李建) = 假
    c. ƒ(王立波) = 假

    为了不引起不必要的误会,我们可以将其形式化为:

    (3)    ƒ:{z, l, w} → {T, F}

    这样,我们就完成了从命题的概念走到了函数的概念,在这里我们只用了简单几行,而人类却走了2000多年,从亚里士多德到布尔和弗雷格。

    2. 真值函数

    函数和关系的引进,是弗雷格创立一阶谓词逻辑的最大贡献,它使得对命题句的分析更加细化,因为关系可以是二项的,R1(a, b),也可以是多于二项的,R2(a, b, c),这在亚氏逻辑中是无法表示和处理的。如果说关系是为了处理更复杂的句子,侧重于句法层面,那么函数就是描述命题逻辑语义的工具。有了这个工具,弗雷格就可以把复合命题句的真值描述为:

    (4) 复合命题的真值是这个命题下各个子句真值的函数

    写成式子,如:
    (5)
    a. 𝝋(𝑝, 𝑞) = ~(𝑝 ∧ 𝑞) → 𝑞
    b. 𝝍(𝑝, 𝑞) = (𝑞 → ~p) ∨ ~ 𝑞

    翻译成中文就是𝝋和𝝍的真值,分别是由𝑝和𝑞的真值决定的。这里,𝑝和𝑞的真值是自变量,而是𝝋和𝝍的真值是因变量。这种变量,不再是数学中的实数集合,而是布尔数集合,这种由弗雷格发明的函数叫做真值函数(truth function),以这种运算作为基础的逻辑框架叫做真值函数式逻辑(truth functional logic)。

    既然谈到了函数,就不得不讨论变量。而符号逻辑学的开篇大致都是从逻辑常量和变量开始。有了常量、变量的概念我们就可以理解量词和量化表达式了。

    3. 变量和函数

    谓词逻辑中有两个量词,全称量词和存在量词。关于这部分的讨论参见我们之前的文章。

    4. 假言推理

    一阶逻辑语言只是工具,逻辑学的最大用途在于形式化推理,论证模式(argument schema)。其中最著名的就是两个假言推理的论证模式。而讨论到论证模式就会涉及到推理规则,即代入原则和外延公理

    5. 代入原则和外延性(substitutionality and extensionality)

    在这里我们只谈函数的外延性和代入原则:

    一、外延性:函数的外延是指函数的自变量和因变量的值对集合: ƒ = {(a, b) | a∈A ∧ b∈B}
    换句话说,我们把函数看做是黑盒子,不关心函数本身的内容只关心输入一个值后会得到什么值。

    二、替换性:如果一个函数有一个值对(s, b),当s被t替换后函数值仍然是b,得到(t, b),那么就可以确定s=t[1]。
    外延性和替换性可以解释为什么一阶逻辑语言对具体原子命题和个体对象的性质不关心而只关心命题间的连接以及量化表达式。

    6. 函数的抽象

    函数的概念,由弗雷格引入逻辑,上个世纪又经众多学者引入到自然语言研究,产生了范畴语法。范畴语法从逻辑的两个基本概念:个体名词和句子出发,利用函数的概念,定义语言中的其它表达式范畴,而且描述粒度远远超过了短语结构语法(可参见前面的文章,具有更大的灵活性,在新世纪以后的自然语言形式化研究中占有愈来愈重要的位置。

    任何语言,都存在表示名称的表达式和表达命题的表达式

    设前者为n,后者为s,例如:n = 苏格拉底,s = 苏格拉底是人

    n和s被定义为基本范畴,通过n和s各种约分组合,可以生成各种派生范畴。所谓约分组合,就是s/n的形式,这种形式表示的就是不及物动词或者形容词,在这里,s/n作为函数,可以生成句子:
    例如:
    春天来了:s = 春天来了,n = 春天,s/n = 来了

    在范畴语法中,除了基本范畴,所有派生范畴都是函数,而且是没有名称只以s/n组合的形式表示函数,因此一个句子的形式表达就是 s/n (n) = s。

    在这里关注的是函数的形式。在范畴语法的形式语言中,n作为自变量,s作为因变量,而s/n的组合表示函数关系,亦即,用函数的外延性——输入和输出表达函数本身,这使得对函数的研究可以在不考虑实际背景,不管是数学函数还是逻辑的真值函数还是范畴语法的派生范畴,我们都可以一个统一视角审视函数:函数的外延性,函数是如何定义的。

    对函数的形式化研究早在上世纪1920年代就开始了,经Schönfinkel、Curry和Church,终于发展出两个平行但是又互补的学科—— lambda 演算和组合子逻辑。这便是我们后面系列的文章将要重点介绍的东西了,敬请期待。

    参考: https://site.douban.com/145723/widget/notes/18112612/note/606597911/

    展开全文
  • 数据字典主要作用是什么?

    万次阅读 多人点赞 2016-05-21 10:52:33
    数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出...数据字典的主要作用:数据字典和数据流图共同构成系统的逻辑模型。没有流图
    1. 数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。
    2. 数据字典(Data dictionary)是一种用户可以访问的记录数据库和应用程序源数据的目录。主动数据字典是指在对数据库或应用程序结构进行修改时,其内容可以由DBMS自动更新的数据字典。
    3. 数据字典的主要作用:数据字典和数据流图共同构成系统的逻辑模型。没有流图数据字典难以发挥作用。没有数据字典,数据流图就不严格。

    下面是个高手写的感觉还不错

    软件工程之项目管理中的数据字典的重要意义
    http://blog.csdn.net/goldou/article/details/2110944
    有幸听过郎咸平的演讲。尽管这个人很有争议。但他说的话,不无道理。他说,在美国,全美的商学院都用到的是统一的教材。用统一的教材有什么好处呢,那就是它建立一个交流的平台。他说,美国商业运转得以如此顺畅,和标准统一有很大的关系。试想一想,美国的MBA和中国的MBA由于教材的不同,交流肯定会有些困难。

    以上和我们软件工程项目开发有什么关系呢?当然有,那就是软件开发也需要有一个统一的标准,用什么来统一呢,数据字典。在这里,数据字典的含义更宽泛一些,非只为数据库中的字典。

    在我所在的项目开发小组中,我们工作的依据是一个设计好的UML图,通过版本控制数据库来共享。它包含了项目原型的类图、序列图等。在开发过程中,我发现这十分有用,但我同时发现我们项目中还少了一个类似数据字典的东西。

    我们用到的一些数据结构杂乱的位于UML类图中,一些事件、命令类型则无法放入这个中心文档。在项目往前推进的时候,一些新的数据结构出现,其中的一些自定义的类型的设计者对其注释又往往过于简单。也就是说,只有设计者知晓意义。这样的话,很显然,其它项目成员要用到这个数据结构,必须和设计者交流。这时,设计者开会去了,你的代码必须今天完成。那怎么办?

    所以,在你所写的程序的开头列出一个数据字典十分的重要.数据字典列举了你在本程序中用到的所有变量的定义,还包括一些自定义的事件、命令的说明。它的定义应包括本条目的所要描述的内容和它在执行时所在的单元。当编写程序时,编定数据字典看似没有必要。但是设想一下,在过了一段时间后,你或其他人要对此程序修改,这时数据字典就显得十分的有用。

    数据字典的一些定义:

    一、数据字典的用途
      数据字典是各类数据描述的集合
      数据字典是进行详细的数据收集和数据分析所获得的主要结果
      数据字典在数据库设计中占有很重要的地位
    二、数据字典的内容
      数据字典的内容:数据项;数据结构;数据流;数据存储;处理过程。数据项是数据的
      最小组成单位,若干个数据项可以组成一个数据结构。数据字典通过对数据项和数据结
      构的定义来描述数据流、数据存储的逻辑内容。

    我的想法是:在项目的初期,就开始设计一个数据字典,其中包含和项目密切相关的各种结构、类型定义。在开发过程中,由项目成员共同维护。它像一个字典,你可以查询任何在项目中你无法理解的各种结构、类型定义,从而最大程度的消除歧义和交流不畅问题。一个word文档就好,通过代码版本控制来共享。

    我想这个问题在大项目中执行的很好,但小项目通常被忽略掉了。

    为啥这么说呢?
    其实也是有原因的,这个发现的问题也是特别多的!比如车辆的类型,刚刚开始的时候只用两种,之后又增加了,写死的东西怎么办,到处都要更改!使用字典的话,直接遍历数据库,通过你需要的type直接的,不用管你有多少,之后又要增加多少,扩展性很强!
    这里写图片描述

    这样非常的方便,我们只需要写个操作的类实现三层结构,直接注入依赖就好了!

    package com.hikvision.cms.pms.modules.config.entity;
    
    import java.io.Serializable;
    import java.util.Date;
    
    public class Dictionary implements Serializable {
    
        private static final long serialVersionUID = 5870500754198757136L;
    
        private Integer id;
    
        private String type;
    
        private String code;
    
        private String name;
    
        private Integer status;
    
        private Integer isDefault;//这里是通过这个bool类型进行树节点的区分,非常的棒!
    
        private Date createTime;
    
        private Date updateTime;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getType() {
            return type;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getStatus() {
            return status;
        }
    
        public void setStatus(Integer status) {
            this.status = status;
        }
    
        public Date getCreateTime() {
            return createTime;
        }
    
        public void setCreateTime(Date createTime) {
            this.createTime = createTime;
        }
    
        public Date getUpdateTime() {
            return updateTime;
        }
    
        public void setUpdateTime(Date updateTime) {
            this.updateTime = updateTime;
        }
    
        public Integer getIsDefault() {
            return isDefault;
        }
    
        public void setIsDefault(Integer isDefault) {
            this.isDefault = isDefault;
        }
    
    }
    
    展开全文
  • 数据流图和数据字典共同构成系统的逻辑模型,没有数据字典,数据流图就不严格,然而没有数据流图,数据字典也难于发挥作用。只有数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明。 ...

    数据字典

    数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。

    任何字典最主要的用这都是供人查阅对不了解的条目的解释,数据字典的作用也正是在软件分析和设计的过程中给人提供关于数据的描述信息。
    数据流图和数据字典共同构成系统的逻辑模型,没有数据字典,数据流图就不严格,然而没有数据流图,数据字典也难于发挥作用。只有数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明。

    数据字典的内容

    一般说来,数据字典应该由对下列4类元素的定义组成。
    (1)数据流;
    (2)数据流分量(即数据元素);
    (3)数据存储;
    (4)处理。

    但是,对数据处理的定义用其他工具(如IPO图或PDL)描述更方便,因此本书中数据字典将主要由对数据的定义组成,这样做可以使数据字典的内容更单纯,形式更统.。除了数据定义之外,数据字典中还应该包含关于数据的一些其他信息。典型的情况是,在数据字典中记录数据元素的下列信息:一般信息(名字,别名,描述等),定义(数据类型,长度,结构等) ,使用特点(值的范围,使用频率,使用方式一一输人、输出 、本地,条件值等),控制信息(来源,用户,使用它的程序,改变权,使用权等)和分组信息(父结构,从属结构,物理位置一记录 、文件和数据库等)。
    数据元素的别名就是该元素的其他等价的名字,出现别名主要有下述3个原因:
    (1)对于同样的数据,不同的用户使用了不同的名字。
    (2)一个分析员在不同时期对同一个数据使用了不同的名字。
    (3)两个分析员分别分析同一个数据流时,使用了不同的名字。
    虽然应该尽量减少出现别名,但是不可能完全消除别名。

    定义数据的方法

    定义绝大多数复杂事物的方法,都是用被定义的事物的成分的某种组合表示这个事物,这些组成成分又由更低层的成分的组合来定义。从这个意义上说,定义就是自顶向下的分解,所以数据字典中的定义就是对数据自顶向下的分解。那么,应该把数据分解到什么程度呢?一般说来, 当分解到不需要进一步定义,每个和工程有 关的人也都清楚其含义的元素时,这种分解过程就完成了。
    由数据元素组成数据的方式只有下述3种基本类型:

    (1)顺序即以确定次序连接两个或多个分 量。
    (2)选择即从两个或多个可能的元素中选取一个。
    (3)重复即把指定的分量重复零次或多次。

    因此,可以使用上述3种关系算符定义数据字典中的任何条目。为了说明重复次数,重复算符通常和重复次数的上下限同时使用(当上下限相同时表示重复次数固定)。当重复的上下限分别为1和0时,可以用重复算符表示某个分量是可选的(可有可无的)。但是,“可选”是由数据元素组成数据时一种常见的方式,把它单独列为一种算符可以使数据字典更清晰一些。因此,增加了下述的第4种关系算符。(

    (4)可选即一个分量是可有可无的(重复零次或一次)。

    虽然可以使用自然语言描述由数据元素组成数据的关系,但是为了更加清晰简洁,建议采用下列符号:
    =  意思是等价于(或定义为);
    +  意思是和(即连接两个分量);
    [ ]  意思是或(即从方括弧内列出的若干个分量中选择-个), 通常用“1”号隔开供选择的分量;
    { }  意思是重复(即重复花括弧内的分量);
    ( )  意思是可选(即圆括弧里的分量可有可无)。

    常常使用上限和下限进一步注释表示重复的花括弧。 一种注释方法是在开括弧的左边用上角标和下角标分别表明重复的上限和下限;另一种注释方法是在开括弧左侧标明重复的下限,在闭括弧的右侧标明重复的上限。例如{A}和1{A}5含义相同。

    下面举例说明上述定义数据的符号的使用方法:某程序设计语言规定,用户说明的标识符是长度不超过8个字符的字符串,其中第一个字符必须是字母字符,随后的字符既可以是字母字符也可以是数字字符。使用上面讲过的符号,可以像下面那样定义标识符:
    标识符=字母字符+字母数字串
    字母数字串=0{字母或数字}7
    字母或数字=[字母字符|数字字符]

    由于和项目有关的人都知道字母字符和数字字符的含义,因此,关于标识符的定义分解到这种程度就可以结束了。

    数据字典的用途

    数据字典最重要的用途是作为分析阶段的工具。在数据字典中建立的一组严密一致的定义很有助于改进分析员和用户之间的通信,因此将消除许多可能的误解。对数据的这一系列严密一致的定义也有助于改进在不同的开发人员或不同的开发小组之间的通信。如果要求所有开发人员都根据公共的数据字典描述数据和设计模块,则能避免许多麻烦的接口问题。

    数据字典中包含的每个数据元素的控制信息是很有价值的。因为列出了使用一个给定的数据元素的所有程序(或模块),所以很容易估计改变一个数据将产生的影响,并且能对所有受影响的程序或模块作出相应的改变。最后,数据字典是开发数据库的第一步,而且是很有价值的一步。

    数据字典的实现

    目前,数据字典几乎总是作为CASE结构化分析与设计工具”的一-部分实现的。在开发大型软件系统的过程中,数据字典的规模和复杂程度迅速增加,人工维护数据字典几乎是不可能的。如果在开发小型软件系统时暂时没有数据字典处理程序,建议采用卡片形式书写数据字典,每张卡片上保存描述一一个数据的信息。 这样做会使更新和修改比较方便,而且能单独处理描述每个数据的信息。每张卡片上主要应该包含下述这样-些信息:名字、别名、描述、定义、位置。当开发过程进展到能够知道数据元素的控制信息和使用特点时,再把这些信息记录在卡片的背面。

    展开全文
  • 软件工程(四)

    2016-05-08 20:30:44
    可行性研究的步骤 1)复查系统规模和目标; 2)研究目前正在使用的系统; 3)导出新系统的高层逻辑模型(数据流图、数据字典);...可行性研究阶段,数据流图与数据字典共同构成系统的逻辑模型。数据字典应

    可行性研究的步骤
    1)复查系统规模和目标;
    2)研究目前正在使用的系统;
    3)导出新系统的高层逻辑模型(数据流图、数据字典);
    4)重新定义问题;
    5)导出和评价供选择的解法(物理解决方案);
    6)推荐行动方案;
    7)草拟开发计划;
    8)书写文档提交审查。

    数据字典

    数据字典:对数据流图中包含的所有元素的定义的集合;

    可行性研究阶段,数据流图与数据字典共同构成系统的逻辑模型。

    数据字典应该对下列元素进行定义:
    1)数据流;
    2)数据元素(数据流分量);
    3)数据存储;
    4)处理。

    数据字典的内容

    数据字典中记录数据元素的信息:
    一般信息(名字、别名等)
    定义
    使用特点(值的范围、频率等)
    控制信息(来源 、用户等)

    定义数据的方法
    1)数据元素字典定义
    其定义的基本内容有:
    A.数据元素编号、名称及其含义;
    B.数据类型和长度;
    C.合理取值;
    D.其他内容,如它与其它数据的逻辑关系等。
    2)数据流字典定义
    其定义的基本内容有:
    A.数据流编号及名称;
    B.数据流来源;
    C.数据流去处;
    D.数据流的组成;
    E.流通量;
    F.峰值。
    3)数据存储字典定义
    其定义的基本内容有:
    A.数据存储编号及名称;
    B.数据存储的组成;
    C.其它要求。
    4)数据处理字典定义
    其定义的基本内容有:
    A.数据处理编号及名称;
    B.简单描述;
    C.输入/输出;
    D.功能描述;
    E.有关数据存储。

    数据字典的用途
    1. 作为分析阶段的重要工具;
    2. 数据元素的控制信息非常有用;
    3. 有助于开发数据库。

    数据字典的实现
    实现数据字典:
    1)程序处理;
    2)卡片式人工书写;

    成本/效益分析

    成本估计
    1)代码行技术
    软件成本 = 每行代码的平均成本×估计的源代码总行数
    2)任务分解技术
    软件开发项目分解为若干个相对独立的任务,分别估计每个单独任务的成本:
    单独任务成本 = 任务所需人力估计值×每人每月平均工资;
    软件开发项目总成本估计 = 各个单独任务成本估计值之和。
    常用的办法是按开发阶段划分任务,典型环境下各个开发阶段需要使用的人力百分比大致如下:
    这里写图片描述
    3)自动估计成本技术
    采用自动估计成本的软件工具估计。

    可行性分析报告
    说明该软件开发项目的实现在技术上、经济上和社会因素上的可行性,评述为了合理地达到开发目标可供选择的各种可能实施方案,说明并论证所选定实施方案的理由。
    项目开发计划


    欢迎关注我的微信个人订阅号
    这里写图片描述
    每天多学一点0.0

    展开全文
  • 数据字典

    2018-07-06 17:47:00
    数据字典的主要作用:数据字典和数据流图共同构成系统的逻辑模型。没有流图数据字典难以发挥作用。没有数据字典,数据流图就不严格。 数据字典(Data dictionary):是一种用户可以访问的记录数据库和应用程序源...
  • 软件工程数据词典

    2017-09-19 11:12:47
    数据词典是关于数据的信息的集合,也... 数据流图和数据词典共同构成系统的逻辑模型,没有数据词典,数据流图就不严格,然而没有数据流图,数据词典也难于发挥作用。只有数据流图和对数据流图中每个元素的精确定义放
  • 软件工程一些简答题 1. 耦合性和内聚性有几种类型,其耦合度,内聚强度的顺序如何 耦合度由低到高: 非直接耦合 数据耦合 标记耦合 ...数据流图和数据字典共同构成系统的逻辑模型,没有数据字典,数据流图就不严..
  • 数据的逻辑结构是对数据元素之间的逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合中的若干关系来表示。数据的逻辑结构有两个要素:一是数据元素的集合,通常记为D;二是D上的关系,它反映了数据元素之间...
  • 模型基于事件触发的流程方法和共同业务理念,通过多层映射的构建过程,得到管理参考业务逻辑集,实现ERP软件与企业管理系统的有机融合。ERP管理参考模型及其方法体系从技术层面提高了ERP项目实施的可操作性,支持ERP...
  • MFCPC端系统

    2017-11-01 10:42:46
    最后,编译,则通过类库实现了应用程序特定的逻辑。 封装 构成MFC框架的是MFC类库。MFC类库是C++类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和...
  • 而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。 3、 系统的易用性和...
  • 1.1.2软件层特征每一层由一组相关类或组件构成共同完成特定功能层与层之间存在自上而下依赖关系,上层组件访问下层组件API,下层不应该依赖上层。即解耦。每一层对上层公开API1.1.3Ja...
  • 而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。 3、 系统的易用性和...
  • 优美、秀丽界面,方便实用查询与维护功能共同构成了“人事工资管理系统”。 关键词:VB,SQL SERVER,数据库,软件工程,管理信息系统 目 录 摘 要 I Abstract II 第1章 绪论 1 第2章 相关工具基本理论 3 ...
  • 因此,本文试图通过自上而下的系统概念来建立代表法律系统的框架结构,同时使用自下而上的Object-Method-Property模型来构建本体基础结构,这可以共同构成两者之间的有用桥梁。在维持我们所知的法律制度的同时,这...
  • 其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...
  • 3. 数据流图和数据字典共同构成系统的 _逻辑_模型,是需求规格说明书的主要组成部分。 4. 软件生存周期是指一个软件从提出开发要求开始直到 软件废弃为止的整个时期。 1.数据字典是对数据流图中的数据流,加工、...
  • 需求分析 确定待开发软件的功能、性能、界面等要求,从而确定系统的逻辑模型 用户、项目负责人、系统分析员 需求规格说明书 软件开发阶段——待开发软件“怎么做” 软件设计 概要设计 模块分解,确定软件的结构,...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    统一建模语言是一种通用的可视化建模语言,用于对软件系统的制品进行规范化、可视化处理,然后构造它们并建立它们的文档。 UML的发展过程 图 与 语言 谁一级棒? UML的优势 过去数十种面向对象的建模语言各自为战...
  • SoC设计理念与传统的系统设计不同,其设计技术是以系统功能为出发点,将系统的处理机制、模型算法、芯片结构、各个层次的逻辑电路直至器件的设计紧密结合,在一个或若干个芯片上完成整个系统功能。SoC设计不是以功能...
  • 需求分析 确定待开发软件的功能、性能、界面等要求,从而确定系统的逻辑模型 用户、项目负责人、系统分析员 需求规格说明书 软件开发阶段——待开发软件“怎么做” 软件设计 概要设计 模块分解,确定软件的结构,...
  • 还涉及到软件系统的目标、软件系统提供的服务、软件系统的约束和软件系统运行的环境。它还涉及到这些因素和系统的精确规格说明,以及系统进化之间的关系。 需求分析的基本任务包括: (1) 抽取需求 分析现行系统...
  • [大二下]软件工程删减后复习题

    万次阅读 2017-06-21 21:50:53
    软件工程复习题1.doc填空题1....3.数据流图和数据字典共同构成系统的 _逻辑___模型,是需求规格说明书的主要组成部分。4.划分模块时尽量做到__高内聚、低耦合______,保持模块的独立性,尽量使用公...
  • 软件工程知识点

    2012-12-02 21:34:25
    通过系统的外部事件、内部状态为基本元素来描绘系统的工作流程,这种建模方式比较适合于描述一些依赖于外部事件驱动的实时系统。 5.需求有效性验证 需求有效性验证是指对已经产生的需求结论所要进行的检查与评价。...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

共同构成系统的逻辑模型