程序设计方法学是讲述程序的性质以及程序设计理论和方法的一门学科,它主要有结构化程序设计(Structured Programming,SP)方法和面向对象的软件开发(Object-Oriented Programming,OOP)方法。在程序设计方法学中,SP方法占着十分重要的位置。可以说,程序设计方法学是在SP方法的基础上逐步发展和完善起来的。
荷兰学者沃思(E.W.Dijkstra)等人在研究人的智力局限性随着程序规模增大而表现出来的不适应之后,于1969年提出SP方法。这是一种处理复杂任务时避免混乱的技术。他们提出了把程序结构规范化的主张,要求对复杂问题的求解过程应按人类大脑容易理解的方式进行组织,而不是强迫人类的大脑去接受难以忍受的冲击。沃思对结构化程序设计的描述,提出一个公式:程序=数据结构+算法。数据结构就是描述数据的类型和组织形式;算法是描述对数据的操作步骤。
SP编程基本思想是,把大的程序划分为许多个相对独立、功能简单的程序模块。它是以过程为中心,主要强调的是过程以及功能和模块化。任务的完成是通过一系列过程的调用和处理实现的。
在程序设计方法学的发展中,SP和OOP是程序设计方法中最本质的思想方法,SP体现了抽象思维以及复杂问题求解的基本原则,OOP则深刻反映了客观世界是由对象组成这一本质特点。各种程序设计方法之间的一个主要区别在于问题分解的因子不同,思维模式不同。在计算机中数据结构和过程是密切相关的,SP方法将数据结构和过程分开考虑,OOP方法组合数据和过程于对象之中。从理论上而言,OOP方法将产生更好的模块内聚性,使软件更注重于重用与维护;但其在实践中的程序设计方法需要工具和环境的支撑,还需要考虑软件生命周期的各个环节。因而在选择程序设计方法时,需要综合考虑以上这些因素。
数据结构主要学习用计算机实现数据组织和数据处理的方法;随着计算机应用领域的不断扩大,无论是设计系统软件还是设计应用软件都会用到各种复杂的数据结构。一个好的程序无非是选择一个合理的数据结构和好的算法,而好的算法选择很大程度上取决于描述实际问题所采用的数据结构,所以想编写出好的程序必须扎实地掌握数据结构。
数据是人们利用文字符号、数据符号和其他规定的符号对现实世界的事物及活动所做的抽象描述。从计算机的角度看,数据是所有能被输入计算机中,并能被计算机处理的符号的集合。数据元素是数据集合中的一个“个体”,是数据的基本单位。而数据结构是指数据以及相互之间的联系,可以看作是相互之间存在某种特定关系的数据元素的集合,因此可以把数据结构看成是带结构的数据元素的集合。数据结构包括以下几个方面。
(1)数据的逻辑结构
数据的逻辑结构是指数据元素之间的逻辑关系。比如一个表中的记录顺序反映了数据元素之间的逻辑关系,一个数组中元素的排列顺序也是数据元素之间的逻辑关系。
(2)数据的存储结构(物理结构)
数据的存储结构是指数据元素及其逻辑关系在计算机存储器中的存储方式,一般只在高级语言的层次上来讨论存储结构。不同的逻辑结构有不同的存储结构。
(3)数据的运算
数据的运算是指施加在该数据上的操作,它是定义在数据的逻辑结构之上的,每种逻辑结构都有一组相应的运算。例如最常用的增/删/改/查、更新、排序等。数据的运算最终需在对应的存储结构中用算法实现。
一组数据中数据元素及其顺序是一定的,但是可以用不同的逻辑结构表示,这样就有着不同的存储结构,对应着不同的运算算法。
数据结构和算法的关系:数据结构是算法实现的基础,算法总是要依赖某种数据结构来实现的,算法的操作对象是数据结构。数据结构关注的是数据的逻辑结构、存储结构,而算法更多的是关注如何在数据结构的基础上解决实际问题。算法是编程思想,数据结构则是这些思想的基础。