设计思想变迁

  • 格式:docx
  • 大小:21.23 KB
  • 文档页数:5

摘 要 计算机程序设计方法的发展分三个阶段, 即:面向计算机的程序设计、面向过程的程序设计的面向对象的程序设计。并对程序设计方法进一步发展展开讨论。

关键词 程序设计 方法 面向对象 面向过程

自从1946 年世界第一台电子计算机诞生以来, 计算机科学得到了迅猛的发展, 计算机的应用已经渗透到社会的各个领域。计算机之所以能有如此强大的功能, 除了计算机硬件系统的功能的日益强大之外, 另一个很重要的原因就是计算机的软件系统的高速发展。软件系统发展的关键在于程序设计思想的不断发展。本文针对这个问题就程序设计方法发展的三个阶段,即:面向计算机的程序设计、面向过程的程序设计和面向对象的程序设计展开讨论。

一、面向计算机的程序设计

计算机系统包括硬件系统和软件系统。硬件是由运算器、控制器、存储器、输入设备和输出设备组成, 其中运算器和控制器合称中央处理器, 它是计算机的核心, 由大规模数字集成电路组成。软件包括了使计算机运行所需的各种程序及有关的文档资料。计算机的工作是由程序来控制的, 程序是指令的集合。软件工程师将解决问题的方法、步骤编成为由一条条指令组成的程序, 输入到计算机中, 计算机执行这一指令序列, 便可完成预定的任务。

所谓指令, 就是计算机可识别的命令。计算机的指令相当于人工与计算机之间交流的语言。由于计算机的中央处理器是由数字电路组成, 因此它只能识别简单“0”和“1”组合的二进制指令。

人类最早的编程语言是由计算机可以直接识别的二进制指令组成的机器语言。显然机器语言便于计算机识别, 但对人类来说却是晦涩难懂。这一阶段, 在人类的自然语言与计算机编程语言之间存在着巨大的鸿沟, 这一时期的程序设计属于面向计算机的程序设计, 设计人员关注的重心是使程序尽可能地被计算机接受并按指令正确地执行, 至于计算机的程序能否让人理解并不重要。软件开发的人员只能是少数的软件工程师, 因此软件开发的难度大, 周期长, 而且开发出的软件功能也很简单, 界面也不友好, 计算机的应用仅限于科学计算。

随后出现了汇编语言, 它将机器指令映射为一些能读懂的助记符。如ADD 、SUB 等。此时的汇编语言与人类的自然语言之间的鸿沟略有缩小, 但仍与人类的思想相差甚远。因为它的抽象层次太低, 程序员需要考虑大量的机器细节。此时的程序设计仍很注重计算机的硬件系统, 它仍属于面向计算机的程序设计。面向计算机的程序设计的基本思想可归纳为:注重机器、逐一执行。

二、面向过程的程序设计

随着计算机应用范围的扩大, 人们感觉到机器语言和汇编语言的不足, 机器语言太注重计算机的硬件,而汇编语言也不太适合人类的思维习惯。这时设计了更接近人类思维习惯的高级语言。它撇开了计算机的硬件的细节, 提高了语言的抽象层次, 程序中可采用具有一定含义的数据命名和容易理解的执行语句。这使得在写程序时可以联系到程序所描述的具体事物。60 年代末开始出现的结构化程序设计的思想便是面向过程的程序设计思想的集中表现。

结构化程序设计的思想是:自顶向下、逐步求精。其程序结构是按功能划分为若干个基本模块(基本程序), 这些模块形成一个树状结构, 各模块之间的关系尽可能简单, 在功能上相对独立:每一个模块内部均是由顺序、条件、循环三种基本结构组成, 其模块化实现的具体方法是使用子程序。结构化程序设计由于采用了模块分化与功能分解, 自顶向下、分而治之的方法。因而可将一个较复杂的问题分解为若干个子问题, 各子问题分别由不同的人员解决, 从而提高了速度, 并且便于程序的调试, 有利于软件的开发和维护。

结构化程序设计思想的核心是功能的分解。当程序员用C 或Pascal 语言来设计程序解决一个实际问题时, 首先要做的工作就是将一个问题按功能的不同分解成若干个模块, 然后根据模块的功能来设计一系列用于存储数据的数据结构, 最后编写一些过程(或函数)对这些数据进行操作。最终的程序就是由这些数据和操作构成的。显然, 这种方法将数据结构和操作过程作为两个独立的实体来对待, 设计人员编程之前首先考虑如何将功能分解, 在每个过程中又要着重安排程序的操作序列, 并且程序员在编程的同时又必须时时考虑数据结构,

因为毕竟要将操作作用在数据上。不仅如此, 程序员在编程过程中, 不能保证数据结构始终没有变化, 而一旦数据结构发生变化, 作用在数据上的操作必然会相应地发生变化, 这样给软件开发人员造成了沉重的负担。

客观世界中的问题是错综复杂和不断变化的, 软件开发人员开发的软件往往不是一成不变的。随着社会的发展, 用户对软件提出了更多的要求, 因此软件的更新日益加快。而面向过程的程序设计中由于数据与操作的分离, 使程序的可重用性差, 维护代价高, 不便于程序的更新换代。为了克服这一缺点, 人们提出了面向对象的程序设计思想。

