1、东南大学本章主要知识点本章主要知识点 程序工作方式与交互工作方式的区别和联系 程序的本质 程序构造的基本方法 基本数据组织方法 基本数据处理方法 程序设计的三要素 程序与软件的关系 软件和软件开发的关系 软件开发的工程化管理 软件开发方法相关概念和知识 程序是人类思想的结晶,最能反映人类的智慧和创造性。它反映了人类解决问题的思维和方法。程序的构造是一个动态过程,一般涉及语言、软件模型、环境、应用体系、工程化管理等多个方面。因此,程序工作方式相对于交互式工作方式,对人的要求更高。程序是最能反映人类的智慧和创造性。在交互方式中,人与计算机是联机的。在程序方式中,人与计算机是脱机的。程序方式中,人们
2、通过某种计算机语言,针对需要解决的特定问题,事先将自己处理问题的思路和方法编写成程序,然后通过发行和运行程序达到解决问题的目的。SHELL处理层(交互式交流方式)系统调用接口操作系统功能集硬件系统人(用户)人(用户)程 序(程序式交流方式)联机工作方式中,人的主动性比较高。面对遇到的问题,可以随机应变。脱机工作方式中,构造程序时必须考虑许多问题,要考虑到未来程序运行时的各种各样可能出现的问题及其对策。另外,程序的构造还涉及计算机语言、软件开发方法、软件开发环境、应用体系等方面的知识。特别是,涉及处理问题的各种基本应用模式。因此,对人的思维要求更高。两种工作方式的区别类似于人类社会中的讲话和写作
3、交互式使用:说话,容易。程序式使用:写作,较难。两种方式既有区别又有联系,区别主要在于两者的表现形式和层次不同,而从思维本质的角度看,两者是一致的。事实上,程序设计与构造建立在交互式使用方式基础上。一方面,程序的开发环境、运行配置环境等,需要交互式使用方式;另一方面,程序构造的语言,是交互式交流方式中命令语言的拓展;再者,针对具体问题的处理,两者的思维本质是一致的。程序是指一组预定的工作指令流,可以直接通过计算机执行,使具体的现实世界中的客观问题得以在计算机世界中智能化再现,从而使具体问题得到解决。程序设计是指程序的形成过程,就是人类运用其逻辑思维能力以及符号处理能力来构造一个特定的符号处理器
4、,使得借助于计算机这样一种设备,能够完成预定的计算。程序是人类思维的产物,是人类思维火花的时间定格,呈现静态特征。程序尽管固化了人类的智慧,但却没有展示人类形成该程序的动态思维过程 程序设计产生程序的过程,是动态的。程序设计是一种创造性劳动,或是说脑力劳动,反映了人类思维的规律和模式。伴随整个程序构造过程而形成的各种人类的思维活动,对于程序的最终形成起到核心作用。程序的形成过程比程序本身重要得多,程序设计与构造的涵义比程序的涵义要丰富得多。程序设计与文化有着很深的渊源。不同的文化对程序设计有影响。递归(recursion)是计算机思维的核心思想之一,其本质反映的是一种跳跃性思维方法。递归反映了
5、事物间的规律,即整体是由局部构成的,整体又可以充当粒度较大的局部,整体和局部的关系是辨证统一的。理解事物间规律的视角,即对于一个问题中的整体和局部的理解,取决于看待问题的角度和视角,而这种角度和视角是随时会改变和调整的。这也就是所谓的当前的概念。递归和当前两者相互结合,形成完整的辨证思维逻辑。基本逻辑控制规则来源于自然社会生活中人们处理各种问题时所采取的策略和方法,对这些策略和方法的归纳和抽象,就产生了基本的逻辑控制策略和方法。计算机程序设计中,有顺序、分支、循环、递归四种基本逻辑控制规则。对于高性能高质量的应用,其关键显然不在于四种基本逻辑控制规则本身,而是在于如何应用这四种基本逻辑控制规则
6、。一、定义一、定义xxxx.处理顺序单分支双分支循环1循环2递归多分支BBBA基本处理步分支组合步循环组合步程序体双分支体循环体A 程序B 子程序从逻辑形态和概念上看,A等同于B,因为无论A还是B,它们都是由三种基本的处理步(处理步、分支组合步和循环处理步)组成。如果将A看成是一个大程序,则B可以看成是一个小程序,由此又可以引申出大程序中包含小程序,小程序的外面是大程序,即程序之中有程序,程序之外是程序的思想。基本逻辑控制规则的组合也是递归思想的一种应用。对于分解后的各个具体模块,可以按人们的思维逻辑进行任意组合,以实现人类思想的再现。同样一个问题,不同的人有不同的组合方法,产生出不同的程序。
7、可见,最终用于问题解决的程序,本质上反映了各个人的具体的思维。程序构造的基本方法:数据组织+数据处理。数据组织相当于组织和提供各种素材;数据处理则是如何利用这些素材,进行加工处理,得到最后的成品。针对同样的数据,不同的人可以有不同的处理方法,这些方法都能得到需要的结果。这反映了每个人的思维特征和对问题的处理方法。数据组织和数据处理存在一定的思维联系。也就是说,一种数据组织方法,隐含地决定了对这些数据的存取方法。同样,一种数据处理方法也隐含地决定了数据应有的组织方法。一、分类一、分类 根据处理所涉及的数据量和种类,数据组织一般分为内存数据组织和外存数据组织两大类。内存数据组织是指用于数据处理的数
8、据量一般比较少,所有数据都可以存放到计算机的内部存储器中,数据处理程序可以直接使用这些数据。内存数据组织的基本方法有:简单数据组织、线性数据组织、层次数据组织和网状数据组织一、分类一、分类 外存数据组织是指用于数据处理的数据量比较大,不可能将所有数据都存放到计算机的内部存储器中。只有当前处理所涉及的一部分数据放在内存,而大部分暂时不用的数据则存放在外部存储器中。因此,数据处理程序必须经过专用的数据管理系统,根据处理的需要不断从外部存储器中将当前需要用到的数据调入内部存储器中。外存数据组织中的专用数据管理系统一般有文件系统和数据库系统。数据逻辑组织的类型内存数据组织简单数据组织 线性数据组织层次
9、数据组织树 网状数据组织图文件系统数据库系统 外存数据组织 数据组织的概念分为两个层次:逻辑组织和物理组织。逻辑组织是指一种抽象描述,只关心数据之间的组织关系,不涉及数据在计算机内部的具体组织。物理组织是指数据在计算机内部的具体组织,它涉及计算机基本组成结构中的存储器概念。简单数据组织一般用于对少量、相互之间没有太大关系的数据的组织。xlkzy线性数据组织一般用于同类的批量数据组织。这种数据组织方法的优点是,整批数据用同一个名称,表示他们是属于同一类数据。其中的每一个具体数据通过一个序号给出。可见,这种数据组织方法隐含在对其处理中,一般都是通过循环完成。x1x2x3x4x5x6x7x8x9kx
10、1x2x3x4x5x6x7x8x9k+(5-1)*2线性数据组织在计算机中的具体实现一般有两种形式:连续组织和非连续组织。连续组织是指将这批数据存放到计算机内部存储器中某个连续的区域,数据名表示这个连续区域,根据编号可以计算出与该编号对应的那个数据所存放的区域。非连续组织是指将这批数据分散存放到计算机内部存储器中,每个数据存放一个位置,一般而言,这些位置是不连续的。但是,为了保持这批数据在逻辑上的线性关系,必须为这些不连续的位置建立联系。非连续组织非连续组织中建立联系具体方法是,扩大每个数据的存储区域,该区域除了存放数据外,还可以再存储一个位置信息。然后,根据这批数据在逻辑上的线性关系,将后面
11、一个数据存放的位置登记到前面一个存放数据的区域中,完成两个相邻数据的逻辑关系建立。对于最后一个数据,因为它的后面没有其他数据,因此,可以将其存放区域中记录下一个数据的位置信息的部分填上一个特殊位置值,表示已经结束。对于第一个数据,可以将它的存放位置登记到一个特定的名称中,表示整个这批数据的起点位置。这种数据组织实现方法也称为这种数据组织实现方法也称为链表链表结构,因结构,因为它像一根链条。为它像一根链条。152010320043520006720302205666203420102000203020342056-120043153567662-1H连续组织方式中,每当插入或删除一个数据时,该数
12、据后面的所有数据都必须向后或向前移动。因此,这种数据组织方法一般适用于一批数据相对固定的应用场合。非连续组织方式中,每当插入一个数据时,可以将这个数据存放在任意一个允许存放的位置,然后通过修改位置信息完成插入。同样,每当删除一个数据时,也可通过修改位置信息完成删除。在35和67之间插入一个56,则可以先将67的位置(在35的存储区域中)登记到56的存储区域中;再将56的位置(可能是在某个名称中)登记到35的存储区域中。5620043153567662-1H56203035206020043153567662-1H56(1)(2)(3)(4)2060T2060T2060T图3.7a 插入56 3
13、153567662-1200435H2060T206056-1T2010200015200420103203020003520302034672056-122034205666206056T20602030申请空间填充数据修改地址修改地址3153567662-12004H56 要删除35,则可以先将67的位置(在35的存储区域中)登记到15的存储区域中,再将35的存储区域归还给计算机。1520043153567662-1H2030352030200431567662-1H(1)(2)20102000图3.7b 删除353153567662-12004H201015201020001520042
14、0103203020003520302034672056-122034205666200035修改地址31567662-12004H20302030 非连续数据组织方法不存在数据移动。因此,这种数据组织方法一般适用于数据插入删除比较频繁的应用场合。尽管非连续组织方法中不涉及数据的频繁移动,节省了大量时间。但它为了保持数据在逻辑上的线性关系,每个数据存放区域都增加了用于记录下一个数据存放位置的空间,是牺牲空间而换取时间。如果对通过线性数据组织方法组织的一批数据操作时施加如下规定:数据的增加和删除必须在同一端进行,每次只能增加或删除一个数据元素。则这种线性数据组织方法及其应用就称为栈结构。其中,数
15、据增加和删除的一端称为栈顶,另一端称为栈底。增加数据的操作称为压栈或进栈,删除数据的操作称为出栈。栈结构也称为LIFO(Last In First Out)结构。栈结构也称为先进后出结构(FILO:First In Last Out),图3.8是栈的示意图。栈结构示意图 栈底栈生长方向栈顶压栈出栈栈顶位置指示栈底栈底栈顶栈顶栈进栈栈底栈底栈顶栈顶栈出栈 如果对通过线性数据组织方法组织的一批数据操作时施加如下规定:数据的增加和删除分别在两端进行;每次只能增加或删除一个数据元素;则这种线性数据组织方法及其应用就称为队列结构。其中,增加数据的一端称为队列尾,删除数据的一端称为队列头。增加数据的操作称
16、为入队或进队,删除数据的操作称为出队。队列结构也称为FIFO(First In First Out)结构。队列结构示意图 队列尾队列头入队出队队头位置指示队尾位置指示队列尾队列尾队列头队列头队列进队队列尾队列尾队列头队列头队列出队文件(file)是指外存中一组相关信息的集合,并有一个名称标识。文件系统(file system)是用于管理文件的软件系统。通过文件系统提供的功能,人们可以方便地管理和使用文件。针对大容量数据,必须将其存储在外存中。为了对这些数据进行有效管理,操作系统中都提供相应的文件系统,以文件的方式组织数据。由于以文件方式组织的数据是存放在外存,因此必须通过一定的硬件设备驱动和读
17、写才能进行数据访问。文件系统可以屏蔽这些复杂的硬件控制问题,以一种抽象的逻辑视图进行文件的管理。文件的基本结构记录1记录2记录n数据项字符1 字符2流式文件记录式文件针对文件方式的数据组织,数据的访问一般要经过文件建立(create)、文件使用、文件删除、文件移动等基本操作。其中,文件使用必须经过打开(open)、读/写(read/write)、关闭(close)三个基本步骤针对大容量数据组织和管理,还有专门的方法数据库系统技术。1)算法及其描述)算法及其描述算法是一个有穷的指令集,这些指令为解决某一个特定任务规定了一个运算序列。算法具有如下特点:有0个或多个输入、有一个或多个输出、具有确定性
18、、具有有穷性、具有有效性。算法与程序的区别:算法与程序的区别:算法与程序是不同的,程序可以不满足有穷性特点。算法与数据组织密切相关,它是在某种数据组织结构上的一种解决问题的计算方法。算法的特点:算法的特点:针对同一个问题,会有不同的数据组织方式和不同的算法。衡量一个算法的好坏,主要是通过该算法执行时所耗费的时间和空间来比较,这种比较是一种相对比较,一般只给出量级关系。一般而言,算法的量级有O(1)、O(n)、O(log2n)、O(nlog2n)、O(n2)、O(n3)等。O(m+n)与O(n)属于同一量级,即线性级;O(100)和O(1)属于同一量级,即常量级(其中,对于空间耗费而言,m、n表
19、示算法执行时耗费的空间大小,一般以字节为单位计数;对于时间耗费而言,m、n表示算法中指令执行的次数)。算法的抽象本质在于算法与它的表示之间的区别。也就是说,算法本身是抽象的,它只是反映一种解决问题的方法。但这种方法必须通过某种形式展示出来,这就是具体的算法表示和描述。算法的描述可以有多种形式,可以有语言方式、图形方式和表格方式。每一种形式还可以有多种不同的形态。比如,语言方式就有自然语言、类计算机语言和计算机语言三种描述。图形方式有流程图、N-S图、PAD图等多种方式。N-S图是一种结构化的流程图,通过一个矩形框表达一个对数据的基本处理,并定义三种基本的元素框(元素框内可以包含基本处理矩形框)
20、,通过三种基本的元素框可以按需要进行任意逻辑组合,实现处理逻辑的控制策略,从而表达一个完整的处理问题的算法。N-S图很容易映射为所要求的某种具体的计算机语言。合P成立?是否AB当P成立直到P成立ABCCA处 理顺序结构元素分支结构元素循环结构元素A、B、C是处理名(可以是基本处理或基本处理集);P是条件;C是循环体N-S图描述方法,体现了由大到小、由粗到细的逐步求精的分析和设计方法,这种方法比较符合人类的思维习惯。这种方法的核心在于用少量的几个符号,可以描述无限的问题,呈现出递归的分析思想。N-S图应用的技巧在于深刻领悟这种富有哲理的递归思想,从外到内,逐层运用,在外层时不要看内层,在内层时不
21、要看外层,始终保持当前只看到一个层次,这样无论多复杂的问题,都可以看得相当简单。【例3-1】给定一个正整数N,如果N大于0,输出“大于0!”;否则,输出“小于等于0!”。输入:整数 NN0?输出:大于0!输出:小于等于0!TF输入:正整数 N输出:输出:TFN0?大于0!小于等于0!【例3-2】输入10个整数,求它们的和。输入:整数 NS 0,I 0S S+NI I+1当I=10时输出:SS 0,I 0I I+1I I+1当IN-1或W=1W=0输出:N是素数!输出:N不是素数!TF输入:正整数 NW 0,I 2R N/I的余数R=0TFW 1I I+1直到IN-1或W=1W=0输出:N是素数
22、!输出:N不是素数!TFR N/I的余数R=0TFW 1I I+1 常用数据处理算法排 序 查 找 递 归 回 溯 151895231013716151895231013716当前需当前需要冒泡要冒泡的位置的位置从后向前冒泡从后向前冒泡不需要交换不需要交换需要交换需要交换需要交换需要交换71371072397不需要交换不需要交换需要交换需要交换5185155从后向前冒泡从后向前冒泡原始数据排列原始数据排列冒泡排序冒泡排序环境是指程序作用的范围,不同的环境对程序的构造有不同的要求。应用是指对具体问题的解决方法,应用与环境是分不开的,环境是应用赖以存在的基础。语言是一种粘合剂,将应用和环境连接起来
23、。一方面,语言必须将应用中的各种应用模式、及其逻辑组合描述清楚,也就是将人的思维形式化,并记录下来。另一方面,语言本身又考虑了环境的特征,将应用问题过度到具体环境,实现最终的应用问题求解。程序设计语言(也称程序描述语言、程序语言等)是计算机语言。它用于人与计算机的交流。环境语言应用计算机语言的基本体系结构 基本符号常量、变量保留字、运算符等表达式语 句函 数类、包程序基本符号词 汇短 语句 子段 落描 写文 章语言的基本体系结构 计算机程序设计语言中,数据类型的概念特别重要,它类似于自然语言中的词性。在计算机程序设计语言中,不同的数据类型定义不同的词性,用于指明该类词汇所表达的数据的性质、数据
24、的大小范围,以及在该类数据上可以施加的基本运算。数据类型一般有基本类型和复合类型两大类,复合类型是由基本类型合成的。数据类型基本类型复合类型算术类型字符类型枚举类型整型实型单精度双精度数组类型指针类型用户自定义类型 计算机语言中的表达式一般有算术表达式(用于运算)、关系表达式(用于表达基本条件)和逻辑表达式(用于表达复合条件)三种。计算机语言中的语句一般有注释语句、计算赋值语句、输入/输出语句和流程控制语句四种。函数是某种处理逻辑的抽象,也就是解决问题的方法的抽象,这种方法独立于具体的处理对象。类是将某个数据集、以及该数据集上的多种处理逻辑(函数)统一考虑的一种机制,它比函数的描写粒度大。类用
25、于刻画问题域中的各种实体,数据集反映实体的静态属性,函数集反映实体的动态行为属性。包一般是由多个类组合而成,这些类都是用于处理同一种问题域的各个方面。包中的类可以是有语义联系的,也可以是相互相对独立的。根据计算机本身的发展,计算机语言经历三个发展阶段,每个发展阶段具有不同性质的计算机语言。三个发展阶段的计算机语言分别是机器语言(也称为二进制语言)、汇编语言和高级语言。机器语言直接面向计算机本身。这种语言通过0和1的各种排列组合,表达不同的语义。0和1可以直接控制计算机本身的各种电子元件的开和关,因此,这种语言可以直接交给计算机阅读。汇编语言是通过一定的助记符号,如英语单词的缩写等,代替具有固定
26、语义的0、1排列,从而使得人类可以在符号层面进行程序的描述、阅读和维护。高级语言是一种独立于具体计算机的语言,他采用近似于自然语言的结构。这种语言中所涉及的各种数据组织和数据处理都是建立在一些抽象的名称基础上,这些名称可以代表具体计算机的存储位置。可见,这与人类处理问题的方法类似。汇编语言向人靠近了一步,但却与计算机远离了一步。高级语言面向人,但计算机不认识。如何解决这一问题?如何解决这一问题?汇编:将汇编语言描述的程序转变成等价的用机器语言描述的程序的转变过程。编译或解释:将高级语言描述的程序转变成等价的用机器语言描述的程序的转变过程。高级语言源程序解释程序机器语言程序(目标程序)解释 高级
27、语言源程序编译程序机器语言程序(目标程序)编译 汇编语言程序汇编程序汇编语言源程序汇编程序机器语言程序(目标程序)汇编 高级语言源程序词法分析语法分析语义分析优化代码生成目标程序错误处理表格管理分析综合解释与编译 面向数值计算程序设计的高级语言(FORTRAN)面向结构化程序设计的高级语言(ALGOL、PASCAL)面向对象的程序设计高级语言(C+)面向系统程序设计的高级语言(C)面向网络化环境的对象程序设计的高级语言(Java)面向人工智能程序设计的高级语言(FORTRAN)机器语言汇编语言图3.35 高级语言基本分类 为了描述用于解决某个具体问题的程序,一方面涉及到问题求解的算法;另一方面
28、还涉及计算机语言的相关知识。针对计算机语言,除了它的词汇、短语和句子外,每种语言还定义了其自身的篇章结构(程序结构)。只有按照语言所定义的格式书写的程序,才能通过翻译程序的翻译,最终被计算机正确执行。事实上,翻译程序就是在语言格式定义的基础上进行翻译的。尽管不同语言有不同的格式定义,但总的来说,程序一般包含数据组织说明部分和算法处理逻辑描述部分,这与计算机的基本工作原理相吻合。因此,程序=数据结构+算法。程序结构全局数据组织说明区分数据处理模块说明区局部数据组织说明区局部数据处理说明区程序片段1程序全局数据组织说明区分数据处理模块说明区局部数据组织说明区局部数据处理说明区主数据处理模块说明区局
29、部数据组织说明区局部数据处理说明区主程序片段全局数据组织说明区分数据处理模块说明区局部数据组织说明区局部数据处理说明区程序片段n程序设计环境一般分为两个层面:运行支撑环境和程序开发环境。前者是指程序最终运行的计算机环境,它一般是指操作系统。后者是指用于支持程序构造的写作环境,它一般是指各种开发工具。运行支撑环境定义了程序执行的基本模型。目前,一般有两种运行模型:主动式和被动式。主动式模型中,程序本身控制自己的输入和输出。因此,其程序的基本结构是一体式的。被动式模型中,由运行支撑环境控制输入和输出,并将输入和输出以消息方式通知程序。因此,其程序的基本结构是分离式的,一个程序分为两个部分:初始化部
30、分和消息处理部分。被动式模型也称为事件驱动模型。主动式模型主动式模型界面消息处理程序得到反馈使用者操作发送消息消息队列操作系统界面消息处理程序消息调整界面调整界面被动式模型被动式模型 程序开发环境本身也是一种程序,在运行支撑环境的支持下工作。这种特殊程序主要用于辅助其他程序的构造。程序开发环境的使用,一般涉及编辑、编译、连接、调试、执行等基本阶段。这也是程序构造的基本过程。程序开发环境将运行支撑环境定义的程序执行基本模型进行了重新包装,并对程序的结构进行了抽象,从而能够简化人类构造程序的工作。程序开发环境的具体实现一般有两种:分离式和集成式。前者将程序构造的各个阶段分离,分别提供相应的工具。集
31、成式将程序构造的各个阶段集成,提供一个统一的集成开发环境。集成开发环境提供的附加功能比较多,但由于它在幕后进行太多的工作,并对程序的结构进行了一些扩充的定义。因此,它会约束人的思维。学习语言的目的是为了应用,但学会语言并不代表掌握语言的应用。为了实现语言的应用,必须掌握一些基本的程序设计规律和思维方法,即基本模式及其建构方法。应用模式是指程序设计中不断出现的各种设计规律,这些规律反复用于类似的应用问题的解决。模式建构是指多个应用模式,按实际应用问题的需求,进行组合的过程。模式发掘与模式建构,反映的是一种认识问题、解决问题的方法和思想,这种方法和思想符合人的认知规律,映射到程序设计的学习,反映的
32、是一种学习方法的建立。这种学习方法可以培养学习者的正确的思维,真正掌握程序设计的要领和精髓。程序设计应用模式发掘及其建构策略建立,主要指两个方面:应用模式发掘(涉及各种技术思想的感悟)和模式建构策略建立(递归思想应用)。模式发掘和模式建构策略建立的具体执行,一般涉及到两个方面:方法和经验。它们相互相成。方法比经验更为重要。模式及其建构的思想本质,反映的是一种高级学习活动,体现了一种学习的方法,是一种元认知能力的培养。触类旁通的思想内涵即体现于此。模式及其建构同时也反映出递归的思想内涵。模式描述的模板定义模式描述的模板定义名称 模式的名称语境 模式可以适用的情形问题 模式解决的问题解决方案 基于
33、该模式的基本解决方案原理特征 模式的特征抽象样例 模式应用的一个样例说明实现说明 使用该模式时注意的事项参见 相关的模式名称 模式模式11 循环模式及其建构循环模式及其建构名称名称 循环三步语境语境 用于重复处理问题问题 处理方法的重用解决方案解决方案 通过循环语句实现特征特征 三步曲(初始条件、入口条件、修正条件)样例样例 求 P=1+2+3+4+5+6+100。实现说明实现说明 在特殊语言中,入口条件与修正条件可以合二为一,比如在C/C+语言中,去掉修正条件,将入口条件改为 i+=100;在特殊语言中,三个部分的具体表达形式可能不同。该模式重点是三个条件。参见参见 累加模式、累乘模式sum
34、 0;i 1i 1i=100i=100sum sum+ii i+1i i+1输出:sum初始条件入口条件修正条件i 1i 1i=100i=100i i+1i i+1 模式建构案例模式建构案例11 计算计算S=1+3+5+S=1+3+5+99+99。本题是循环模式的应用。只是对循环的修正本题是循环模式的应用。只是对循环的修正条件条件i ii+1i+1改为改为i ii+2i+2。S 0;i 1i 1i=99i=99S S+ii i+2i i+2输出:S修正条件i i+2i i+2 模式建构案例模式建构案例22 输入一批整数,以输入一批整数,以-1-1为终止。为终止。本题是循环模式的应用。本题是循环
35、模式的应用。输入:整数 N输入:整数 NN-1N-1打印输出:N修正条件输入:整数 N输入:整数 N初始条件入口条件 针对一个大型复杂的问题,往往会涉及大量的程序,这些程序不是一个人能完成的,需要由许多人共同完成。在程序的构造过程中,会涉及许多问题,比如人员的变动、问题本身需求的改变等。除了程序设计外,还有人员管理、项目管理、文档管理等工作。因此,仅仅通过程序和程序设计的概念来描述整个大型复杂问题的求解过程,显然是不够的。为了顺利地描述整个过程,计算机科学中将以程序设计和构造为生产力的活动称为软件开发,以便与计算机硬件生产相对应。同时,借鉴其他工程学科的方法,引入工程化的管理思想,以工程化管理
36、的方法管理软件的开发活动。软件=程序+开发、使用和维护程序所需的所有文档。软件危机导致软件工程(软件开发的“工程化”管理)软件开发的“工程化”管理与土木工程等传统应用工程领域的工程化管理的主要区别:传统工程领域构建复杂设备时可使用预先定义的组件,而在软件领域,由于已有软件的内部设计可能依赖某个特殊应用目的,而难以复用,从而需要重新设计;传统工程领域进行产品开发时,允许一定的误差,而软件只有正确和不正确之分,不能出现误差;传统工程可通过定量方法度量产品的质量(如故障的平均时间),但对软件产品质量的定量度量方法还缺乏理论基础,需要进一步研究。软件工程中最基本的概念是软件生命周期。软件生命周期是指软
37、件产品或软件系统从产生、投入使用到被淘汰的全过程统。通常,将软件生命周期分为五个阶段。需求分析(Requirement Analysis)系统设计(System Design)编码实现(Coding)系统测试(Testing)运行维护(Running and Maintenance)软件开发模型:为了更好地实施软件开发的工程化管理而建立的良好的包括软件开发全部过程、活动和任务的结构框架。软件开发模型的种类:瀑布模型、演化模型、螺旋模型、喷泉模型和智能模型软件开发模型只是表示了软件开发过程、活动和任务的结构框架,是一种宏观的指导思想。而对于具体的软件开发过程,还需要微观的软件开发方法。软件开发方
38、法是软件开发过程所遵循的办法和步骤。开发过程一般包括需求、设计、实现、确认等活动。需求分析和系统设计是软件开发过程中最核心的活动。典型的针对需求分析和系统设计的软件开发方法有:结构化方法、面向数据结构的方法和面向对象方法。2成绩处理1报名处理成绩册成绩通知单录取通知单成绩分布表试题难度分析表合格标准成绩清单不合格成绩单考生名册报名单不合格报名单准考证1.1检查报名单合格报名单考生名册不合格报名单一个简单的数据流图+eat()+sleep()+walk()-name:String-gender:Boolean-birthDate:DatePersonPerson类定义RadioRadioTVTV
39、+turnOn()+turnOff()ElectricalEquipmentElectricalEquipment接口实现类CPUCPUMemoryMemoryMainboardMainboard1*ComputerComputer1*1*类聚合+haveLessons()-studentIDStudentStudent+eat()+sleep()+walk()-name:String-gender:Boolean-birthDate:DatePersonPerson类继承UML的几个图形语言元素软件复用是指基于已有软件的各种有关知识建立新的软件,以缩减软件开发和维护的费用、提高软件生产率和质
40、量的一种技术。软件复用一般反映在两个层面:抽象的思想、概念与方法的复用和具体的软件预制件的复用。软件复用形式主要有两种:垂直式复用(同一应用领域中的复用)和水平式复用(不同的应用领域中之间的复用)。构件化软件开发方法强调标准(零件制作所应满足的规定,以便零件通用、交互和集成)、零件(软件构件,组装件)和生产线(也称框架FrameworkFramework。基于标准和零件,定义大规模产品生产的方法。目前流行的标准主要有三种:COM/DCOM/OLE/ActiveX/.NET AssemblyCOM/DCOM/OLE/ActiveX/.NET Assembly系列系列、CORBA/CCMCORBA
41、/CCM系列系列和JavaBeans/EJBJavaBeans/EJB系列系列。Microsoft Visual C+Microsoft Visual C+开发环境支持的生产线开发环境支持的生产线 支持复合文档框架的开发环境样例支持复合文档框架的开发环境样例 软件开发方法和技术的发展历程,反映了人类对软件及其构造方法的认识的深入。结构化方法本质上以功能(数据处理)为核心;面向数据结构的方法本质上以数据组织为核心;上述两种方法都是将数据组织与数据处理分开考虑。面向对象方法实现了数据组织与数据处理的统一考虑。由于面向对象的方法源自于面向对象的程序设计语言,因此,对面向对象方法的思想的认识受到一定限
42、制,也就是说,没有明确区分面向对象方法的思想与面向对象思想的具体实现。构件化方法可以说是面向对象方法思想的另一种具体实现,它对面向对象的思想做了广义的演绎。这种认识建立在抽象基础上,独立于各种具体的语言和环境,使得面向对象方法所提倡的封装、继承、多态等技术得到淋漓尽致的发挥,实现最大限度的软件重用。从而真正展示出面向对象思想应有的精华。构件化设计方法的诞生,其重要意义不仅是广义的演绎了面向对象的思想,更是在于它引起了软件开发的革命性变革,将软件开发形式从手工作坊方式过渡到大工业生产方式,从而实现了与硬件产业、机械产业、电子产业等等同样的生产方式,真正解决了大规模软件开发的问题。引起了传统软件开发思维和观念的变革。文档是软件的重要组成部分,文档编制成为软件工程的一个重要方面。针对一个软件系统,文档主要有两类:用户文档和系统文档。对设计文档的编制,从软件开发初始分析开始,这种文档创建就应不间断,强调文档与设计的同步性同步性。解决同步性的一种途径是使用计算机辅助软件工程(Computer Aided Software Engineering,CASE)工具,它可以实现设计、修改与文档的自动同步。Thanks!
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。