程序设计和软件工程基础文档格式.docx

上传人:b****3 文档编号:18710629 上传时间:2022-12-31 格式:DOCX 页数:39 大小:118.66KB
下载 相关 举报
程序设计和软件工程基础文档格式.docx_第1页
第1页 / 共39页
程序设计和软件工程基础文档格式.docx_第2页
第2页 / 共39页
程序设计和软件工程基础文档格式.docx_第3页
第3页 / 共39页
程序设计和软件工程基础文档格式.docx_第4页
第4页 / 共39页
程序设计和软件工程基础文档格式.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

程序设计和软件工程基础文档格式.docx

《程序设计和软件工程基础文档格式.docx》由会员分享,可在线阅读,更多相关《程序设计和软件工程基础文档格式.docx(39页珍藏版)》请在冰豆网上搜索。

程序设计和软件工程基础文档格式.docx

④状态管理指令

状态管理指令数量一般较少,其功能是只改变CPU的工作状态,而不影响其它指令和数据。

开放中断指令、禁止中断指令等。

⒉程序及其特性

程序是为完成某一任务用计算机语言编写的有限个操作命令的序列。

程序有以下特性:

⑴目的性:

程序总是有一明确的目的,是为解决问题而设计的。

⑵分步性:

程序总是分成若干个操作步骤,逐步解决问题。

⑶有限性:

有限个操作步骤以便计算机实现,如果有无穷多个步骤,就无法完成。

⑷顺序性:

程序中的指令是按一定的顺序执行的。

⑸分支性:

根据条件的不同,可以实现不同步骤来解决问题。

计算机之所以能自动地工作,就是因为运行程序的结果。

计算机能按照程序的安排去执行相应的指令,才使计算机看起来像是自动地、连续地工作。

⒊计算机语言

人和计算机交流信息使用的语言称为计算机语言或称程序设计语言。

计算机语言通常分为机器语言、汇编语言和高级语言三类。

⑴机器语言

机器语言是一种用二进制代码“0”和“1”形式表示的,能被计算机直接识别和执行的语言。

用机器语言编写的程序,称为计算机机器语言程序。

它是一种低级语言,用机器语言编写的程序不便于记忆、阅读和书写。

通常不用机器语言直接编写程序。

⑵汇编语言

汇编语言是一种用助记符表示的面向机器的程序设计语言。

汇编语言的每条指令对应一条机器语言代码,不同类型的计算机系统一般有不同的汇编语言。

用汇编语言编写的程序称为汇编语言源程序,机器不能直接识别和执行,必须由“汇编程序”(或汇编系统)翻译成机器语言程序才能运行。

这种“汇编程序”就是汇编语言的翻译程序。

汇编语言适用于编写直接控制机器操作的低层程序,它与机器密切相关,不容易使用。

⑶高级语言

高级语言是一种比较接近自然语言和数学表达式的一种计算机程序设计语言。

一般用高级语言编写的程序称为“源程序”,计算机不能识别和执行,必须把源程序翻译成机器指令,计算机才能识别和执行。

通常有编译和解释两种翻译方式。

编译方式是将源程序整个编译成目标程序,然后通过链接程序将目标程序链接成可执行程序。

经过一次编译过程后,如果需要再次执行该程序,则无需再翻译,可直接执行可执行程序。

工作过程如图10-1所示。

解释方式是将源程序逐句翻译,翻译一句执行一句,边翻译边执行,不产生目标程序,从而节省了存储空间,但是每次执行必须重新进行翻译。

BASIC语言就属于这一类,但改进的BASIC语言VisualBasic可进行程序的编译。

工作过程如图10-2所示。

图10-1编译程序的工作过程

图10-2解释程序的工作过程

10.1.2程序设计风格

一般来讲,程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。

因此程序设计的风格总体而言应该强调程序简单和清晰,并且是可以理解的。

“清晰第一,效率第二”已成为当今主导的程序设计风格。

程序设计风格主要体现在以下几个方面:

⒈源程序文挡化

源程序文挡化应考虑如下几点:

⑴符号名的命名

符号名的命名应具有一定的实际含义,以便于对程序功能的理解。

⑵程序注释

正确的注释能够帮助读者理解程序。

注释一般分为序言性注释和功能性注释。

序言性注释通常位于每个程序的开头部分,它给出了程序的整体说明,主要描述内容包括:

程序标题、程序功能说明、主要算法、接口说明、程序位置、开发简历、程序设计者、复审者、复审日期、修改日期等。

功能性注释的位置一般嵌在源程序体中,主要描述其后的语句或程序做什么。

