程序设计和软件工程基础.doc
《程序设计和软件工程基础.doc》由会员分享,可在线阅读,更多相关《程序设计和软件工程基础.doc(37页珍藏版)》请在沃文网上搜索。
1、第10章 程序设计和软件工程基础10.1 程序设计语言概述10.1.1 指令、程序及计算机语言 指令及指令系统 指令指令(Instruction)是用来指挥和控制计算机完成某种基本操作的命令。程序是由一系列指令序列组成的,用以完成一个指定的任务。 指令格式一条指令,通常包括两方面的内容:操作码及地址码。其中,操作码用来表示一条指令操作特性及功能,即做什么样的操作;地址码给出参与操作的数据在存储中的地址,即操作对象。因此,一条指令的基本格式可以表示为:操作码地址码 指令系统一种类型的计算机所能识别的一组指令的集合称为指令集(Instruction Set)或指令系统。指令系统决定了一台计算机硬件
2、的主要性能和基本功能。一种计算机的指令系统都比较充分地说明该种机器的运算和处理能力。一般微型计算机有几十条到几百条不同的指令。这些指令可按其操作功能的不同分为以下四类: 数据处理指令数据处理指令以某种方式对数据进行算术运算、逻辑运算、移位和比较。这些指令的操作功能一般由运算器的算术逻辑运算单元(ALU)来完成。 数据传送指令数据传送指令的功能是将数据从一个地方传送到另一个地方,而改变数据的位置。如:存储器传送指令、输入输出指令等。 程序控制指令程序控制指令能改变程序计数器的PC(Program Counter)内容,使程序改变正常的执行顺序。如:无条件转向指令、子程序调用指令等。 状态管理指令
3、状态管理指令数量一般较少,其功能是只改变CPU的工作状态,而不影响其它指令和数据。如:开放中断指令、禁止中断指令等。 程序及其特性程序是为完成某一任务用计算机语言编写的有限个操作命令的序列。程序有以下特性: 目的性:程序总是有一明确的目的,是为解决问题而设计的。 分步性:程序总是分成若干个操作步骤,逐步解决问题。 有限性:有限个操作步骤以便计算机实现,如果有无穷多个步骤,就无法完成。 顺序性:程序中的指令是按一定的顺序执行的。 分支性:根据条件的不同,可以实现不同步骤来解决问题。计算机之所以能自动地工作,就是因为运行程序的结果。计算机能按照程序的安排去执行相应的指令,才使计算机看起来像是自动地
4、、连续地工作。 计算机语言人和计算机交流信息使用的语言称为计算机语言或称程序设计语言。计算机语言通常分为机器语言、汇编语言和高级语言三类。 机器语言机器语言是一种用二进制代码“0”和“1”形式表示的,能被计算机直接识别和执行的语言。用机器语言编写的程序,称为计算机机器语言程序。它是一种低级语言,用机器语言编写的程序不便于记忆、阅读和书写。通常不用机器语言直接编写程序。 汇编语言汇编语言是一种用助记符表示的面向机器的程序设计语言。汇编语言的每条指令对应一条机器语言代码,不同类型的计算机系统一般有不同的汇编语言。用汇编语言编写的程序称为汇编语言源程序,机器不能直接识别和执行,必须由“汇编程序”(或
5、汇编系统)翻译成机器语言程序才能运行。这种“汇编程序”就是汇编语言的翻译程序。汇编语言适用于编写直接控制机器操作的低层程序,它与机器密切相关,不容易使用。 高级语言高级语言是一种比较接近自然语言和数学表达式的一种计算机程序设计语言。一般用高级语言编写的程序称为“源程序”,计算机不能识别和执行,必须把源程序翻译成机器指令,计算机才能识别和执行。通常有编译和解释两种翻译方式。编译方式是将源程序整个编译成目标程序,然后通过链接程序将目标程序链接成可执行程序。经过一次编译过程后,如果需要再次执行该程序,则无需再翻译,可直接执行可执行程序。工作过程如图10-1所示。解释方式是将源程序逐句翻译,翻译一句执
6、行一句,边翻译边执行,不产生目标程序,从而节省了存储空间,但是每次执行必须重新进行翻译。BASIC语言就属于这一类,但改进的BASIC语言Visual Basic可进行程序的编译。工作过程如图10-2所示。图10-1 编译程序的工作过程图10-2 解释程序的工作过程10.1.2 程序设计风格一般来讲,程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。因此程序设计的风格总体而言应该强调程序简单和清晰,并且是可以理解的。 “清晰第一,效率第二”已成为当今主导的程序设计风格。程序设计风格主要体现在以下几个方面: 源程序文挡化源程序文挡化应考虑如下几点: 符号名的命名符号名的命名应具有一定的实
7、际含义,以便于对程序功能的理解。 程序注释正确的注释能够帮助读者理解程序。注释一般分为序言性注释和功能性注释。序言性注释通常位于每个程序的开头部分,它给出了程序的整体说明,主要描述内容包括:程序标题、程序功能说明、主要算法、接口说明、程序位置、开发简历、程序设计者、复审者、复审日期、修改日期等。功能性注释的位置一般嵌在源程序体中,主要描述其后的语句或程序做什么。 视觉组织为使程序的结构一目了然,可以在程序中利用空格、空行、缩进等技巧使程序的结构层次清晰。 数据说明的方法在编写程序时,需要注意数据说明的风格,以便使程序中的数据更易于理解和维护。一般应注意如下几点: 数据说明的次序规范化鉴于程序理
8、解、阅读和维护的需要,使数据说明次序固定,可以使数据的属性容易查找,也有利于测试、排错和维护。 说明语句中变量安排有序化当一个说明语句说明多个变量时,变量按照字母顺序排序为好。 使用注释来说明复杂数据的结构。 语句的结构程序应该简单易懂,语句构造应该简单明了,不应该为了提高效率而把语句复杂化。一般应注意以下几点: 一行内只写一条语句; 程序编写应优先考虑清晰性; 除非对效率有特殊要求,程序编写要做到清晰第一,效率第二; 首先要保证程序正确,然后才要求提高速度; 避免使用临时变量而使程序的可读性下降; 避免不必要的转移; 尽可能使用库函数; 避免采用复杂的条件语句; 尽量减少使用“否定”条件的条
9、件语句; 数据结构要有利于程序的简化; 要模块化,使模块功能尽可能单一化; 利用信息隐蔽,确保每一个模块的独立性。 输入和输出输入和输出信息是用户直接关心的,输入和输出方式和格式应尽可能方便用户的使用,无论是批处理的输入和输出方式,还是交互式的输入和输出方式,在设计和编程时都应该考虑如下原则: 输入格式要简单,以使得输入的步骤和操作尽可能简单; 输入数据时,允许使用自由格式,允许缺省值; 输入一批数据时,最好使用输入结束标志; 在以交互式输入/输出方式进行输入时,要在屏幕上使用提示符明确提示输入的请求,同时数据输入过程中和输入结束时,应在屏幕上给出状态信息。10.2 结构化程序设计10.2.1
10、 结构化程序设计的原则由于软件危机的出现,人们开始研究程序设计方法,其中最受关注的是结构化程序设计方法。结构化程序设计方法引入了工程思想和结构化思想,使大型软件的开发和编程都得到极大的改善。结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用GOTO语句。 自顶向下程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。 逐步求精对复杂的问题,应设计一些子目标作过渡,逐步细化。 模块化一个复杂的问题,肯定是由若干个比较简单的问题构成。模块化是把程序要解决的总目标分解为分目标,再进一步
11、分解为具体的小目标,把每个小目标称为一个模块。10.2.2 结构化程序的基本结构结构化程序设计方法是程序设计的先进方法和工具。采用结构化程序设计方法编写程序,可使程序结构良好、易读、易理解、易维护。程序设计语言仅仅使用顺序、选择和循环三种基本控制结构就能表达出各种其它形式结构的程序设计方法。 顺序结构顺序结构是一种简单的程序设计,它是最基本、最常用的结构,如图10-3所示。顺序结构是顺序执行的结构,所谓顺序执行,就是按照程序语句行的自然顺序,逐条执行语句以达到执行程序。 选择结构选择结构又称为分支结构,它包括简单选择和多分支选择结构,这种结构可以根据设定的条件,判断应该选择哪一条分支来执行相应
12、的语句序列。图10-4列出了包含2个分支的简单选择结构。 循环结构循环结构又称为重复结构,它根据给定的条件,判断是否需要重复执行某一相同的或类似的程序段,利用循环结构可以简化大量的程序行。图10-5所示 图10-3 顺序结构 图10-4 选择结构图10-5 循环结构10.3 面向对象程序设计10.3.1 面向对象程序设计基本概念关于面向对象方法,对其概念有许多不同的看法和定义,但是都涵盖对象及对象属性与方法、类、继承等几个基本要素。下面分别介绍面向对象方法中这几个重要的概念,这些概念是理解和使用面向对象方法的关键和基础。 对象(Object)对象是面向对象方法中最基本的概念。对象可以用来表示客
13、观世界中的任何实体,也就是说,应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的实体。例如,一个人、一家公司、一个窗口、贷款和借款等,都可以作为一个对象。面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表示静态特征的属性和它可执行的一组操作组成。例如,一辆汽车是一个对象,它包含了汽车的属性(如颜色、型号、载重量等)及其操作(如启动、刹车等)。一个窗口是一个对象,它包含了窗口的属性(如大小、颜色、位置等)及其操作(如打开、关闭等)。客观世界中的
14、实体通常都既有静态的属性,又具有动态的行为,因此,面向对象方法学中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。对象可以做的操作表示它的动态行为,在面向对象分析和面向对象设计中,通常把对象的操作也称为方法。属性即对象所包含的信息,它在设计对象时确定,一般只能通过执行对象的操作来改变。如对象人的属性有姓名、年龄、体重等。不同对象的同一属性可以具有相同或不同的属性值。如张三的年龄为19,李四的年龄为20。张三、李四是两个不同的对象,他们共同的属性“年龄”的值不同。对象有如下一些基本特点: 惟一性指对象是具体的和可区分的,并且由对象的内在本质来区分,而不是通过
15、描述来区分。 分类性指可以将具有相同属性和操作的对象抽象成类。 封装性从外面看只能看到对象的外部特征,即只需知道数据的取值范围和可以对该数据施加的操作,根本无需知道数据的具体结构以及实现操作的算法。对象的内部,即处理能力的实行和内部状态,对外是不可见的。从外面不能直接使用对象的处理能力,也不能直接修改其内部状态,对象的内部状态只能由其自身改变。 模块独立性对象是面向对象的软件的基本模块,它是由数据及可以对这些数据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无关的操作。从模块的独立性考虑,对象内部各种元素彼此结合得很紧密。 类(Class)和实例(
16、Instance)将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。要注意的是,当使用“对象”这个术语时,既可以指一个具体的对象,也可以泛指一般的对象,但是,当使用“实例”这个术语时,必然是指一个具体的对象。例如:Integer是一个整型类,它描述了所有整数的性质。因此任何整数都是整数类的对象,而一个具体的整数“123”是类Integer的一个实例。由类的定义可知,类是关于对象性质的描述,它同对象一样,包括一组数据属性和数据上的一组合法操作。例如,一个面向对象的图形程序
17、在屏幕左下角显示一个半径3cm的红颜色的圆,在屏幕中部显示一个半径4cm的绿颜色的圆,在屏幕右上角显示一个半径1cm的黄颜色的圆。这三个圆心位置、半径大小和颜色均不相同的圆,是三个不同的对象。但是,它们都有相同的属性(圆心坐标、半径、颜色)和相同的操作(显示自己、放大缩小半径、在屏幕上移动位置,等等)。因此,它们是同一类事物,可以用“Circle类”来定义。 继承(Inheritance)继承是面向对象的方法的一个主要特征。继承是使用已有的类定义新类的定义技术。已有的类可当作基类来引用,则新类相应地可当作派生类来引用。广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。面向对象
18、软件技术的许多强有力的功能和突出的优点,都来源于把类组成一个层次结构的系统:一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是继承性,一个类直接继承其父类的描述(数据和操作)或特性,子类自动地共享基类中定义的数据和方法。10.3.2 面向对象的程序设计现在,面向对象(Object oriented)方法已经发展成为主流的软件开发方法。面向对象方法的本质,就是主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,系统中的对象以及对象之间的关系能够如实地反映固有事物及其关系。面向对象方法之所以日益受到人们的重视和应用,成为流行
19、的软件开发方法,是源于面向对象方法的以下主要优点: 与人类习惯的思维方法一致传统的程序设计方法是面向过程的,其核心方法是以算法为核心,把数据和过程作为相互独立的部分,数据代表客体,程序则用于处理这些数据,在计算机内部数据和程序是分开存放的,这样的做法忽略了数据和操作之间的内在联系。实际上,用计算机解决的问题都是现实世界中的问题,这些问题无非由一些相互存在一定联系的事物所组成,每个具体的事物都具有行为和属性两方面的特征。因此,把描述事物静态属性的数据结构和表示事物动态行为的操作放在一起构成一个整体,才能完整、自然地表示客观世界中的实体。面向对象方法和技术以对象为核心。对象是由数据和操作组成的封装
20、体,与客观实体有直接的对应关系。对象之间通过传递信息互相联系,以模拟现实世界中不同事物彼此之间的联系。 稳定性好面向对象方法基于对象模型,以对象为中心构造软件系统。它的基本作法是用对象模拟现实生活中的实体,以对象间的联系刻画实体间的联系。当对系统的功能需求变化时并不会引起软件结构的整体变化,往往仅需要作一些局部性的修改。由于现实世界中的实体是相对稳定的,因此,以对象为中心构造的软件系统也是比较稳定的。而传统的软件开发方法以算法为核心,开发过程基于功能分析和功能分解。用传统方法所建立起来的软件系统的结构紧密地依赖于系统所要完成的功能,当功能需求发生变化时将引起软件结构的整体修改。事实上,用户需求
21、变化大部分是针对功能的,因此,这样的软件系统是不稳定的。 可重用性好软件重用是指在不同的软件开发过程中重复使用相同或相似软件的过程。重用是提高软件生产率的最主要的方法。传统的软件重用技术是利用标准函数库,也就是试图用标准函数库中的函数来建造新的软件系统。但是,标准函数往往不能适应不同应用场合的不同需要,并不是理想的可重用的软件成分。实际的库函数往往仅提供最基本、最常用的功能,在开发一个新的系统时,通常多数函数是开发者自己编写的,甚至绝大多数函数都是新编的。面向对象的软件开发技术在利用可重用的软件成分构造新的系统软件的时候,有很大的灵活性。有两种方法可以重复使用一个对象类:一种方法是创建该类的实
22、例,从而直接使用它;另一种方法是从它派生出一个满足当前需要的新类。继承性机制使得子类不仅可以重用其父类的数据结构和程序代码,而且可以在父类代码的基础上方便地修改和扩充,这种修改并不影响对原有类的使用。可见,面向对象的软件开发技术所实现的可重用性是自然和准确的。 易于开发大型软件产品当开发大型软件时,组织开发人员的方法不恰当往往是出现问题的主要原因。用面向对象方法开发软件时,可以把一个大型产品看作是一系列本质上相互独立的小产品来处理,这样不仅降低了开发的技术难度,而且也使得对开发工作的管理变得容易。许多软件开发公司的经验都表明,当把面向对象技术用于大型软件开发时,软件成本明显地降低了,软件的整体
23、质量也提高了。 可维护性好用传统的开发方法和面向过程的方法开发出来的软件很难维护,是长期困扰人们的一个严重问题,是软件危机的突出表现。面向对象的方法开发的软件可维护性好,是因为: 用面向对象的方法开发的软件稳定性比较好当对软件的功能或性能的要求发生变化时,通常不会引起软件的整体变化,往往只需对局部做一些修改。由于软件的改动较小且限于局部,自然比较容易实现。 用面向对象的方法开发的软件比较容易修改在面向对象方法中,核心是类(对象),它具有理想的模块机制,独立性好,修改一个类通常很少会牵扯到其它类。面向对象技术特有的继承机制,使得对所开发的软件的修改和扩充比较容易实现,通常只需从已有类派生出一些新
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 软件工程 基础