XBOX

  PHP博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  13 随笔 :: 87 文章 :: 0 评论 :: 0 Trackbacks
1.引言

  当今社会是信息社会,信息社会的灵魂是作为“信息处理机”的电子计算机,从1946年第一台计算机ENIAC问世到今天的“深蓝”,电子计算机的硬件得到突飞猛进的发展,程序设计的方法也随之不断的进步。20世纪70年代以前,程序设计方法主要采用流程图,结构化设计(Structure Programming,SP)思想也趋成熟,整个20世纪80年代SP是主要的程序设计方法。然而,随着信息系统的加速发展,应用程序日趋复杂化和大型化。传统的软件开发技术难以满足发展的新要求。20世纪80年代后,面向对象的程序设计(Object Orient Programming,OOP)技术日趋成熟并逐渐地为计算机界所理解和接受。面向对象的程序设计方法和技术是目前软件研究和应用开发中最活跃的一个领域。

  如果把过去十年称为“OO时代”,相信不会引起太多的异议。面向对象技术会如此受到广泛的重视,主要是面向对象的思想接近于客观世界的实际和符合人们通常的思维方式从而易于为人们所接受。 到目前为止,OO技术得到了最广泛的应用,并且也被证明不是软件开发的“银弹”。从Robert Martin到Bertrand Meyer,研究者们把OO的能力和局限摸了个一清二楚。同时,人们也在传统的OO三要素(封装性,继承性,多态性)的基层上发展了更多的新技术,借以弥补OO的缺陷,使OO方法和技术能够更好地解决软件开发中的问题。

  OO技术的一大局限性就是:它对软件职责的划分是“垂直”的。在一个标准的对象继承体系中,每一继承类主要是负责软件系统中一个特定部分的功能,对象的行为是在编译期间被决定的。OO技术的另一大问题是接口问题。在传统的OO环境下,对象开发者没有任何办法确保使用者按照自己的要求来使用接口。由于OO技术的这些缺点,按照事物发展的规律,必然促使新的程序设计方法出现来解决这些问题,这就是即将到来的后OO时代。

  2.结构化程序设计

  早期的计算机存储器容量非常小,人们设计程序时首先考虑的问题是如何减少存储器开销,硬件的限制不容许人们考虑如何组织数据与逻辑,程序本身短小,逻辑简单,也无需人们考虑程序设计方法问题。与其说程序设计是一项工作,倒不如说它是程序员的个人技艺。但是,随着大容量存储器的出现及计算机技术的广泛应用,程序编写越来越困难,程序的大小以算术基数递增,而程序的逻辑控制难度则以几何基数递增,人们不得不考虑程序设计的方法。

  最早提出的方法是结构化程序设计方法,其核心是模块化。1968年Dijskstra在计算机通讯上发表文章[1],注意到了“结构化程序设计”,之后,Wulf主张“可以没有GOTO语句”[2]。至1975年起,许多学者研究了“把非结构化程序转化为结构化程序的方法”,“非结构的种类及其转化”,“结构化与非结构化的概念”,“流程图的分解理论”等问题。结构化程序设计逐步形成既有理论指导又有切实可行方法的一门独立学科。

  SP方法主张使用顺序、选择、循环三种基本结构来嵌套连结成具有复杂层次的“结构化程序”,严格控制GOTO语句的使用。用这样的方法编出的程序在结构上具有以下效果:

  (1) 以控制结构为单位,只有一个入口,一个出口,所以能独立地理解这一部分。

  (2) 能够以控制结构为单位,从上到下顺序地阅读程序文本。

  (3) 由于程序的静态描述与执行时的控制流程容易对应,所以能够方便正确地理解程序的动作。

  SP的要点是:“自顶而下,逐步求精”的设计思想,“独立功能,单出、入口”的模块仅用3种(顺序、分支、循环)基本控制结构的编码原则[3]。自顶而下的出发点是从问题的总体目标开始,抽象低层的细节,先专心构造高层的结构,然后再一层一层地分解和细化。这使设计者能把握主题,高屋建瓴,避免一开始就陷入复杂的细节中,使复杂的设计过程变得简单明了,过程的结果也容易做到正确可靠。独立功能,单出、入口的模块结构减少了模块的相互联系使模块可作为插件或积木使用,降低程序的复杂性,提高可靠性。程序编写时,所有模块的功能通过相应的子程序(函数或过程)的代码来实现。程序的主体是子程序层次库,它与功能模块的抽象层次相对应,编码原则使得程序流程简洁、清晰,增强可读性。

  在SP中,划分模块不能随心所欲地把整个程序简单地分解成一个个程序段,而必须按照一定的方法进行。模块的根本特征是“相对独立,功能单一”。换言之,一个好的模块必须具有高度的独立性和相对较强的功能。模块的好坏,通常用“耦合度”和“内聚度”两个指标从不同侧面而加以度量。所谓耦合度,是指模块之间相互依赖性大小的度量,耦合度越小,模块的相对独立性越大。所谓内聚度,是指模块内各成份之间相互依赖性大小的度量,内聚度越大,模块各成份之间联系越紧密,其功能越强。因此在模块划分应当做到“耦合度尽量小,内聚度尽量大”。

  结构化程序相比于非结构化程序有较好的可靠、易验证性和可修改性;结构化设计方法的设计思想清晰,符合人们处理问题的习惯,易学易用,模块层次分明,便于分工开发和调试,程序可读性强。其设计语言以Ada语言为代表。

posted on 2009-02-16 14:34 XBOX 阅读(146) 评论(0)  编辑 收藏 引用 网摘 所属分类: 数据结构与算法

只有注册用户登录后才能发表评论。
网站导航: