admin 管理员组

文章数量: 1086019


2025年1月2日发(作者:乱世佳人电影在线观看)

目 录

知识点一、程序设计基本概念 ························································ 1

知识点二、程序设计的过程 ··························································· 4

知识点三、面向对象的程序设计 ····················································· 5

知识点四、程序的三种基本结构 ····················································· 7

知识点五、软件工程概述 ······························································ 8

知识点六、软件生命周期 ···························································· 10

知识点一、程序设计基本概念

1.程序

所谓程序,就是让计算机完成某项工作的具体详细规定和先后步骤,它是一组计算

机指令,每一条指令都使计算机执行一个特定的操作。

针对同一个问题编写的程序并不是唯一的,但任何一个程序都必须包含两个方面的

内容:

程序

=

算法

+

数据结构

数据结构是对数据的描述,在程序中要指定数据的类型和组织形式;

算法是对操作的描述,即操作步骤。

2.程序的执行过程

计算机的工作过程实际上是快速执行指令的过程。

计算机执行指令一般分为两个阶段:

第一阶段,将要执行的指令从内存取到

CPU

内;

第二阶段,

CPU

对获取的指令进行分析译码,判断该条指令要完成的操作,然后

向各部件发出完成该操作的控制信号,完成该指令的功能。

当一条指令执行完后就进入下一条指令的取指操作。一般将第一阶段取指令的操作

称为取指周期,将第二阶段称为执行周期。

CPU

不断地读取指令、执行指令,这就是程序的执行过程。

3.算法

为解决一个问题而采取的方法与步骤,称为算法(

algorithm

),算法是解题方法的

精确描述。

现实中问题的正确合理解决是建立在算法的基础上的。尽管解决一个问题的算法有

多种,但要考虑到算法的质量,选择合理的算法。

一个算法应具有以下特点:

1

)有穷性。一个算法中的执行步骤必须是有限的,不能是无限的死循环。

2

)确定性。算法中每句话的含义必须是确切、唯一的,不能产生歧义。

3

)有效性(也称可行性)。算法中每一步都应该能有效地运行并返回预定结果。

1

4

)有零个或多个输入。输入是指在执行算法时需要从外界取得必要的信息。

5

)有一个或多个输出。输出是指与输入有某种特定关系的量,在一个合法的算

法中至少有一个输出。

算法是程序的灵魂,一个好的程序必须有一个合理、高效的算法。

4.流程图

为了表示一个算法,可以用不同的方法。常用的有自然语言、流程图、伪代码等。

这里主要介绍流程图。

用图表示的算法就是流程图。流程图是用一些图框来表示各种类型的操作,在框内

写出各个步骤,然后用带箭头的线把它们连接起来,以表示执行的先后顺序。

流程图不仅可以指导编写程序,而且可以在调试程序中用来检查程序的正确性。下

图是一个简单的流程图,描述求两个数的最大公约数的算法(辗转相除法)。

流程图示例

5.程序设计方法

目前的程序设计方法一般分为两大类:面向过程的程序设计方法和面向对象的程序

设计方法。

2

面向过程的程序设计方法是将完成某项工作的每一个步骤和具体要求都全盘考虑

来设计程序,程序主要用于描述完成这项工作所涉及的数据对象和具体操作规则。

C

言是一种面向过程的程序设计语言。

面向对象的程序设计方法是将任何事物都看成一个对象,每个对象都是由数据和操

作规则构成的。

Visual C++

等语言是面向对象的程序设计语言。

6.常见的计算机语言

(1)C语言

C

语言于二十世纪七十年代创建,适于编写系统级的程序,比如操作系统。在此之

前,操作系统使用汇编语言编写,而且不可移植。

C

语言是第一个使得系统级代码移植

成为可能的编程语言。

(2)C++

C++

语言创建于二十世纪八十年代,是一种面向对象的程序设计语言,在语法上与

C

兼容,主要增加了类的功能。

(3)Python

Python

是一种开源的面向对象的脚本语言,出现于二十世纪八十年代末,简单易

学,功能强大,能简单而有效的实现面向对象编程,特别适用于快速的应用程序开发。

(4)Java

Java

语言于

1996

年推出,是一种纯面向对象的语言,语法与

C++

相似,不仅吸收

C++

语言的各种优点,还摒弃了

C++

里难以理解的指针等概念,具有简单、可移植、

与平台无关和高性能等优点,是互联网应用开发的主要语言。

当编辑并运行一个

Java

程序时,需要同时涉及到这四种方面:

Java

编程语言、

Java

类文件格式、

Java

虚拟机、

Java