⑶视觉组织

为使程序的结构一目了然,可以在程序中利用空格、空行、缩进等技巧使程序的结构层次清晰。

⒉数据说明的方法

在编写程序时,需要注意数据说明的风格,以便使程序中的数据更易于理解和维护。

一般应注意如下几点:

⑴数据说明的次序规范化

鉴于程序理解、阅读和维护的需要,使数据说明次序固定,可以使数据的属性容易查找,也有利于测试、排错和维护。

⑵说明语句中变量安排有序化

当一个说明语句说明多个变量时,变量按照字母顺序排序为好。

⑶使用注释来说明复杂数据的结构。

⒊语句的结构

程序应该简单易懂,语句构造应该简单明了,不应该为了提高效率而把语句复杂化。

一般应注意以下几点:

⑴一行内只写一条语句;

⑵程序编写应优先考虑清晰性;

⑶除非对效率有特殊要求,程序编写要做到清晰第一,效率第二;

⑷首先要保证程序正确,然后才要求提高速度;

⑸避免使用临时变量而使程序的可读性下降;

⑹避免不必要的转移;

⑺尽可能使用库函数;

⑻避免采用复杂的条件语句;

⑼尽量减少使用“否定”条件的条件语句;

⑽数据结构要有利于程序的简化;

⑾要模块化,使模块功能尽可能单一化;

⑿利用信息隐蔽,确保每一个模块的独立性。

⒋输入和输出

输入和输出信息是用户直接关心的,输入和输出方式和格式应尽可能方便用户的使用,无论是批处理的输入和输出方式,还是交互式的输入和输出方式,在设计和编程时都应该考虑如下原则:

⑴输入格式要简单,以使得输入的步骤和操作尽可能简单;

⑵输入数据时,允许使用自由格式,允许缺省值;

⑶输入一批数据时,最好使用输入结束标志;

⑷在以交互式输入/输出方式进行输入时,要在屏幕上使用提示符明确提示输入的请求,同时数据输入过程中和输入结束时,应在屏幕上给出状态信息。

10.2结构化程序设计

10.2.1结构化程序设计的原则

由于软件危机的出现,人们开始研究程序设计方法,其中最受关注的是结构化程序设计方法。

结构化程序设计方法引入了工程思想和结构化思想,使大型软件的开发和编程都得到极大的改善。

结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用GOTO语句。

⑴自顶向下

程序设计时,应先考虑总体,后考虑细节;

先考虑全局目标,后考虑局部目标。

不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。

⑵逐步求精

对复杂的问题,应设计一些子目标作过渡,逐步细化。

⑶模块化

一个复杂的问题,肯定是由若干个比较简单的问题构成。

模块化是把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标称为一个模块。

10.2.2结构化程序的基本结构

结构化程序设计方法是程序设计的先进方法和工具。

采用结构化程序设计方法编写程序,可使程序结构良好、易读、易理解、易维护。

程序设计语言仅仅使用顺序、选择和循环三种基本控制结构就能表达出各种其它形式结构的程序设计方法。

⒈顺序结构

顺序结构是一种简单的程序设计,它是最基本、最常用的结构,如图10-3所示。

顺序结构是顺序执行的结构,所谓顺序执行,就是按照程序语句行的自然顺序,逐条执行语句以达到执行程序。

⒉选择结构

选择结构又称为分支结构,它包括简单选择和多分支选择结构,这种结构可以根据设定的条件,判断应该选择哪一条分支来执行相应的语句序列。

图10-4列出了包含2个分支的简单选择结构。

⒊循环结构

循环结构又称为重复结构,它根据给定的条件,判断是否需要重复执行某一相同的或类似的程序段,利用循环结构可以简化大量的程序行。

图10-5所示

图10-3顺序结构图10-4选择结构

图10-5循环结构

10.3面向对象程序设计

10.3.1面向对象程序设计基本概念

关于面向对象方法,对其概念有许多不同的看法和定义,但是都涵盖对象及对象属性与方法、类、继承等几个基本要素。

下面分别介绍面向对象方法中这几个重要的概念,这些概念是理解和使用面向对象方法的关键和基础。

⒈对象(Object)

对象是面向对象方法中最基本的概念。

对象可以用来表示客观世界中的任何实体,也就是说,应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的实体。

例如,一个人、一家公司、一个窗口、贷款和借款等,都可以作为一个对象。

面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表示静态特征的属性和它可执行的一组操作组成。

例如,一辆汽车是一个对象,它包含了汽车的属性(如颜色、型号、载重量等)及其操作(如启动、刹车等)。

