计算机二级公共基础知识(全)_第1页
计算机二级公共基础知识(全)_第2页
计算机二级公共基础知识(全)_第3页
计算机二级公共基础知识(全)_第4页
计算机二级公共基础知识(全)_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.1算法考点1算法的基本概念计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。算法(algorithm)是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,同时令的有限序列,其中每一条指令表示一个或多个操作。义性。finiteness必需能在执行有限个步(4)拥有足够的情报:要使算法有效必需为算法提供足够的情报当算法拥有足够的情报时,此算法才最有效的;而当提供的情报不够时,算法可能无效。2算法的基本要素(1)算法中对数据的运算和操作:每个算法实际上是按解题要求从环境能进行的所有操作中选择合适的操作所组成的一组指令序列。计算机可以执行的基本操作是以指令的形式描述的。一个计算机系统能执行的所有指令的集合,称为该计算机系统的指令系统。计算机程序就是按解题要求从计算机指令系统中选择合适的指令所组成的指令序列在一般的计算机系统中,基本的运算和操作有以下4类:④数据传输:主要包括赋值、输入、输出等操作。(2)算法的控制结构:一个算法的功能不仅仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。算法中各操作之间的执行顺序称为算法的控制结构。组合而成。(3)算法设计的基本方法各种方法之间往往存在着一定的联系。哪些是不需要的。会很大。因此,在用列举法设计算法时,使方案优化,尽量减少运算工作量,是应该重点注本质上讲,归纳就是通过观察一些简单而特殊的情况,最后总结出一般性的结论。递推是指从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果。其中初关系式往往是归纳的结果。对于数值型的递推算法必须要注意数值计算的稳定性问题。人们在解决一些复杂问题时,为了降低问题的复杂程度(如问题的规模等),一般总是将进行综合,这就是递归的基本思想。递归分为直接递归与间接递归两种。(5)减半递推技术际问题是有效的。工程上常用的分治法是减半递推技术。不败,就逐步回退,换别的路线再逐步试探。4算法设计的要求通常一个好的算法应达到如下目标:②程序对于几组输入数据能够得出满足规格说明要求的结果;③程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;④程序对于一切合法的输入数据都能产生满足规格说明要求的结果。算法主要是为了方便入的阅读与交流,其次才是其执行。可读性好有助于用户对算法的理解;晦涩难懂的程序易于隐藏较多错误,难以调试和修改。的(4)效率与低存储量需求算法效率高;存储量需求指算法执行过程中所需要的最大存储空间考点2算法的复杂度可以认为一个特定算法“运行工作量”的大小,只依赖于问题的规模(通常用整数n表示),它是问题的规模函数。即算法的工作量=f(n)例如,在N×N矩阵相乘的算法中,整个算法的执行时间与该基本操作(乘法)重复执行在有的情况下,算法中的基本操作重复执行的次数还随问题的输入数据集不同而不同。次数为氏当初始序列为自大至小有序时,基本操作的执行次数为n(n-1)/2。对这类算法的分析,可以采用以下两种方法来分析。所谓平均性态是指各种特定输入下的基本运算次数的加权平均值来度量算法的工作量。x入中的某个特定输入,p(x)是x出现的概率(即输入为x的概率),t(x)是算法在输入为x时所执行的基本运算次数,则算法的平均性态定义为n所谓最坏情况分析,是指在规模为n时,算法所执行的基本运算的最大次数。2算法的空间复杂度算法的空间复杂度是指执行这个算法所需要的内存空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行中所需要的额外空间。其中额外空间包括算法程序执行过程中的工作单元以及算法是原地(inplace)工作的。在许多实际问题中,为了减少算法所占的存储空间,通常采用压缩存储技术,以便尽量减少不必要的额外空间。考点3数据结构的定义数据结构(datastructure)是指相互之间存在一种或多种特定关系的数据元素的集合,即数据的组织形式。数据结构作为计算机的一门学科,主要研究和讨论以下三个方面:(l)数据集合中个数据元素之间所固有的逻辑关系,即数据的逻辑结构;(2)在对数据元素进行处理时,各数据元素在计算机中的存储关系,即数据的存储对各种数据结构进行的运算。讨论以上问题的日的是为了提高数据处理的效率,所谓提高数据处理的效率有两个方(l)提高数据处理的速度;(2)尽量节省在数据处理过程中所占用的计算机存储空间。数据(data):是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。虑和处理。ect(即连续),这种关系反映了该集合中的数据元素所固有的一种结构。在数据处理领域中,通常把数据元素之间这种固有的关系简单地用前后件关系(或直接前驱与直接后继关系)来描象的不同而不同。一般来说,数据元素之间的任何关系都可以用前后件关系来描述。是指带有结构的数据元素的集合。所谓结构实际上就是指数据元素之间的前后件关系。应包含以下两方面信息:(2)表示各数据元素之间的前后件关系。数据的逻辑结果是对数据元素之间的逻辑关系的描述。它可以用一嘎数据元素的集合和定义在此集合中的若干关系来表示。数据的逻辑结构包括集合、线性结构、树型结构和图形结构四种。线性结构:数据元素之间构成一种顺序的线性关系。树型结构:数据元素之间形成一种树型的关系例如,复数是一种数据结构,在计算机科学中,复数可取如下定义:c2数据的存储结构数据的逻辑结构在计算机存储空间中的存放形式,称为数据的存储结构(也称为数据的放在计算机存储空间中的各数据元素之间的逻辑关系(即前后件关系),在数据的存储结构信息,还需要存放各数据元素之间的前后件关系的信息。有顺序、链接、考点4数据结构的图形表示数据结构除了用二元关系表示外,还可以直观地用图形表示。在数据结构的图形表示中,对于数据集合D中的每一个数据元素用中间标有元素值的关系,对于关系R中的每一个二元组,用一条有向线段从前件结点指向后件结点。为叶子结点)。一个数据结构中的结点可能是在动态变化的。根据需要或在处理过程中,可以在一个数据结构中增加一个新结点(称为插入运算),也可以删除数据结构中的某个结点(称为删除运算)。插入与删除是对数据结构的两种基本运算。除此之外,对数据结构的运算还有查找、分类、合并、分解、复制和修改等。考点5线性结构与非线性结构。根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。(2)每一个结点最多有一个前件,也最多有一个后件。据结构的运算是按线性结构的规则来处理的,则属于线性结构;否则属于非线性结构。考点6线性表的定义了第一个外,有且只有一个前件,除了最后一个外,有且只有一个后件。即线性表是一个空表,或可以表示为项组成的。在复杂的线性表中,由若干数据项组成的数据元素称为记录(record),而由多个记录构成的线性表又称为文件(file)。在非空表中的每个数据元素都有一个确定的位置,如性表中的位序。非空线性表有如下一些结构特征:(2)有且只有一个终端结点an,它无后件;(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。线考点7线性表的顺序存储结构线性表的顺序表指的是用一组地址连续的存储单元依次存储线性表的数据元素。线性表的顺序存储结构具备如下两个基本特征:(l)线性表中的所有元素所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。线性表第i个元素ai的存储位置为式中ADR(ai)是线性表的第一个数据元素a,的存储位置,通常称做线性表的起始位置或基址。线性表的这种表示称做线性表的顺序存储结构或顺序映像,这种存储结构的线性表为顺序表。表中每一个元素的存储位置都和线性表的起始位置相差一个和数据元素在线性表中的4所示。由此只要确定了存储线性表的起始位置,线性表中任一数据元素都可以随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。放线性表时,该一维数组的长度通常要定义得比线性表的实际长度大一些,以便对线性表进行各种运算,特别是插入运算。在线性表的顺序存储结构下,可以对线性表做以下运算:(l)在线性表的指定位置处加入一个新的元素(即线性表的插入);(2)在线性表中删除指定的元素(即线性表的删除);(3)在线性表中查找某个(或某些)特定的元素(即线性表的查找);(4)对线性表中的元素进行整序(即线性表的排序);(5)按要求将一个线性表分解成多个线性表(即线性表的分解);(6)按要求将多个线性表合并成一个线性表(即线性表的合并);(7)复制一个线性表(即线性表的复制);(8)逆转一个线性表(即线性表的逆转)等。考点8顺序表的插入运算现在分析算法的复杂度。这里的问题规模是表的长度,设它的值为n。该算法的时间主要花费在循环结点后移语句上,该语句的执行次数(即移动结点的次数)是n-i+1。由此可看出,所需移动结点的次数不仅依赖于表的长度,而且还与插入位置有关。in,结点后移语句将不进行;这是最好情况,n在长度为n的线性表中第i个位置上插入一个结点,令Eis(n)表示移动结点的期望值(即移动的平均次数),则在第i个位置上插入一个结点的移动次数为n-i+1。故p1=p2=p3=…=pn+1=1/(n+1)等概率插入的情况下,法的效率相当低。虽然Eis(n)中n的的系数较小,但就数量级而言,它仍然是线性级的。考点9顺序表的删除运算线性表的删除运算是指将表的第i(1≤i≤n)个结点删除,使长度为n的线性表:删除算法的平均性能分析与插入算法相似。在长度为n的线性表中删除一个结点,令Ede(n)表示所需移动结点的平均次数,删除表中第i个结点的移动次数为n-i,故p1=p2=p3=…=pn=1/n间复杂度也是O(n)。考点10栈及其基本运算栈顶(Top),另一端为栈底(Bottom)。当底元素总是最先被插入的元素,从而也是最后才能被删除的元素。tOut2栈的顺序存储及其运算(l)入栈运算:入栈运算是指在栈顶位置插入一个新元素。首先将栈顶指针加一(即top加1),然后将元素插入到栈顶指针指向的位置。当栈顶指针已经指向存储空间的最后一个位置时,说明栈空间已满,不可能再进行入栈操作。这种情况称为栈“上溢”错误。如图(2)退栈运算:退栈是指取出栈顶元素并赋给一个指定的变量。首先将栈顶元素(栈顶指针减一(即t叩减1)。当栈顶指针为。这种情况称为栈的“下溢”错误。(3)读栈顶efrontrear),Out10所示。一个队列币。删除个儿素后的队列间插入元素E后的队列2循环队列及其运算的环状空间ear置之间所有的元素均为队列中的元素。可以将向量空间想象为一个首尾相接的圆环,如图1-12所示,并称这种向量为循环向过front=rear来判断队列“空”还是“满”。(l)入队运算2)退队运算退队运算是指在循环队列的队头位置退出一个元素并赋给指定的变量。首先将队头指针计算机二级考试_考试大【责编:daiy纠错】(l)线性表顺序存储的缺点了保证插入或删除后的线性表仍然为顺序存储,则在插入或删除过程中需要移动大量的数据元素。因此采用顺序存储结构进行插入或删除的运算效率很低;③计算机空间得不到充分利用,并且不便于对存储空间的动态分配。(2)线性表链式的基本概念链表2线性单链表的存储结构用一组任意的存储单元来依次存放线性表的结点,这组存储单元既可以是连续的,也可须存储指示其后件结点的地址(或位置)信息,这个信息称为指针(pointer)或链(link)。这两部分组成了链表中的结点结构,链表的每一个结点只有一个链域,故将这种链表称为单链表(SingleLinked)。驱,故应设头指针HEAD指向开始结点。同时,由于终端结点无后件,故终端结点的指针带链的栈与队列(1)栈也是线性表,也可以采用链式存储结构。在实际应用中,带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,这种带链的栈称为可利用栈(2)队列也是线性表,也可以采用链式存储结构,:(l)在线性链表中包含指定元素的结点之前插入一个新元素;指定元素的结点;线性链表按要求合并成一个线性表;1在线性镬表中查找指定元素要对线性链表进行扫描查找,在线性链表中寻找包含指定元素的前一个结点。在线性链表中,即使知道被访问结点的序号a,也不能像顺序表中那样直接按序号i访问结点,而只能从链表的头指针出发,顺链域Next逐个结点往下搜索,直到搜索到第i个结点为止。因此,链表不是随机存取结构。x2线性链表的插入线性链表的插入是指在链式存储结构下的线性链表中插入一个新元素。插入运算是将值为X的新结点插入到表的第i个结点的位置上,即插入到ai-1,与ai用栈不空,在线性链表插入时总能取到存储插入元素的新结点,不会发生“上溢”的情况。动态分配。另外,线性链表在插入过程中不发生数据元素移动的现象,只要改变有关结点的指针即可,从而提高了插入的效率。3多线性链表的删除线性链表的删除是指在链式存储结构下的线性链表中删除包含指定元素的结点。结点就变为空闲,应将空闲结点送回到可利用栈。在单链表中,从某个结点出发可以直接找到它的直接后件,时间复杂度为O(1),但无法直接找到它的互接前件;在单循环链表中,从某个结点出发可以直接找到它的直接后件,时间复杂度仍为O(1),直接找到它的直接前件,时间复杂度为O(n)。有时,希望能快速找这样的链表,就称为双向链表(一个结点中含有两个指针)。如果每条链构成一个循环链表,则会得到双向循环链表2双向链表的基本运算插入结点的指针变化。如图1-20所示(若改为在值为Y的结点之前插入值为X的结点,可以做类似分析)。ADX考点15循环链表的结构及其基本运算单链表上的访问是一种顺序访问,从其中的某一个结点出发,可以找到它的直接后件,但无法找到它的直接前件。在前面所讨论的线性链表中,其插入与删除的运算虽然比较方便,但还存在一个问题,在运算过程中对于空表和对第一个结点的处理必须单独考虑,使空表与非空表的运算不统个结点的指针域为NULL,表示单链表已经结束。如果将单链表最后一个结点的指针域改为存放链表中头结点(或第一个结点)的地址,就使得整个链表构成一个环,又没有增加额外的存储空间循环链表具有以下两个特点:(1)在循环链表中增加了一个表头结点,其数据域为任意或者根据需要来设置,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点;所有结点的指针构成了一个环状链。所个结点存在,从而使空表的运算统一。(1)有一个特定的称为根(root)的结点。它只有直接后件,但没有直接前件;(2)除根结点以外的其他结点可以划分为m(m≥0)个互不相交的有限集合T0,T1,…,Tm-1,每个集合Ti(i=0,1,…,m-l)又是一棵树,称为根的子树,每棵子树的根直接后件。树型结构具有如下特点:(1)助每个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的(2)每一个结点可以有多个后件,它们都称为该结点的子结点。没有后件的结点称(3)一个结点所拥有的后件个数称为树的结点度;次称为树的深度。在计算机中,可以用树结构来表示算术表达式,用树来表示算术表达式的原则是:(1)表达式中的每一个运算符在树中对应一个结点,称为运算符结点;(2)运算符的每一个运算对象在树中为该运算符结点的子树(在树中的顺序为从左到(3)运算对象中的单变量均为叶子结点。树在计算机中通常用多重链表表示。根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。二叉树可以是空集合,根可以有空的左子树或空的右子树。二叉树不是树的特殊情况,它们是两个概念。(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。且二叉树是有序树(树为无序树),其子树的顺序不能颠倒,因此,二叉树有5种不同的形态在二叉树中,一个结点可以只有左子树而没有右子树,也可以只有右子树而没有左子点既没有左子树也没有右子树时,该结点即是叶子结点)2二叉树的基本性质k深度为m的二叉树的最大的结点数是为二叉树中每层上的最大结点数之和,由性质1。nN均再看二叉树中的分支数,除根结点外,其余结点都有一个进入分支,设m为二叉树中的分支总数,则有N=m+1(2)n式有3满二叉树与完全二叉树(l)满二叉树(2)完全二叉树后一层上只缺少右边的若干结点。转贴于:计算机二级考试_考试大【责编:daiy纠错】如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编为满二叉树和完全二叉树的结构比较。下,表示本层结点数达到最大后,才能放入下一层。从左到右,表示同一层结点必须按从左点数都达到最大值,最后一层只缺少右边的若干结点。满二叉树也是完全二叉树,反之完全二叉树不一定是满二叉树。n4二叉树的存储结构地址,称为左指针域;另一个用于指向该结点的右子结点的存储地址,称为右指针域。问根结点,最后遍历右子树。中序遍历描述为:后遍历右子树,最后访问根结点,并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。后序遍历描述为:若二叉树为空,则执行空操作。否则:①后序遍历左子树;②后序遍历右子树;③访问点.1程序设计方法与风格设计体而言应该强调得意和清晰,程序必须是可以理解的。要形成良好的程序设计风格,主要应注重和考虑下述一些因素。(1)符号名的命名:符号名的命名应具有一定的实际含义,以便于对程序功能的理解。(2)程序注释:下克的注释能够帮助读者理解程序。次清晰。几点:(1)数据说明的次序规范化鉴于程序理解、新闻记者和维护的需要,使数据说明次(2)说明语句中变量安排有序化。当一个说明语句说明多个变量时,变量按照字母顺序为好。(3)使用注释来说明复杂数据的结构。应注意如下:(1)在一行内只写一条语句;(2)程序编写应优先考虑清晰性;(3)除非对效率有特殊要求,程序编写要做清晰第一,效率第二;(4)首先要保证程序正确,然后才要求提高速度;(5)避免使用临时变量而使程序的可读性下降;(6)避免不必要的转移;(7)尽可能使用库函数;(8)避免采用复杂的条件语句;(9)尽量减少使用“否定”条件的条件语句;(10)数据结构要有利于程序的简化;(11)要模块化,使模块功能尽可能单一化;(12)利用住处隐蔽,确保每一个模块的独立性;(13)从数据出发去构造程序;(14)不要修补不好的程序,要重新编写;(1)对所有的输入数据都要检验数据的合法性;(2)检查输入项的各种重要组合的合理性;(3)输入格式要简单,以使得输入的步骤和操作尽可能简单;(4)输入数据时,应允许使用自由格式;(5)应允许缺省值;(6)输入一批数据时,最好使用输入结束标志;(7)在以交互式输入/输出方式进行输入时,要在屏幕上使用提示符明确提示输入的请求,同时在数据输入过程中的输入结束时,应在屏幕上给出状态信息。(8)当程序设计语言对输入格式有严格要求时,应保持输入格式与输入语句的一致性;给所有的输入出加注释,并设计输出报表格式。一、结构化程序设计的原则结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用(1)滥用GOTO语句确实有害,应昼避免;使程序流程更清楚、效率更高;(3)争论的焦点不应该放在是否取消GOTO语句,而应该放在用什么样的程序结构上。二、结构化程序的基本结构与特点执构可以根据设定的条件,判断应该选择哪一条分支来执行相应的语句序列。3、重复结构:重复结构又称为循环结构,它根据给定的条件,判断是否需要重复执行执行,一是先执行后判断。优点:一是程序易于理解、使用和维护。二是编程工作的效率,降低软件开发成本。三、结构化程序设计原则和方法的应用(1)(2)(3)用一个非结构化的程序设计语言去实现一个结构化的构造;在某种可以改善而不损害程序可读性的情况下。一、关于面向对象方法类在现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的系统能够映射问题域,也就是说,系统中的对象以及对象之间的关系能够如实地反映问题域中固有事物及其系。面向对象方法和技术以对象为核心。对象是由数据和容许的操作组成的封装体,与客观实体有直接的关系。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间系。使用现实世界的概念抽象地思考问题从而自然地解决问题。它强调模拟现实世界中的概念而不强调算法,它鼓励开发者在软件开发的绝大部分过程中都用应用领域的要领去思考。3、可重用性好软件重用是指在不同的软件开发过程中重复作用相同或相似软件元素的过程。重用是提高软件生产率的最主要的方法。4、易于开发大型软件产品5、可维护性好(1)用面向对象的方法开发的软件稳定性比较好(2)用面向对象的方法开发的软件比较容易修改;(3)用面向对象的方法开发的软件比较容易理解。(4)易于测试和调试。二、面向对象方法的基本概念1、对象(object)对象是面向对象方法中最基本的概念。对象可以用来表示客观世界中的任何实体,也就抽象,也可以是人为的概念,或者是任何有明确边界的意义的东西。并具有与它进行交互的能力。面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表示其静态特征的属性和它可执行的一组操作组成。的操作也称为方法或服务。在对象中,用户也看不到。对的这一特性即是对象的封装性。过(2)分类性。指可以将具有相同属性的操作的对象抽象成类。(3)多太性。指同一个操作可以是不同对象的行为。(4)封装性。从外面看只能看到对象的外部特性,即只需知道数据的取值范围和可以能直接修改其内部状态,对象的内部状态只能由其自身改变。(5)模块独立性好。对象是面向对象的软件的基本模块,它是由数据及可以对这些数理来设置,没有无关的操作从模块的独立性考虑,对象内部各种元素彼此结合得很紧密,内聚性强。将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集其对应类的一个实例。一般据上的一组合法操作。面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种相互合作需要一个机制协助进行,这样的机制称为“消息”。消息是一个实例与另一个实例之间传递使用类似于函数调用,消息中指定了某一个实例,一个操作名和一个参数表(可空)。接收递过程中,由发送消息的对象(发送对象)的触发操作产生输出结果,作为消息传送至接受消息的对象(接受对象),引发接受消息的对象一系列的操作。所传送的消息实质上是接受对象所具有的操作/方法名称,有时还包括相应参数。消息中只包含传递者的要求,它告诉接受者需要做哪些处理,但并不指示接受者应该怎样完成这些处理。消息完全由接受者解释,接受者独立决定采用什么方式完成所需的处理,,常,一个消息由下述三部分组成:(1)接收消息的对象的名称;(2)消息标识符(也称为消息名);(3)零个或多个参数。4、继承(Inheritance)继承是面向对象的方法的一个主要特征。继承是使用己有的类定义作为基础建立新类的定义技术。已有的类可当作基类来引用,则新类相应地可当作派生类来引用。广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。结构继承性,一个类直接继承其父类的描述(数据和操作)或特性,子类自动地共享基类中定义特性外,还具有该类上层全部基类定义的特性。。因此,功能更强,使用更方便;便是,使用多重继承时要注意避免二义性。生出新的类以实现所需要的功能。5、多太性(Polymorphism)对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可导致完全不同多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且显著利用多态性,用户能够发送一般形式的消息,而将所有的实现细节都留给接受消息的对象。平台,标准,设计模式等方面。发展,使得人们的工作更加高效,同时提高了生活质量。同可以分为系统分析员,软件设计师,系统架构师,程序员,测试员等等。人们也常常用程序员来泛指各种软件工程师。(1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。(2)软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,(3)软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程一、软件工程概述概念:应需而生软件工程是一类工程。工程是将理论和知识应用于实践的科学。就软件工程而言,评估成本及确定权衡,管理科学用于计划、资源、质量和成本的管理。1968年NATO(北大西洋公约组织)会议上。自这一概念提出以来,围绕软件项目,开展PASCALAda管理期着重研究系统实现技术,后期开始强调开发管理和软件质量。,主要围绕软件过程以及软件复泛的面向对象语言以及相关的面向对象方法,大力开展了计算机辅助软件工程的研究与实进行企业管理和技术的提升。软件工程所涉及的要素可概括如下:目标:我的眼里只有“产品”软件工程活动是“生产一个最终满足需求且达到工程目标的软件产品所需要的步骤”。主要包括需求、设计、实现、确认以及支持等活动。需求活动包括问题分析和需求分的说明、每一模块接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开求、保证软件产品满足用户的要求。信息隐蔽、局部化、一致性以及适应性等特征。合适的设计方法有助于这些特征的实现,以程的目标。件工具与环境对软件过程的支持颇为重要。软件工程项目的质量与开销直接取决于对软件工程所提供的支撑质量和效用。管理时,才能实现有效的软件工程。一个软件工程要选取适宜的开发范型,要采用合适的设计方法,要提供高质量的工程支撑,软件过程、软件工具、软件开发环境、计算机辅助软件工程(CASE)及软件经济学等。作用:高效开发高质量软件没得到彻底解决,但在软件开发方法和技术方面已经有了很大的进步。尤其应该指出的是,自80方法和工具中获益。根据调查,中国的现状几乎和美国10多年前的情况一样,软件开发过程没有明小组的努力。这种依赖于个别人员上的成功并不能为全组织的软件生产率和质量的提高奠定。理,并在实践中贯彻实施,才能高效地开发出高质量的软件。二、软件工程的七条基本原理家的意见,并总结了TRW公司多年的开发软件的经验,于1983年提出了软件工程的七条Boehm认为,着七条原理是确保软件产品质量和开发效率的原理的最小集合。它们是相互独立的,是缺一不可的最小集合;同时,它们又是相当完备的。人们当然不能用数学方法严格证明它们是一个完备的集合,但是可以证明,在此之前已经提出的100多条软件工程准则都可以有这七条原理的任意组合蕴含或派生。下面简要介绍软件工程的七条原理:1用分阶段的生命周期计划严格管理原理意味着,应该把软件生命周期分成若干阶段,并相应制定出切实可行的计划,然后严格按照计划对软件的开发和维护进行管理。Boehm认为,在整个软件生命周期中应指定并严格执行6类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。2坚持进行阶段评审统计结果显示:大部分错误是在编码之前造成的,大约占63%;<2>错误发现的能等到编码结束之后再进行,应坚持进行严格的阶段评审,以便尽早发现错误。3实行严格的产品控制证软件的一致性。4采纳现代程序设计技术件开发的效率,又可以减少软件维护的成本。5结果应能清楚地审查软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况可见性差,的责任和产品标准,从而使所得到的标准能清楚地审查。6开发小组的人员应少而精开发人员的素质和数量是影响软件质量和开发效率的重要因素,应该少而精。这一条基于两点原因:高素质开发人员的效率比低素质开发人员的效率要高几倍到几十倍,开发工作中犯的错误也要少的多;当开发小组为N人时,可能的通讯信道为7承认不断改进软件工程实践的必要性现有的经验的总结和归纳,并不能保证赶上技术不断前进发展的步伐。因此,Boehm提出应把承认不断改进软件工程实践的必要性作为软件工程的第七条原理。根据这条原理,不仅类型和问题报告统计。这些数据既可以用来评估新的软件技术的效果,也可以用来指明必须着重注意的问题和应该优先进行研究的工具和技术。件工程的另外一个重要发展。这里的方面指的是完成一个功能的对象和函数的集合。在这一方面相关的内容有泛型编程(GenericProgramming)和模板。程方法可以同时提高质量与生产率。质量与生产率的提高就指望程序员与程序经理。对开发人员而言,如果非得在质量与生产率易使人急功近利,留下隐患。宁可进度慢些,也要保证每个环节的质量,以图长远利益。作全过程,如同工厂的生产线。常见的软件工程模型有:线性模型(图1.2),渐增式模型(图1.3),螺最早出现的软件工程模型是线性模型(又称瀑布模型)。线性模型太理想化,太单纯,已不再适合现代的软件开发模式,几乎被业界抛弃。偶而被人提起,都属于被贬对象,未被留一丝惋惜。但我们应该认识到,“线性”是人们最容易掌握并能熟练应用的思想方法。当线性的精神,就不要再呆板地套用线性模型的外表,而应该用活它。例如渐增式模型实质就是分段的线性模型,如图1.3所示。螺旋模型则是接连的弯曲了的线性模型。在其它模型中都能够找到线性模型的影子。惯上总以为程序设计在先,测试在后,如图1.4(a)所示。而对于一些复杂的程序,将测试分为同步测试与总测试更有效,如图1.4(b)所示。,总是少不了图1.1中的各个环节。本书擗开具体的软件工程其中程序设计部分以C++/C语言为例。四、软件体系结构和工具的选择软件体系结构表示了一个软件系统的高层结构,主要特点有:1)软件系统结构是一个高层次上的抽象,它并不涉及具体的系统结构(比如B/S还是C/S),也不关心具体的实现。2)软件体系结构必须支持系统所要求的功能,在设计软件体系结构的时候,必须考虑系统的动态行为。3)在设计软件体系结构的时候,必须考虑有现有系统的兼容性、安全当前已经有一些关于规范化软件体系结构,比如:ISO的开放系统互联模型、XWindow系统等等。软件系统的结构通常被定义为两个部分:一个是计算部件。另一个就是的交互就是节点之间的弧线。部件之间的连接可以被认为是一种连接器,比如过程调用、事件广播、数据库查询等等。正确的体系结构设计是软件系统成功的关键。一个系统。在需求分析和设计阶段,我们需要什么样的工具呢?分析和建立对象和对象关系的工具。在具体编码的时候,我们需要版本控制工具,MS的的面向对象的编程,而你在用VB,PowerBuilder,Delphi时很少会有同样的感受。至于数你也可以编译成.chm格式,它打包了文本和图形,只有一个文件,使用和分发比较方便。邮件系统讨论开发中的各项事宜。五、软件开发方法综述国外大的软件公司和机构一直在研究软件开发方法这个概念性的东西,而且也提出种流行的开发方法:年代使用最广泛的软件开发方法。它首先用结构化分析(SA)对软件进行需求分析,然后用结构化设计(SD)方法进行总体设计,最后是结构化编程(SP)。它给出了两类典型的软件结构(变换型和事务型)使软件开发的成功率大大提高。2、面向数据结构的软件开发方法法也可与其它方法结合,用于模块的详细设计。统之间同样存在着鸿沟,这一方法仍只适用于中小型问题。4、原型化方法产生原型化方法的原因很多,主要随着我们系统开发经验的增多,我们也发现并非所有的需求都能够预先定义而且反复修改是不可避免的。当然能够采用原型化方法是因为开发工具的快速发展,比如用VB,DELPHI等工具我们可以迅速的开发出一个可以让用户看己的需求。开发原型化系统一般由以下几个阶段:(1)确定用户需求(2)开发原始模型(3)征求用户对初始原型的改进意见(4)修改原型。原型化开发比较适合于用户需求不清、业务理论不确定、需求经常变化的情况。当系统规模不是很大也不太复杂时采用该方法是比较好的。5、面向对象的软件开发方法当前计算机业界最流行的几个单词就是分布式、并行和面向对象这几个术语。由此可以看到面向对象这个概念在当前计算机业界的地位。比如当前流行的两大面向对象技术DCOM和CORBA就是例子。当然我们实际用到的还是面向对象的编程语言,比如C++。不可否认,面向对象技术是软件技术的一次革命,在软件开发史上具有里程碑的意义。随着OOP(面向对象编程)向OOD(面向对象设计)和OOA(面向对象分析)据结构,实际上也包含了所有对象的数据结构。所以OMT彻底实现了PAM没有完全实现质量指标上有了实质性的突破,基本地解决了在这些方面存在的严重问题。这里我们需要谈一下微软的MSF(MicrosoftSolutionsFramework)的框架,它简理设计实际上就是要确定我们实际需要的组件、服务和采用的框架结构、具体的编程语言等。MCF整个结构比较清楚是基于对象开发的一个比较好的可操作的框架6、可视化开发方法的数据库模式的建立,并可以导入到不同的数据库中去。当然用过S-Design的人不一定很VBDELPHICBuilder是在使用可化开发工具。和一个非常好的数据库可视化分析工具。可视化开发使我们把注意力集中在业务逻辑和业务流程上,用户界面可以用可视化列表框和滚动条等,由可视开发工具自动生成应用软件。六、怎样培养软件工程的思维与方法乐此不疲。我们更喜欢讨论如何用灵活而简短的代码来实现一个特定的功能,而忽略了对整项目或产品的总体去考虑一个软件产品。1.考虑整个项目或者产品的市场前景。作为一个真正的系统分析人员,不仅要从用最好的技术实现了一个单进程的操作系统,其市场前景也一定是不容乐观的。2.从用户的角度来考虑问题。比如一些操作对于开发人员来讲是非常显而易见的,也就是说用户认可的才是好的,并不是开发人员觉的好才好。DLL或者是以源代码存在的函数库或者是对象。比如能够在B/S结构下运行并且不影响系4.合理进行模块的分割。从多层模型角度来讲,一般系统可以分成用户层、业务层和的话再进行重新调整。这样就可以保证各个部分齐头并进,开发人员也可以各施其职。5.人员的组织和调度。这里很重要的一点是到考虑人员的特长,有的人喜欢做界面,有的人喜欢做核心。如果有可能要根据人员的具体的情况进行具体的配置。同时要保证每一个开发人员在开发的时候首先完成需要和其他人员进行交互的部分,并且对自己的项目进度以及其他开发人员的进度有一个清晰的了解,保证不同部分的开发人员能够经常进行交6.开发过程中文档的编写。在开发过程中会碰到各种各样的问题和困难,当然还有各种各样的创意和新的思路。应该把这些东西都记录下来并进行及时整理,对于困难和问各种创意,可以根据进度计划安排考虑是在本版本中实现还是在下一版本中实现。7.充分考虑实施时可能遇到的问题。开发是一回事情,用户真正能够使用好它又是另外一回事情。比如在MIS系统开发中,最简单的一个问题就是用户如果数据输入错误作用,如何让用户真正利用计算机进行协作也是成败的关键。坐在计算机前面直接编码,但是我确实认为软件工程对于我们系统开发的指导作用是巨大编程规范和工具使用等方面的问题。七、软件开发的发展变化码,这也就是国外开发很注重对项目的概念和逻辑分析的原因。他们的重点是把业务规则和需求用图形化的方式表现出来,然后通过CASE工具自动生成代码。所以当国人还在不停的开发一个又一个的MIS工具的时候,国外已经把很多精力放到了CASE工具的制作上。我们很多公司人员忙着写具体业务过程的相关代码,而国外很多都把精力放到对不们应该从以代码为核心的软件开发模式转化到以模型为中心的、基于CASE的开发上来。关于协作与个人英雄主义社会进步的一个很明显的现象就是社会分工越来越细,软件的开发也不例外。为什么在软件开发的今天已经不能出现象裘伯君这样的软件英雄的原因也在这里,单凭个人之控件或者是DLL函数库,你所做的就是一个整合的工作。第二个就是以细致取胜,也就是说功能很多而且做的很精致,即使技术本身不是很。而真等你做出来了,它的新版本也早已经推出。真正能够在市面上叫得想、经得起考验得产品都是具有这两方面的特点。这两方面的特点决定了你一个人绝对是不可能胜任的,也许你可以独立的完成技术英雄,也更需要人与人之间的协作。人员。八、我们是否需要软件工程有一点大家可以达成共识的就是,如果一个象Windows这样的操作系统,不进行全面的规划,不采用软件工程的思想和方法,是绝对搞不出来的。s成为一个基于网络的操作系统。LEOffice的产品。但是从整个系统设计概念上来讲,Office显然要比WPS高一个层次,它能够把档、图表、数据库、演示变成了一个一体化的东西。而且通过宏调用,用户可以自己定制用户界面并编制适当的模板,单是这个二次开发功能就不是WPS现在所能及项背的,当然限于当前用户的水平还很少有人使用二次开发的功能。提供了相似的开发界面使用户学会一种开发工具以后能够很容易的学习其他的开发工具。比别是在查询和分析上表现了高度的一致性。考虑了扩展性和伸缩性,微软的系列产品能够很快的利用新的技术并采用统一的结构形式表基于网络的开发和应用。大项目、还是小项目。它们作为一个项目,都需要有一个需求分析、系统结构建立、设计、编码、测试等阶段。这是任何一个项目都不可缺少的。往往可以看到很多大公司的IT部门的人员都在不停的作各种各样的报表,当各个样式结构,很少是提供了一个通用的模板,当然提供高层API接口进行这种操作的就更少一个原因就是没有在系统开发的前期进行很好的调研、需求分析和系统体系结构的设计。这里就我们开发过的一些小型软件项目来谈一些开发的总结和体会,一般来说,小小项目虽然看起来比较简单,所以很多开发人员容易犯一些错误,记得我们在开发Internet候,有三个开发人员:一个负责前端界面的编写,一估计项目难度,比如对于通讯中多用户并发访问时的多线程问题和缓存处理问题,用户批量hiVCCSocket的时候对数据进行了自己定义的格式化,结果服务器端数据发送模块只好重写),而且其中关于一个接口双方的理解不同,然后又返工重新修改。最编写的模块需要升级,新的接收的人不得不花很多时间去阅读他的源代码。所以在开发小项目的时候也必须要建立合理的模式:而所谓合理的模式就是软件工程告在这上面花费相当时间是很必要的。对于软件要完成哪些功能已经有了一个比较清楚的轮廓,而且往往在开发合同中已经大致地的方法作出一个简单的框架给用户看。上的要求,另一方面是确定我们软件的定位,即我们软件具体是为哪一些用户群体服务的。程度做一定的调研,根据调查的统计结果决定即将开发的软件的一些技术指标。2.需求分析。需求分析需要做的事情有:高层构思、确立系统目标、划分业务领域、EnterpriseModel元准化与一致性控制。面向对象的方法,通过分析用户需求,用类、类之间的各种关系来表示整个系统。定用什么方法来完成需求的获取,这在很大程度上影响了需求分析的做法。什么操作系统平台上运行等等。这些具体实现是在设计阶段来完成的。CASE发就可以对分析和设某些类结构做一些修改,确定用户表示层(也就是通俗所说的界面定义)、用户服务层、业务这时应返回到前面的阶段进行必要的修改。同时在编码前规定编码的风格并在开发过程中保持一致的风格。5.测试。测试是系统投入使用前最关键的一个步骤。即使是小项目也应该严格地进行测试。就实际上就是一个把错误留给自己还是留给客户的问题。最后,我们知道软件项目主要是由开发人员完成的,所以对人员的合理安排和配置同时需要有一个文档整理人员随时整理系统开发过程中相关的文档。如果条件可能的话,要配置一个测试工程师,专门进行代码的测试工作,当然如果条件不允许的话,也可有可能会发现设计模型中的漏洞,避免了各人的代码编写完毕之后又要修改的后果。九、我国软件工程发展的现状不管怎么样,我们大家还是先要来看一看国内软件厂商到底提供给我们多少有震撼就代表UNIX系列),但是其中到底有多少独创的技术成分我们暂时还不知道,但有一点可群件和应用系统可能还需要进一步测试。然后就是对硬件平台的支持也需要进一步完善。多家公司推出了自己的Linux并且还有汉化的Linux,这就有比较疑惑的一点,为什么不在Linux上构架一个类似UNICODE这样的东西,而只做汉化这么本地化的产品呢?不知道是眼光还是市场的问题了。S重复低效劳动的一面。教育软件在某一种层面上看就是电子题库,当然也有优点,比如加入了多媒体教学(可视化程度不错)和所谓寓教于乐的特点,但是从本质上说还是题库。杀毒软件据说是中国软件的骄傲,由中国权威机构评测是达到了世界领先水平,但是好象还没有众所周知,不是技术和创意,实在是归功于我们悠久的历史。字处理软件和排版软件客观的说国内的也做的不错,但是从系统的扩展性和体系结构上说和MS和Adobe相比,差距也放在那里。其实这种现状的原因很简单,一个是我们缺少创新的能力,另一个就是我们欠缺软件工程的概念,系统开发前期的需求分析、设计没有做好或者做的不够好。当然,我们很少怀疑自己的技术能力,我们很多时候认为这是地理环境和经济环境的原因造成了中国软件业现在的局面。当然中国软件开发人员绝对可以算是优秀的,但是想想我们软件行业龙头企业到底有多少有技术创新和专利技术呢?姑且不论这个,实际上把一个操它们合理的整合起来绝对是一个涉及到软件工程的问题。不自觉的影响着新的开发人员。所以在头脑中建立一个软件工程的作用,从某种角度上讲,要比会几种开发语言、几个编程技巧实在是重要的多。但是我们又有几个人真正去认真分析和考虑MFC架构的设计和原理呢?扪心自问,我们又有多少人能够设计出MFC这样的框架系统呢?下面就我们的题目谈一些相关的话题。十、我有一个梦非常短的,从第一台计算机的研制成功到现在也没有百年的历史,但是计算机及其相关技术本上是按照摩尔定律来的,经历了从主机结构到文件服务器结构,从客户服务器系统到基于Internet的服务器浏览器结开发系统,从最简单的单行命令式调试器到方便灵活的多功能的调试器。但是,今天所有的软件厂商和软件开发人员依然会想起当年的黑人人权运动领袖马一个框架的东西也没有碰到。不管我们认为软件工程可能是多么的虚无,但是所有学工科并且有逻辑头脑的人都坚信理论对实践的指导意义,因为有了爱因斯坦及其许多伟大的科学家关于能量和质量方面告诉我们在设计一个系统的时候,我们需要进行可行性研究、计划制订、需求分析、系统设计、编码、测试、维护等等。并且对这些过程中应该做什么提出了一个指导性的东西。但是没有任何专家和标准委员会保证只要按照这些标准,我们的系统肯定会顺利完成。而且事实上,软件开发针对的领域是如此之多并不没有一种对所有领域适用的万能框架。不管认为软件工程已经到了非常成熟的阶段还是认为软件工程依然是一个搞不懂的黑箱子,软件工程确实已经经历了三个不同的阶段。第一个阶段是软件结构化生产阶段,期,软件生产开始进入以过程为中心的第二阶段,以提出过程成熟模型CMM、个体软件过把斧头出现的软件工业化生产阶段。草先行还是摸着石子过河。兵马未动、粮草先行当然意味着我们在开发的时候先不忙着编写代码做程序,我们先要制订一个关于开发的方法。这点就象元数据(meta

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论