应用程序接口。使用文字编辑软件(如记事本等)或

集成开发环境(

Eclipse

等)在

Java

源文件中定义不同的类,通过调用类中的方法来访

问资源系统,把源文件编译生成一种二进制中间码,存储在

class

文件中,然后再通过

运行与操作系统平台环境相对应的

Java

虚拟机来运行

class

文件,执行编译产生的字节

码,调用

class

文件中实现的方法来满足程序的

JavaAPI

调用。

3

知识点二、程序设计的过程

程序设计是指利用计算机解决问题的全过程。

使用计算机解决实际问题,通常先要对问题进行分析并建立数学模型,然后考虑数

据的组织方式和算法,并用某一种程序设计语言编写程序,然后调试程序,使之运行后

能够产生预期的结果,这个过程称为程序设计。程序设计的基本目标是实现算法,从而

完成问题的求解。

程序设计的一般步骤如下:

1.分析问题

确定问题的已知数据,程序运行所需要的输入数据,需要输出的结果数据,需要进

行哪些处理。

2.确定处理方案

对同一个问题可以用不同的方案来处理,不同的方案决定了不同的处理步骤,效率

也有所不同。

3.确定操作步骤

根据选定的处理方案,列出计算的执行步骤。这种规定的操作步骤称为算法,而这

些操作之间的执行顺序就是控制流程。通常使用流程图描述步骤,把算法的思想表达清

楚。比较简单的问题可以直接编写程序。

4.根据操作步骤编写源程序

5.运行调试程序

将计算机程序输入计算机并使之运行,如果程序正确,则能够得到预期的结果。如

果得不到正确的结果,则应检查程序是否有错误,改正后重新运行,直到得出正确的结

果为止。

最后整理输出结果,写出相关文档。

4

知识点三、面向对象的程序设计

面向对象程序设计的基本思想是:将人们在日常生活中习惯的思维方式和表达方式

应用在程序设计中,以客观世界中的对象为中心,以类和继承为构造机制来进行软件开

发活动。面向对象程序设计方法具有继承性、封装性和多态性

3

个特性。

1.面向对象的基本概念

(1)对象(object)与类(class)

对象与类是面向对象程序设计中最重要的两个概念。在面向对象的程序设计中,对

象的概念就是将现实世界中的对象模型化,它是由一组表述其属性的数据和定义在这组

属性上的专用操作组成的封装体。对象是构成系统的一个基本单位。一个对象通常由对

象名、属性和操作组成。对象的属性表示事物的静态特征(即可以用一些数据来表达的

特征),对象的服务(或操作)表示事物的动态特征(即事物的行为)。

类是一组具有相同属性和相同操作的对象的集合。一个对象是类的一个实例

instance

)。为了处理问题的需要,在面向对象方法中,人们抽取同种对象的公共属

性和特点,以类的概念来表示。当一个类建立以后,才可以使用这个类创建任意多的对

象。在类中的每个对象都是确定的。

(2)封装(encapsulation)

对象的属性与服务结合为一个独立的实体,对外屏藏其内部细节,称为封装。封装

把对象的属性和操作结合成一个不可分割的整体,在这个整体中,一些属性(操作)是

被保护的,以防外界的干扰和误操作,另一些属性(操作)是公共的,它们作为接口供

外界使用。封装的结果就是使一个对象形成接口和实现两个部分。对用户来说,接口是

可见的,实现是不可见的。封装是面向对象方法的重要机制,其目的是有效地实现信息

隐藏原则。接口是对象接受外部消息时所要进行操作的集合。

(3)事件(event)

事件是对象的动作,而这个动作可能会改变对象内部的状态或向外界提供某种功能。

事件就是为了完成某一任务,向一个对象提供并体现其功能的操作。属于同一类的所有

对象共享相同的事件。

5

(4)继承(inheritance)

继承是从一个类引申到另外一个类的主要方法,它是表达类之间相似性的一种机制,

即在已有类的基础之上增加构造新的类,前者称为父类(或超类),后者称为子类。这

样,子类除了拥有父类的全部属性和操作外,还可以拥有自己特有的属性和操作。如果

子类只从一个父类继承,则称为单一继承;如果子类从一个以上父类继承,则称为多重

继承。

继承是面向对象程序设计方法有别于其他设计方法最主要的特点之一。继承的优点

是能够清晰地体现相关类之间的层次结构关系,可以减少代码和数据的冗余,增加了程

序的复用能力。

(5)消息(message)

消息是向对象发出的服务请求,是对象和对象之间进行通信的手段。一个对象通过

向另一个对象发送消息来请求服务,接收到消息的对象经过解释,然后给予响应,这种