一个窗口是一个对象,它包含了窗口的属性(如大小、颜色、位置等)及其操作(如打开、关闭等)。

客观世界中的实体通常都既有静态的属性,又具有动态的行为,因此,面向对象方法学中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。

对象可以做的操作表示它的动态行为,在面向对象分析和面向对象设计中,通常把对象的操作也称为方法。

属性即对象所包含的信息,它在设计对象时确定,一般只能通过执行对象的操作来改变。

如对象人的属性有姓名、年龄、体重等。

不同对象的同一属性可以具有相同或不同的属性值。

如张三的年龄为19,李四的年龄为20。

张三、李四是两个不同的对象,他们共同的属性“年龄”的值不同。

对象有如下一些基本特点:

⑴惟一性

指对象是具体的和可区分的,并且由对象的内在本质来区分,而不是通过描述来区分。

⑵分类性

指可以将具有相同属性和操作的对象抽象成类。

⑶封装性

从外面看只能看到对象的外部特征,即只需知道数据的取值范围和可以对该数据施加的操作,根本无需知道数据的具体结构以及实现操作的算法。

对象的内部,即处理能力的实行和内部状态,对外是不可见的。

从外面不能直接使用对象的处理能力,也不能直接修改其内部状态,对象的内部状态只能由其自身改变。

⑷模块独立性

对象是面向对象的软件的基本模块,它是由数据及可以对这些数据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无关的操作。

从模块的独立性考虑,对象内部各种元素彼此结合得很紧密。

⒉类(Class)和实例(Instance)

将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。

所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。

要注意的是,当使用“对象”这个术语时,既可以指一个具体的对象,也可以泛指一般的对象,但是,当使用“实例”这个术语时,必然是指一个具体的对象。

例如:

Integer是一个整型类,它描述了所有整数的性质。

因此任何整数都是整数类的对象,而一个具体的整数“123”是类Integer的一个实例。

由类的定义可知,类是关于对象性质的描述,它同对象一样,包括一组数据属性和数据上的一组合法操作。

例如,一个面向对象的图形程序在屏幕左下角显示一个半径3cm的红颜色的圆,在屏幕中部显示一个半径4cm的绿颜色的圆,在屏幕右上角显示一个半径1cm的黄颜色的圆。

这三个圆心位置、半径大小和颜色均不相同的圆,是三个不同的对象。

但是,它们都有相同的属性(圆心坐标、半径、颜色)和相同的操作(显示自己、放大缩小半径、在屏幕上移动位置,等等)。

因此,它们是同一类事物,可以用“Circle类”来定义。

⒊继承(Inheritance)

继承是面向对象的方法的一个主要特征。

继承是使用已有的类定义新类的定义技术。

已有的类可当作基类来引用,则新类相应地可当作派生类来引用。

广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。

面向对象软件技术的许多强有力的功能和突出的优点,都来源于把类组成一个层次结构的系统:

一个类的上层可以有父类,下层可以有子类。

这种层次结构系统的一个重要性质是继承性,一个类直接继承其父类的描述(数据和操作)或特性,子类自动地共享基类中定义的数据和方法。

10.3.2面向对象的程序设计

现在,面向对象(Objectoriented)方法已经发展成为主流的软件开发方法。

面向对象方法的本质,就是主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,系统中的对象以及对象之间的关系能够如实地反映固有事物及其关系。

面向对象方法之所以日益受到人们的重视和应用,成为流行的软件开发方法,是源于面向对象方法的以下主要优点:

⒈与人类习惯的思维方法一致

传统的程序设计方法是面向过程的,其核心方法是以算法为核心,把数据和过程作为相互独立的部分,数据代表客体,程序则用于处理这些数据,在计算机内部数据和程序是分开存放的,这样的做法忽略了数据和操作之间的内在联系。

实际上,用计算机解决的问题都是现实世界中的问题,这些问题无非由一些相互存在一定联系的事物所组成,每个具体的事物都具有行为和属性两方面的特征。

因此,把描述事物静态属性的数据结构和表示事物动态行为的操作放在一起构成一个整体,才能完整、自然地表示客观世界中的实体。

面向对象方法和技术以对象为核心。

对象是由数据和操作组成的封装体,与客观实体有直接的对应关系。

对象之间通过传递信息互相联系,以模拟现实世界中不同事物彼此之间的联系。

⒉稳定性好

面向对象方法基于对象模型,以对象为中心构造软件系统。

它的基本作法是用对象模拟现实生活中的实体,以对象间的联系刻画实体间的联系。

当对系统的功能需求变化时并不会引起软件结构的整体变化,往往仅需要作一些局部性的修改。

