第二章 程序设计基础
一、学习目标与要求
1.了解程序设计的方法,以及程序设计风格确立的一些因素,掌握程序设计的基本规则;
2.了解结构化程序设计的基本原则,掌握结构化程序设计的基本结构与特点; 3.了解面向对象的程序设计方法,并理解面向对象方法的一些基本概念。 二、内容要点
(一)程序设计方法与风格
程序设计方法:主要经过了面向过程的结构化程序设计和面向对象的程序设计方法。 程序设计风格,是指编写程序时所表现出来的特点、习惯和逻辑思路。通常,要求程序设计的风格应强调简单和清晰,必须是可以读的,可以理解的。
要形成良好的程序设计的风格,应考虑如下因素: 1.源程序文档化
(1)符号名的命名:符号名的命名要具有一定的实际含义,便于对程序的理解,即通常说的见名思义;
(2)程序注释:正确的程序注释能够帮助他人理解程序。注释一般包括序言性注释和功能性注释;
(3)视觉组织:为了使程序一目了然,可以对程序的格式进行设置,适当地通过空格、空行、缩进等使程序层次清晰。 2.数据说明方法
(1)数据说明的次序规范化; (2)说明语句中变量安排有序化; (3)使用注释来说明复杂的数据结构。 3.语句的结构
(1)在一行内只写一条语句;
(2)程序的编写应该优先考虑清晰性;
(3)除非对效率有特殊的要求,否则,应做到清晰第一,效率第二; (4)首先保证程序的正确,然后再要求速度; (5)避免使用临时变量使程序的可读性下降;
(7)尽量使用库函数,即尽量使用系统提供的资源; (8)避免采用复杂的条件语句;
(9)尽量减少使用“否定”条件的条件语句; (10)数据结构要有利于程序的简化;
(11)要模块化,使模块功能尽可能单一化; (12)利用信息隐蔽,确保每一个模块的独立性;
(13)从数据出发去构造程序;
(14)不要修补不好的程序,要重新编写。 4.输入和输出
(1)对所有的输入输出数据都要检验数据的合法性; (2)检查输入项的各种重要组合的合理性;
(3)输入格式要简单,以使得输入的步骤和操作尽可能简单; (4)输入数据时,应允许自由格式; (5)应允许缺省值;
(6)输入一批数据时,最好使用输入结束标志;
(7)以交互式输入输出方式进行输入时,要在屏幕上使用提示符明确输入的请求,同时在数据输入过程中和输入结束时,应在屏幕上给出状态信息;
(8)当程序设计语言对输入格式有严格要求时,应保持输入格式与输入语句的一致性;给所有的输出加注释,并设计输出报表格式。 (二)结构化程序设计 1.结构化程序设计的原则
结构化程序设计方法的主要原则:自顶而下、逐步求精,模块化,限制使用goto语句。 1)自顶而下
程序设计时,应先考虑总体,后考虑细节;先考虑全局,后考虑局部目标。即先从最上层总目标开始设计,逐步使问题具体化。 2)逐步求精
对复杂问题,应设计一些子目标作为过渡,逐步细化。 3)模块化
一个复杂问题,都是由若干个稍简单的问题构成的。模块化即是将复杂问题进行分解,即将解决问题的总目标分解成若干个分目标,再进一步分解为具体的小目标,把每一个小目标称作一个模块。 4)限制使用goto语句
goto语句可以提高效率,但对程序的可读性、维护性都造成影响,因此应尽量不用goto语句。
2.结构化程序设计的基本结构与特点
结构化程序设计是程序设计的先进方法和工具,采用结构化程序设计可以使程序结构良好、易读、易理解、易维护。 1)顺序结构
顺序结构即是顺序执行的结构,是按照程序语句行的自然顺序,一条一条语句地执行程序。
2)选择结构
选择结构又称分支结构,它包括简单选择和多分支选择结构。程序的执行是根据给定的条件,选择相应的分支来执行。 3)重复结构
重复结构又称循环结构,根据给定的条件,决定是否重复执行某一相同的或类似的程序段。利用重复结构可以大量简化程序行。 3.结构化程序设计原则和方法的应用
1.使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑; 2.选用的控制结构只允许有一个入口和一个出口;
3.程序语句组成容易识别的块,每块只有一个入口和一个出口; 4.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现; 5.语言中所有没有的控制结构,应该采用前后一致的方法来模拟; 6.严格控制goto语句的使用:
(1)用一个非结构化的程序设计语言去实现一个结构化的构造; (2)若不使用goto语句会使功能模糊;
(3)在某种可以改善而不是损害程序可读性的情况下。 (三)面向对象的程序设计 1.关于面向对象方法
面向对象方法的本质,是主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的系统能够反映问题域,即系统中的对象以及对象之间的关系能够如实地反映问题域中固有事物及其关系。
面向对象的优点: 1)与人类习惯的思维方法一致
传统的程序设计方法是以算法作为核心,将程序与过程相互独立。 面向对象方法和技术是以对象为核心,对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应关系。对象之间通过传递消息互相联系,以实现模拟世界中不同事物之间的联系。 2)稳定性好
面向对象方法基于构造问题领域的对象模型,以对象为中心构造软件系统。它的基本方法是用对象模拟问题领域中的实体,以对象间的联系刻画实体间的联系。 3)可重用性好
软件的重用性是指在不同的软件开发过程中重复使用相同或相似的软件元素的过程。 4)易于开发大型软件产品
在使用面向对象进行软件开发时,可以把大型产品看作是一系列本质上相互独立的小产品来处理,降低了技术难度,也使软件开发的管理变得容易。
5)可维护性好
(1)利用面向对象的方法开发的软件稳定性比较好 (2)用面向对象的方法开发的软件比较容易修改 (3)用面向对象的方法开发的软件比较容易理解 (4)易于测试和调试 2.面向对象方法的基本概念 1)对象
在面向对象程序设计方法中,对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表示其静态特征的属性和它执行的一组操作组成。
对象的基本特点: (1)标识的唯一性
对象是可区分的,并且由对象的内在本质来区分,而不是通过描述来区分。 (2)分类性
指可以将具有相同属性和操作的对象抽象成类。 (3)多态性
指同一个操作可以是不同对象的行为。 (4)封装性
从外面看只能看到对象的外部特征,即只需知道数据的取值范围和可以对该数据施加的操作,根本无需知道数据的具体结构以及实现操作的算法。
(5)模块独立性好
对象是面向对象的软件的基本模块,它是由数据及可以对这些数据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无关的操作。从模块的独立性考虑,对象内容各种元素彼此相结合得很紧密,内聚性强。 2)类和实例
将属性、操作相似的对象归为类。具有共同的属性、共同的方法的对象的集合,即是类。 类是对象的抽象,它描述了属于该对象的所有对象性质,而一个对象则是其对应类的一个实例。 3)消息
消息是一个实例与另一个实例之间传递的信息,它请求对象执行某一处理或回答某一个要求的信息,它统一了数据流和控制流。
消息只包含传递者的要求,它告诉接受者需要做哪些处理,并不指示接受者怎样去完成这些处理。 4)继承
继承是使用已有的类定义作为基础建立新类的定义技术。已有的类可当作基类来引用,则新类相应地可作为派生类来引用。
继承即是指能够直接获得已有的性质和特征,而不必重复定义它们。 5)多态性
对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可导致完全不同的
行动,该现象称为多态性。
在面向对象技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息可以发送给父类对象也可以发送给子类对象。
多态性机制增加了面向对象软件系统的灵活性,减少了信息冗余,而且显著提高了软件的可重用性可扩充性。 三、例题分析 1.选择题
1)程序是计算任务的
A)处理对象的描述 B)计算方法的表示
C)软件动作的描述 D)处理对象和处理规则的描述 【答案】D
2)结构化方法的详细设计,其主要任务是
A)定义模块的算法 B)给出加工说明 C)给出模块结构图 D)设计处理对象 【答案】C
3)结构化程序设计主要强调的是
A)程序的规模 B)程序的效率 C)程序设计语言的先进性 D)程序易读性 【答案】D
4)程序的三种基本控制结构是
A)过程、子程序和分程序 B)顺序、选择和重复 C)递归、堆栈和队列 D)调用、返回和转移 【答案】B
5)程序的三种基本控制结构的共同特点是
A)不能嵌套使用 B)只能用来写简单程序 C)已经用硬件实现 D)只有一个入口和一个出口 【答案】D
6)下面对对象概念描述错误的是 A)任何对象都必须有继承性 B)对象是属性和方法的封装体 C)对象间的通讯靠消息传递 D)操作是对象的动态属性 【答案】A 2.填空题
1)在面向对象方法中,信息隐蔽是通过对象的 性来实现的。 【答案】封装
2)类是具有共同属性、共同方法的 的集合。 【答案】对象
3)在面向对象方法中,类之间共享属性和操作的机制称为 。 【答案】继承