2.1 考点精讲
根据考试大纲,本章要求考生掌握以下知识点:
1)程序设计方法与风格。
2)结构化程序设计。
3)面向对象的程序设计方法,对象,方法,属性及继承与多态性。
2.1.1 程序设计的方法与风格
程序设计风格指一个人编制程序时所表现出来的特点、习惯、逻辑思路等。
在程序设计中要使程序结构合理、清晰,形成良好的编程习惯。对程序的要求不仅是可以在机器上执行,给出正确的结果,而且要便于程序的调试和维护,这就要求编写的程序不仅自己看得懂,而且也要让别人能看懂。
随着计算机技术的发展,软件的规模扩大了,软件的复杂性也增强了。为了提高程序的可阅读性,要形成良好的编程风格。
一般来讲,程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。程序是由人来编写的,为了测试和维护程序,往往还要阅读和跟踪程序,因此程序设计的风格总体而言应该简单和清晰,程序必须是可以理解的。
1.数据说明的方法
1)数据说明顺序应规范,使数据的属性更易于查找,从而有利于测试、纠错与维护。
2)一个语句说明多个变量时,各变量名按字母排序。
3)对于复杂的数据结构要加注释,说明在程序实现时的特点。
2.输入和输出
无论是批处理的输入和输出方式,还是交互式的输入和输出方式,在设计和编程时都应该考虑如下原则:
1)输入操作步骤和输入格式尽量简单。
2)应检查输入数据的合法性、有效性,报告必要的输入状态信息及错误信息。
3)输入一批数据时,使用数据或文件结束标志,而不要用计数来控制。
4)交互式输入时,提供可用的选择和边界值。
5)当程序设计语言对输入格式有严格要求时,应保持输入格式与输入语句的一致性。
6)输出数据表格化、图形化。
7)应允许默认值。
8)给所有的输入和输出加注释,并设计输出报表格式。
2.1.2 结构化程序设计
常用的结构化程序设计有以下3种形式。
1.顺序结构
顺序结构是简单的程序设计,它是最基本、最常用的结构,所谓顺序执行,就是按照程序语句行的自然顺序,一条语句一条语句地执行程序,如图2-1所示。
图2-1 顺序结构程序
2.选择结构
选择结构又称为分支结构,它包括简单选择和多分支选择结构。这种结构可以根据设定的条件,判断应该选择哪一条分支来执行相应的语句序列,如图2-2所示。
3.循环结构
循环结构根据给定的条件,判断是否需要重复执行某一相同的或类似的程序段,利用重复结构可简化大量的程序行。它分为两类:一是先执行后判断,二是先判断后执行,如图2-3所示。
图2-2 选择结构程序
图2-3 循环结构程序
2.1.3 面向对象的程序设计
对象是面向对象方法中最基本的概念。对象可以用来表示客观世界中的任何实体,也就是说,应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界意义的东西。总之,对象是对问题域中某个实体的抽象,设立某个对象就反映软件系统保存有关它的信息并具有与它进行交互的能力。
面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表示其静态特征的属性和它可执行的一组操作组成。
对象可以做的操作表示它的动态行为,在面向对象分析和面向对象设计中,通常把对象的操作也称为方法或服务。
属性即对象所包含的信息,它在设计对象时确定,一般只能通过对象的操作来改变。
操作描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。操作过程对外是封闭的,即用户只能看到这一操作实施后的结果。这相当于事先已经设计好的各种过程,用户只要调用就可以了,而不必关心这一过程是如何编写的。事实上,这个过程已经封装在对象中,用户也看不到。这一特性即是对象的封装性。
1.面向对象特点
面向对象具有封装性、继承性和多态性。
(1)封装性
封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接收哪些消息,具有哪些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象的使用者分开,使用者不必知晓行为实现的细节,只需用设计者提供的消息来访问该对象即可。
(2)继承性
继承性是子类自动共享父类之间数据和方法的机制,它由类的派生功能体现。一个类直接继承其他类的全部描述,同时可修改和扩充。继承具有传递性,继承分为单继承(一个子类只有一个父类)和多重继承(一个类有多个父类)。类对象是各自封闭的,如果没继承性机制,则类对象中的数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
(3)多态性
对象根据所接收的消息而做出动作。同一消息为不同的对象接收时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接收消息的对象自行决定,同一消息即可调用不同的方法。例如,Print消息被发送给图或表时调用的打印方法与将同样的Print消息发送给正文文件而调用的打印方法可能完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在面向对象的编程语言中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。
2.类和实例
类是对象的模板,即类是对一组有相同数据和相同操作的对象的定义。一个类所包含的方法和数据可描述一组对象的共同属性和行为,将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。
需要注意的是,当使用“对象”这个术语时,既可以指一个具体的对象,也可以泛指一般的对象。但是,当使用“实例”这个术语时,必然是指一个具体的对象。
由类的定义可知,类是关于对象性质的描述,它同对象一样,包括一组数据属性和在数据上的一组合法操作。
在UML语言中,类的表示如图2-4所示。
图2-4 UML语言中的类
3.消息
面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种相互合作需要一个机制协助进行,这样的机制称为“消息”。消息是一个实例与另一个实例之间传递的信息,它是对象执行某一处理或回答某一要求的信息,它统一了数据流的控制流。消息的使用类似于函数调用,消息中指定了某一个实例、一个操作名和一个参数表(可为空)。接收消息的实例执行消息中指定的操作,并将形式参数与参数表中相应的值结合起来。在消息传递过程中,由发送消息的对象(发送对象)的触发操作产生输出结果,作为消息传送至接收消息的对象(接收对象),引发接收消息对象的一系列的操作。所传送的消息实质上是接收对象所具有的操作/方法名称,有时还包括相应参数。
通常,一个消息由以下3部分组成:
1)接收消息的对象的名称。
2)消息标识符(也称为消息名)。
3)0个或多个参数。