五种程序设计方法

 

转自:http://www.neu.edu.cn/cxsj/pointchart/c1/Page19.html

1.        结构化程序设计

为了提高程序的可读性、可重用性等,逐渐出现了将程序开发中经常用到的相同的功能,比如数学函数运算、字符串操作等,独立出来编写成函数,然后按照相互关系或应用领域汇集在相同的文件里,这些文件构成了函数库

函数库是一种对信息的封装,将常用的函数封装起来,人们不必知道如何实现它们。只需要了解如何调用它们即可。函数库可以被多个应用程序共享,在具体编程环境中,一般都有一个头文件相伴,在这个头文件中以标准的方式定义了库中每个函数的接口,根据这些接口形式可以在程序中的任何地方调用所需的函数。

由于函数、库、模块等一系列概念和技术的出现,程序设计逐渐变成如图所示的风格。程序被分解成一个个函数模块,其中既有系统函数,也有用户定义的函数。通过对函数的调用,程序的运行逐步被展开。阅读程序时,由于每一块的功能相对独立,因此对程序结构的理解相对容易,在一定程度上缓解了程序代码可读性和可重用件的矛盾,但并未彻底解决矛盾。随着计算机程序的规模越来越大,这个问题变得更加尖锐,于是出现了另一种编程风格——结构化程序设计

在结构化程序设计中,任何程序段的编写都基于3种结构:分支结构、循环结构和顺序结构。程序具有明显的模块化特征,每个程序模块具有惟一的出口和入口语句。结构化程序的结构简单清晰,模块化强,描述方式贴近人们习惯的推理式思维方式。因此可读性强,在软件重用性、软件维护等方面都有所进步,在大型软件开发尤其是大型科学与工程运算软件的开发中发挥了重要作用。因此到目前为止,仍有许多应用程序的开发采用结构化程序设计技术和方法。即使在目前流行的面向对象软件开发中也不能完全脱离结构化程序设计。

 

2.        面向对象程序设计

面向对象的程序役计方法是程序设计的一种新方法。所有面向对象的程序设计语言一般都含有三个方面的语法机制,即对象和类、多态性、继承性。

1.对象和类

对象的概念、原理和方法是面向对象的理序设计语言晕重要的特征。对象是用户定义的类型(称为类)的变量。一个对象是既包含数据又包合操作该数据的代码(函数)的逻辑实体。对象中的这些数据和函数称为对象的成员,即成员数据和成员函数。对象中的成员分为公有的和私有的。公有成员是对象与外界的接口界面。外界只能通过调用访问一个对象的公有成员来实现该对象的功能。私有成员体现一个对象的组织形式和功能的实现细节。外界无法对私有成员进行操作。类对象按照规范进行操作,将描述客观事物的数据表达及对数据的操作处理封装在一起,成功地实现了面向对象的程序设计。当用户定义了一个类类型后,就可以在该类型的名下定义变量(即对象)了。类是结构体类型的扩充。结构体中引入成员函数并规定了其访问和继承原则后便成了类。

2.多态性

面向对象的程序设计语言支持多态性,把一个接口用于一类活动。即一个接口多种算法。具体实施时该选择哪一个算法是由特定的语法机制确定的。C++编译时和运行时都支持多态性。编译时的多态性体现在重载函数和重载运算符等方面。运行时的多态性体现在继承关系及虚函数等方面。

3.继承性

C++程序中,由一个类(称为基类)可以派生出新类(称为派生类)。这种派生的语法机制使得新类的出现轻松自然,使得一个复杂事物可以被顺理成章地归结为由逐层派生的对象描述。派生使得程序中定义的类呈层次结构。处于子层的对参既具有其父层对象的共性.又具有自身的特性。继承性是一个类对象获得其基类对象特性的过程。C++中严格地规定了派生类对其基类的继承原则和访问权限,使得程序中对数据和函数的访间,需在家族和朋友间严格区分。

 

3.        事件驱动的程序设计

事件驱动的程序设计实际上是面向对象程序设计的一个应用,但它目前仅适用于windows系列操作系统windows环境中的应用程序与MSDOS环境中的应用程序运行机制不同、设计程序的方式也不一样。windows程序采用事件驱动机制运行,这种事件驱动程序由事件的发生与否来控制,系统中每个对象状态副改变都是事件发生的原由或结果,设计程序时需以一种非顺序方式处理事件,与顺序的、过程驱动的传统程序设计方法迥异

事件也称消息,含义比较广泛,常见的事件有鼠标事件(如民标移动、单击、掠过窗口边界)、键盘事件(如按键的压下与拾起)等多种。应用程序运行经过一系列必要的初始化后,将进入等待状态,等待有事件发生,一旦事件出现,程序就被激活并进行相应处理。

事件驱动程序设计是围绕着消息的产生与处理进行的.消息可来自程序中的某个对象,也可由用户、wlndow s或运行着的其他应用程序产生。每当事件发生时,Windows俘获有关事件,然后将消息分别转发到相关应用程序中的有关对象,需要对消息作出反应的对象应该提供消息处理函数,通过这个消息处理函数实现对象的一种功能或行为。所以编写事件驱动程序的大部分工作是为各个对象()添加各种消息的处理函数。由于一个对象可以是消息的接收者,同时也可能是消息的发送者,所发送的消息与接收到的消息也可以是相同的消息,而有些消息的发出时间是无法预知的(比如关于键盘的消息),因此应用程序的执行顺序是无法预知的。

4.        逻辑式对象程序设计

逻辑式程序设计的概念来自逻辑式程序设计语言Prolog这一曾经在计算机领域引起震动的日本第五代计算机的基本系统语言,在这种第五代计算机中,Prolog的地位相当于当前计算机中的机器语言。

Prolog主要应用在人工智能领域,在自然语言处理、数据库查询、算法描述等方面都有应用,尤其适于作为专家系统的开发工具。

Prolog是一种陈述式语言,它不是一种严格的通用程序设计语言,使用Prolog编写程序不需要描述具体的解题过程、只需结出一些必要的事实和规则,这些规则是解决问题方法的规范说明,根据这些规则和事实.计算机利用渭词逻辑,通过演绎推理得到求解问题的执行序列。

5.        并行程序设计

一个有实际应用的并行算法,最终总要在并行机上实现,为此首先就要将并行算法转化为并行程序,此过程就是所谓的并行程序设计(Parallel Program)。它要求算法设计者、系统结构师和软件工作者广泛频繁的交互。因为设计并行程序涉及到的知识面较广,主要包括操作系统中的有关知识和优化编译方面的知识。操作系统内容非常丰富,并行程序中最基本的计算要素如任务、进程、线程等基本概念、同步机制和通信操作等。

目前并行程序设计的状况是:并行软件的发展落后于并行硬件;和串行系统与应用软件相比,现今的并行系统与应用软件甚少且不成熟;并行软件的缺乏是发展并行计算的主要障碍;不幸的是,这种状态似乎仍在继续着。究其原因是并行程序设计远比串行程序设计复杂:并行程序设计不但包含了串行程序设计,面且还包含了更多的富有挑战性的问题;串行程序设计仅有一个普遍被接受的冯·诺依曼计算模型,而并行计算模型虽有好多,但没有一个可被共同认可的像冯·诺依曼那样的优秀模型;并行程序设计对环境工具(如编译、查错等)的要求远比串行程序设计先进得多;串行程序设计比较适合于自然习惯,且人们在过去积累了大量的编程知识、经验和宝贵的软件财富。