三、面向对象的程序设计

面向对象的程序设计思想是:注重对象、抽象成类。在程序系统中, 将客观世界中的事物看成对象, 对象是由数据及对数据的操作构成的一个不可分离的整体。对同类型的对象抽象出其共性, 形成类。类中大多数数据, 只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系, 对象与对象之间通过消息进行联系。

1、对象

是系统中描述客观事物的实体, 它是由描述其属性结构的数据和定义在数据上的一组操作系统组成的实体。它是数据结构和操作序列的组合体(其中数据描述对象的静态特征, 操作描述对象的动态特征)。它是构成系统的一个基本单位。

2、类

是一组对象的抽象, 是具有相同的属性结构和操作行为的一组对象的集合。类与对象的关系犹如模具与铸件之间的关系, 类是用来创建对象实例的样板,

它包含所创建对象的属性特性和操作行为的定义。类是一个型, 而对象是这个型的一个实例。

3、封装

是面向对象程序设计的一个重要的特性, 它是指对象在把数据与操作结合为一个整体时, 其数据的表示方式及对数据的操作细节是尽可能地被隐藏的。用户只是通过操作接口对数据进行操作, 至于其内部细节则一无所知, 这样既能与外部发生联系, 又保证了数据的安全性。

4、继承

是面向对象程序设计的又一个重要的特性, 它是指特殊类的对象拥有其一般类的全部属性结构的操作行为。如果B 类继承了A 类, 就称A 类为父类,B

类为子类。在一般情况下, 要定义一个新类, 只需继承一个父类, 再描述一下它与父类的不同之处就行了。这样就大大地减少了设计人员的重复操作, 极大地提高了编程效率。

5、多态性

也是面向对象程序设计的一个重要特性, 它是指在一般类中定义的属性或行为, 被特殊类继承之后, 可以具有不同的数据类型或不同的行为。这使得同一个属性或行为在一般类及各特殊类中具有不同的语义。面向对象的程序设计的结构特点:其一是定义类或继承父类。其二是定义各对象并规定它们之间传递消息的规律;其三是程序中的一切操作都是通过对象发送消息实现。

面向对象的程序设计由于数据与操作封装在对象这个统一体中, 使编程人员在编程过程中能够将数据与操作联系在一起, 便于程序的修改和调试。并且由于类的继承性使得编程人员可以在可视化的环境中进行组件化的编程。从而使设计人员能够从单调、重复的编程过程中解放出来, 去进行创造性的总体设计工作。

使用面向对象的程序设计方法绝非是要摒弃现有的结构化程序设计方法,相反,它是在充分吸收结构化程序设计优点的基础上,引进了一些新的、强有力的概念,从而开创了程序设计工作的新天地。面向对象的程序设计方法把可重复使用性视为软件开发的中心问题,通过装配可重用的部件来生产软件,而不是像目前编程所用的那样,通过调用函数库中的函数来实现。这里要注意,我们是基于应用程序这一个层次来阐述这些问题的,事实上,在对象内部的实现上,我们常常使用过程式的结构化程序设计方法,也常常调用C / C + + 函数库中的很多有用的函数,然而从程序的总体结构上说,它是由一系列对象构成的,对象之间能够以某种方式进行通信和协作,从而实现程序的具体功能。

结构化编程的基本思想就是把大的程序划分为若干个相对独立、功能简单的程序模块。它以过程为中心,强调的是过程,强调功能和模块化。通过一系列过程的调用和处理完成相应的任务。

面向对象编程以对象为中心,是对一系列相关对象的操纵,发送消息给对象,由对象执行相应的操作并返回结果,强调的是对象。

程序设计人员在进行面向对象编程时,不再单纯地从头到尾一行一行地编写代码(但不意味着不写代码),而是考虑如何创建对象,利用对象来简化设计,使开发软件相对容易。由于面向对象程序设计具有诸多特点,能大大提高软件的开发效率。对于已经习惯于面向过程的设计人员来说,有一个转变观念和思维方法的过程。

程序设计方法关注软件生命周期的各个环节,从需求分析、总体设计到编码、测试和维护。在选择设计方法时还要注意到该设计方法各个阶段的工具,根据开发团队的知识情况来决定采用何种设计方法。

四、总结

程序设计方法的发展过程中,结构化和面向对象是软件工程的程序设计方法中最本质的思想方法,结构化体现了抽象思维和复杂问题求解的基本原则,面向对象则深刻反映了客观世界由对象组成这一本质特点。各种程序设计方法的一个重要区别在于问题分解的出发点不同(因子),思维模式不同。计算机中数据结构和过程是密切相关的,结构化方法将数据结构和过程分开考虑,面向对象的方法组合数据和过程于对象之中。理论上,对象式实际方法将产生更好的模块内聚和耦合特性,使得软件更易于重用与维护,但在实践中程序设计方法需要工具和环境的支撑,需要考虑软件生命周期的各个环节,在选择程序设计方法时,需要综合考虑这些因素。不要孤立地看待各种程序设计方法, 认为各种方法互不相干, 每种设计方法都有自己的使用范围,应根据软件的规模, 软件的应用环境采用具体的程序设计方法。