由于现实世界中的实体是相对稳定的,因此,以对象为中心构造的软件系统也是比较稳定的。

而传统的软件开发方法以算法为核心,开发过程基于功能分析和功能分解。

用传统方法所建立起来的软件系统的结构紧密地依赖于系统所要完成的功能,当功能需求发生变化时将引起软件结构的整体修改。

事实上,用户需求变化大部分是针对功能的,因此,这样的软件系统是不稳定的。

⒊可重用性好

软件重用是指在不同的软件开发过程中重复使用相同或相似软件的过程。

重用是提高软件生产率的最主要的方法。

传统的软件重用技术是利用标准函数库,也就是试图用标准函数库中的函数来建造新的软件系统。

但是,标准函数往往不能适应不同应用场合的不同需要,并不是理想的可重用的软件成分。

实际的库函数往往仅提供最基本、最常用的功能,在开发一个新的系统时,通常多数函数是开发者自己编写的,甚至绝大多数函数都是新编的。

面向对象的软件开发技术在利用可重用的软件成分构造新的系统软件的时候,有很大的灵活性。

有两种方法可以重复使用一个对象类:

一种方法是创建该类的实例,从而直接使用它;

另一种方法是从它派生出一个满足当前需要的新类。

继承性机制使得子类不仅可以重用其父类的数据结构和程序代码,而且可以在父类代码的基础上方便地修改和扩充,这种修改并不影响对原有类的使用。

可见,面向对象的软件开发技术所实现的可重用性是自然和准确的。

⒋易于开发大型软件产品

当开发大型软件时,组织开发人员的方法不恰当往往是出现问题的主要原因。

用面向对象方法开发软件时,可以把一个大型产品看作是一系列本质上相互独立的小产品来处理,这样不仅降低了开发的技术难度,而且也使得对开发工作的管理变得容易。

许多软件开发公司的经验都表明,当把面向对象技术用于大型软件开发时,软件成本明显地降低了,软件的整体质量也提高了。

⒌可维护性好

用传统的开发方法和面向过程的方法开发出来的软件很难维护,是长期困扰人们的一个严重问题,是软件危机的突出表现。

面向对象的方法开发的软件可维护性好,是因为:

⑴用面向对象的方法开发的软件稳定性比较好

当对软件的功能或性能的要求发生变化时,通常不会引起软件的整体变化,往往只需对局部做一些修改。

由于软件的改动较小且限于局部,自然比较容易实现。

⑵用面向对象的方法开发的软件比较容易修改

在面向对象方法中,核心是类(对象),它具有理想的模块机制,独立性好,修改一个类通常很少会牵扯到其它类。

面向对象技术特有的继承机制,使得对所开发的软件的修改和扩充比较容易实现,通常只需从已有类派生出一些新类,无需修改软件原有成分。

⑶用面向对象的方法开发的软件比较容易理解

在维护已有软件的时候,首先需要对原有软件与此次修改有关的部分有深入理解,才能正确完成维护工作。

传统软件之所以难于维护,在很大程度上是因为修改所涉及的部分分散在软件的各个地方,需要了解的面很广,内容很多。

面向对象的技术符合人们习惯的思维方式,用这种方法所建立的软件系统的结构与问题空间的结构基本一致。

因此,面向对象的软件系统比较容易理解。

对面向对象软件系统进行修改和扩充,通常是通过在原有类的基础上派生出一些新类来实现。

由于对象类有很强的独立性,当派生新类的时候通常不需要详细了解基类中操作的实现算法。

因此,了解原有系统的工作量可以大幅度降低。

⑷易于测试和调试

为了保证软件的质量,对软件进行维护之后必须进行必要的测试,以确保要求修改或扩充的功能已正确的实现了,而且没有影响到软件未修改的部分。

如果测试过程中发现了错误,还必须通过调试改正过来。

显然,软件是否易于测试和调试,是影响软件可维护性的一个重要因素。

10.4软件工程基础

10.4.1软件工程基本概念

⒈软件定义与软件特点

计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。

其中,程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令(语句)序列。

数据是使程序能正常操作信息的数据结构。

文档是与程序开发、维护和使用有关的图文资料。

可见软件由两部分组成:

一是机器可以执行的程序和数据;

二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。

软件在开发、生产、维护和使用等方面与计算机硬件相比存在明显的差异。

深入理解软件的定义需要了解软件的特点:

⑴软件是一种逻辑实体,而不是物理实体,具有抽象性。

软件的这个特点使它与其它工程对象有着明显的差异。