通信机制称为消息传递。发送消息的对象不需要知道接收消息的对象如何对请求予以响

应。消息要素通常包括发送对象、接收对象、操作和适当的参数。

(6)多态性(polymorphism)

对象在收到消息时要予以响应,不同的对象收到同一消息可产生完全不同的结果,

这一现象称做多态性。在使用多态性的时候,用户可以发送一个通用的消息,而实现的

细节则由接收的对象自行决定,这样,同一消息就可以调用不同的方法。多态性允许每

个对象以适合自身的方式去响应共同的消息。多态性增强了软件的灵活性和重用性。

多态性与继承性相结合使软件具有更广的重用性和可扩充性。

2.面向对象程序设计的基本步骤

面向对象程序设计的基本步骤如下:

①分析问题,建立模型。

②标识类、对象及它们的属性。

③标识每个对象所要求的操作和提供的操作。

④建立对象之间的联系。

⑤建立每个对象的接口。

⑥实现每个对象。

6

面向对象的程序设计方法强调把问题领域的概念直接映射到对象及对象之间的接

口,这样做符合人们通常解决问题的思维方式。它把属性和操作封装在“对象”中,当

外部功能发生变化时,保持了对象结构的相对稳定,使改动局限于一个对象的内部。因

此,按照面向对象方法开发出来的软件具有易于扩充、修改和维护的特性。

知识点四、程序的三种基本结构

C

语言程序有以下三种基本结构:

1.顺序结构

顺序结构是最简单的基本结构。如下图所示,

A

B

两部分顺序执行。

顺序结构

2.选择结构

选择结构包括一个判断框,根据给定的条件

P

是否成立而选择执行

A

B

,如下

图(

a

),或根据条件

P

决定是否执行

A

,如下图(

b

)。

(a) (b)

选择结构

7

3.循环结构

循环结构是反复执行某一部分的操作。循环结构有以下两种:

1

)当型(

while

)循环结构,如下图(

a

),当条件

p1

成立时才执行

A

部分操作,

否则

A

部分操作一次也不执行。

2

)直到型(

until

)循环结构,如下图(

b

),必须执行

A

部分一次后,才去判

定条件

p2

是否成立,成立继续执行

A

部分操作,否则

A

部分操作不执行。

循环结构

三种基本结构具有以下的共同特点:

1

)只有一个入口;

2

)只有—个出口;

3

)结构内的每一部分都有机会被执行;

4

)结构内不能存在“死循环”。

结构化程序要求每一基本结构具有单入口和单出口的性质是十分重要的,这是为了

便于保证和验证程序的正确性。设计程序时一个结构一个结构地顺序写下来,整个程序

结构层次分明。在需要修改程序时,可以将某一基本结构单独孤立出来进行修改,由于

单入口单出口的性质,基本不会影响到其它的基本结构。

知识点五、软件工程概述

软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学

科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。

8

在现代社会中,软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机

界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算

机软件的应用,如工业、农业、银行、航空、政府部门等,这些应用促进了经济和社会

的发展,也提高了工作效率和生活效率

1.软件危机

(1)软件危机定义

软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致

软件开发与维护过程中出现一系列严重问题的现象。

(2)软件危机的原因

①软件的规模越来越大,结构越来越复杂;

②软件开发管理困难而复杂;

③软件开发费用不断增加;

④软件开发技术落后;

⑤生产方式落后;

⑥开发工具落后,生产率提高缓慢。

2.软件工程的内涵

软件工程过程是指为获得软件产品,在软件工具的支持下由软件工程师完成的一系

列软件工程活动,包括以下四个方面:

P

Plan

):软件规格说明,规定软件的功能及其运行时的限制。

D

Do

):软件开发,开发出满足规格说明的软件。

C

Check

):软件确认,确认开发的软件能够满足用户的需求。

A

Action

):软件演进,软件在运行过程中不断改进以满足客户新的需求。

从软件开发的观点看,软件工程就是使用适当的资源(包括人员,软硬件资源,时

间等),为开发软件进行的一组开发活动,在活动结束时输入(即用户的需求)转化为

输出(最终符合用户需求的软件产品)。

3.软件工程的三个阶段

定义阶段:可行性研究初步项目计划、需求分析;

开发阶段:概要设计、详细设计、实现、测试;

9

运行和维护阶段:运行、维护、废弃。

4.软件工程的目标

软件工程的目标是:在给定成本、进度的前提下,开发出具有适用性、有效性、可

修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性

和满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,减

少维护的困难。

知识点六、软件生命周期

1.可行性研究

(1)目的

可行性研究的目的是用最小的代价、在尽可能短的时间内确定问题是否能够解决,

以及是否值得解决,即可行性研究的结果是“做还是不做”而非“如何去做”。

(2)研究内容

①技术可行性

现有技术能否实现本系统,现有人员能否胜任,开发系统的资源能否满足。

②经济可行性

经济效益是否超出开发成本。

③操作可行性

系统的操作方式在这个用户组织内是否行得通。

④社会可行性

系统开发完成后能否得到社会的认可。

(3)使用的工具

①系统流程图

系统流程图是概况地描绘物理系统的工具。它的基本思想是用图形符号以黑盒子形

式描绘组成系统的每个部件(程序、文档、数据库、人工过程等)。系统流程图表达的

是数据在系统各部件之间的流动情况,而不是对数据进行加工处理的控制过程,因此尽

管系统流程图的某些符号和程序流程图的符号形式相同,但是它却是物理数据流图而不

是程序流图。

10

②数据流图

数据流图(

DFD

)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过

程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中

流动和被处理的逻辑过程。

(4)产生成果

《可行性研究报告》

2.需求分析

(1)任务

它的基本任务是准确地回答“系统必须做什么?”这个问题。

(2)工具

①实体-联系图

数据对象:对软件必须理解的复合信息的抽象。所谓复合信息是指具有一系列不同

性质或属性的事务,仅有单个值的事物。

属性:属性定义了数据对象的性质。

联系:一对一联系、一对多联系、多对多联系。

②状态转换图

状态转换图(简称状态图)通过描绘系统的状态及引起系统状态转换的事件,来表

示系统的行为。

状态:是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式,

状态规定了系统对时间的响应方式。

事件:事件是在某个特定时刻发生的事情,它是对引起系统做动作或从一个状态转

换到另一个状态的外界事件的抽象。

③层次方框图

层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构。树形结构的

顶层是一个单独的矩形框,它代表完整的数据结构,下面的各层矩形框代表这个数据的

子集,最底层的各个框代表组成这个数据的实际数据元素。

11

④Warnier图

法国计算机科学家

Warnier

提出了表示信息层次结构的另一种图形工具

-Warnier

图。

和层次方框图类似,

Warnier

图也用树形结构描述信息,但是这种图形工具比层次方框

图提供的描绘手段更丰富。

⑤IPO图

IPO

图是输入、处理、输出图的简称,它是由美国

IBM

公司发展完善起来的一种

图形工具,能够方便地描绘输入数据、对数据的处理和输出数据之间的关系。

(3)产生结果

《需求规格说明书》

3.总体设计

(1)目的

总体设计的基本目的就是回答“概况地说,系统该如何实现?”这个问题,因此,

总体设计又称为概要设计或者初步设计。

(2)构成

总体设计过程通常由两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;

结构设计阶段,确定软件的结构。

(3)过程

①设想供选择的方案

②选取合理的方案

③推荐最佳方案

④功能分解

⑤软件设计结构

⑥设计数据库

⑦制定测试计划

⑧书写文档(系统说明、用户手册、测试计划、详细的实现计划、数据库设计结构)

⑨审查和复审

12

(4)设计原理

①模块化

模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,

把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。在软件开发

中模块化遵循的原理是“高内聚,低耦合”。

内聚是从功能角度来度量模块内的联系,高内聚就是一个模块内各个元素彼此结合

的紧密程度高。

耦合是软件结构中各模块之间相互连接的一种度量,低耦合就是各个模块之间的相

互依存度却要不那么紧密。

②抽象

软件工程过程中的每一步都是对软件分解法的抽象层次的一次精化。在可行性研究

阶段,软件作为系统的一个完整部件;在需求分析期间,软件分解法是使用在问题环境

内熟悉的方式描述;当由总体设计向详细设计过渡时,抽象的程度也就随之减少了;最

后当源程序写出来以后,也就达到了抽象的最底层。

③逐步求精

程序的体系结构是通过逐步精化处理过程的层次而设计出来的。通过逐步分解对功

能的宏观陈述而开发出层次结构,直至最终得出用程序设计语言表达的程序。

④信息隐藏和局部化

所谓局部化是指把一些关系密切的软件元素物理地放得彼此靠近。在模块中使用局

部数据元素是局部化的一个例子。显然,局部化有助于实现信息隐藏。

(5)工具

①层次图

层次图用来描述软件的层次结构。层次图适用于自顶向下设计软件的过程中使用。

②HIPO图

HIPO

图是美国

IBM

公司发明的“层次图加输入

/

处理

/

输出图”的英文缩写。为了

能使