人们可以把它记录在纸上或存储介质上,但却无法看到软件本身的形态,必须通过观察、分析、思考、判断,才能了解它的功能、性能等特性。

⑵软件的生产与硬件不同,它没有明显的制作过程。

一旦研制开发成功,可以大量拷贝同一内容的副本。

所以对软件的质量控制,必须着重在软件开发方面。

⑶软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题。

⑷软件复杂性高,成本昂贵。

软件是人类有史以来生产的复杂度最高的工业产品。

软件涉及人类社会的各行各业、方方面面,软件开发常常涉及其它领域的专门知识。

软件开发需要投入大量、高强度的脑力劳动,成本高,风险大。

⑸软件开发涉及诸多的社会因素。

许多软件的开发和运行涉及软件用户的机构设置,体制问题以及管理方式等,甚至涉及到人们的观念和心理,软件知识产权及法律等问题。

软件根据应用目标的不同,是多种多样的。

软件按功能可以分为:

应用软件、系统软件、支撑软件(或工具软件)。

应用软件是为解决特定领域的应用而开发的软件。

例如,事物处理软件,工程与科学计算软件,实时处理软件,嵌入式软件,人工职能软件等应用性质不同的各种软件。

系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件。

如操作系统,编译程序,汇编程序,网络软件,数据库管理系统等。

支撑软件是介于系统软件和应用软件之间,协助用户开发软件的工具性软件,包括辅助和支持开发和维护应用软件的工具软件,如需求分析工具软件,设计工具软件,编码工具软件,测试工具软件,维护工具软件等,也包括辅助管理人员控制开发进程和项目管理的工具软件,如计划进度管理工具软件,过程控制工具软件,质量管理及配置管理工具软件等。

⒉软件危机与软件工程

所谓软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

实际上,几乎所有的软件都不同程度地存在这个问题。

随着计算机技术的发展和应用领域的扩大,软件规模越来越大,复杂程度不断增加,软件成本逐年上升,质量没有可靠的保证,软件已成为计算机科学发展的“瓶颈”。

具体地说,在软件开发和维护过程中,软件危机主要表现在:

⑴软件需求的增长得不到满足。

用户对系统不满意的情况经常发生;

⑵软件开发成本和进度无法控制。

开发成本超出预算,开发周期大大超过规定日期的情况经常发生;

⑶软件质量难以保证;

⑷软件不可维护或维护程度非常低;

⑸软件的成本不断提高;

⑹软件开发生产率的提高赶不上硬件的发展和应用需求的增长。

总之,可以将软件危机归结为成本、质量、生产率等问题。

分析带来软件危机的原因,宏观方面是由于软件日益深入社会生活的各个层面,对软件需求的增长速度大大超过了技术进步所能带来的软件生产率的提高。

而就每一项具体的工程任务来看,许多困难来源于软件工程所面临的任务和其它工程之间的差异以及软件和其它工业产品的不同。

在软件开发和维护过程中,之所以存在这些严重的问题,一方面与软件本身的特点有关,例如,在软件运行前,软件开发过程的进展难衡量,质量难以评价,因此管理和控制软件开发过程相当困难;

在软件运行过程中,软件维护意味着改正或修改原来的设计;

另外,软件的显著特点是规模庞大,复杂度呈线性增长,在开发大型软件时,要保证高质量,极端复杂困难,不仅涉及技术问题(如分析方法、设计方法、版本控制),更重要的是必须有严格而科学的管理。

另一方面与软件开发和维护方法不正确有关,这是主要原因。

为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念,开辟了工程学的新兴领域——软件工程学。

软件工程就是试图用工程、科学和数学的原理与方法研制、维护计算机软件的有关技术及管理方法。

软件工程的进步是近几十年软件产业迅速发展的重要原动力。

从根本上说,其目的是研究软件的开发技术,软件工程的名称意味着用工业化的开发方法来替代小作坊式的开发模式。

但是,几十年的软件开发和软件发展的实践证明,软件开发是既不同于其它工业工程,也不同于科学研究。

软件不是自然界的有形物体,它作为人类智慧的产物有其本身的特点,所以软件工程的方法、概念、目标等都在发展,有的与最初的想法有了一定的差距。

但是认识和学习过去和现在的发展演变,真正掌握软件开发技术的成就,并为进一步发展软件开发技术,以适应时代对软件的更高期望是有极大意义的。

软件工程的核心思想是把软件产品看作是一个工程产品来处理。

把需求计划、可行性研究、工程审核、质量监督等工程化的概念引入到软件生产当中,以期达到工程项目的三个基本要素:

进度、经

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1