HIPO

图具有可追踪性,在层次图里除了最顶层的方框之外,每个方框都加了编号。

13

③结构图

结构图和层次图类

Yourdon

提出的结构图是进行软件结构设计的另一个有力工具。

似,也是描绘软件结构的图形工具,图中一个方框代表一个模块,框内注明模块的名字

或者主要功能;方框之间的箭头(或者直线)表示模块的调用关系。

4.详细设计

(1)目的

详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说,经

过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个

描述直接翻译成用某种程序设计语言书写的程序。

(2)面向过程设计的工具

①程序流程图

程序流程图又称为程序框图,它是历史最悠久的、使用最广泛的描述过程设计的方

法。

②盒图

出于要有一种不允许违背结构程序设计精神的图形工具的考虑,

Nassi

Shneiderman

提出了盒图,又称为

N-S

图。

③PAD图

1973

年由日本日立公司发明以后,已得到一定程度的推广。

PAD

是问题分析图,

它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。

④判定表

判定表能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。

⑤判定树

判定表虽然能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。但其含

义却不是一眼能看出来的,初次接触这种工具的人理解它需要有一个简短的学习过程。

此外,当数据元素的值多于两个时,判定表的简洁程度也将下降,所以产生了判定树。

(3)产生结果

最终形成《软件系统详细设计报告》。

14

5.编码

在软件编码阶段,开发者根据《软件系统详细设计报告》中对数据结构、算法分析

和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从

而实现对目标系统的功能、性能、接口、界面等方面的要求。

6.测试

(1)测试目的

为了尽可能多的发现程序中的问题。

(2)测试步骤

①模块测试

保证每个模块作为一个单元能正确运行,所以模块测试通常又称为单元测试。在这

个测试步骤中所发现的往往是编码和详细设计的错误。

②子系统测试

子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。模块相互间

的协调和通信是这个测试过程中的主要问题,因此,这个步骤着重测试模块的接口。

③系统测试

系统测试是把经过测试的子系统装配成一个完整的系统来测试。

④验收测试

验收测试的目的是验证系统确实是能够满足用户的需要,在这个测试步骤中发现的

往往是系统需求说明书中的错误。验收测试也称为确认测试。

⑤平行运行

所谓平行运行就是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新

旧两个系统的处理结果。

(3)测试分类

①从是否关心软件内部结构和具体实现的角度划分

A.

黑盒

黑盒测试法把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。也就

是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的

规定正常使用,程序是否能适当地接收输入的数据并产生正确的输出信息,程序运行过

程中能否保持外部信息的完整性。黑盒测试又称为功能测试。

15

B.

白盒测试

白盒测试法把程序看成是一个透明的白盒子,测试者完全知道程序的结构和处理算

法。这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预

定要求正确工作。白盒测试又称为结构测试。

C.

灰盒测试

是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅

关注输出、输入的正确性,同时也关注程序内部的情况。

②从是否执行程序的角度

A.

静态测试

静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、

接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、

流程图分析、符号执行来找错。静态方法通过程序静态特性的分析,找出欠缺和可疑之

处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变

量、空指针的引用和可疑的计算等。

B.

动态测试

动态测试方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运

行效率、正确性和健壮性等性能。这种方法由三部分组成:构造测试用例、执行程序、

分析程序的输出结果。

(4)软件测试版本

①Alpha版(内部测试版)

Alpha

版本通常会送交到开发软件的组织或社群中的各个软件测试者,用作内部测

试。在市场上,越来越多公司会邀请外部的客户或合作伙伴参与其软件的

Alpha

测试阶

段。

②Beta版(外部测试版)

Beta

版本是第一个对外公开的软件版本,是由公众参与的测试阶段。一般来说,

Beta

版包含所有功能,但可能有一些已知问题和缺陷(

Bug

)。

③Full Version版(完全版)

即正式版,是最终正式发售的版本。

16

④Upgrade版(升级版)

当拥有某个软件以前的正式版本时,可以购买升级版,将软件升级为最新版。升级

后的软件与正式版在功能上相同,但价格会低些,这主要是为了给原有的正版用户提供

优惠。

7.维护

在软件生命周期内,维护环节的成本最为昂贵。主要分为以下几种类型:

(1)改正性维护

改正性维护是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。

(2)适应性维护

适应性维护是指使用软件适应信息技术变化和管理需求变化而进行的修改。

(3)完善性维护

完善性维护是为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增

加一些在系统分析和设计阶段中没有规定的功能与性能特征。

(4)预防性维护

预防性维护为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的

变化,应主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。

17


本文标签: 软件 系统 对象 程序 结构