程序设计方法学

 

程序设计方法学

(2009-05-16 11:24:21)
标签:

it

分类: 工作篇

用以指导程序设计各阶段工作的原理和原则,以及依此提出的设计技术。有时也指研究这些原理、原则和技术的学科。程序设计方法学的目标是能设计出可靠、易读而且代价合理的程序。程序设计方法学包括程序理论、研制技术、支援环境、工程规范和自动程序设计等课题,使程序设计更加科学化和工程化。其基本内容是:结构程序设计;程序理论在程序设计技术中的应用,以及规格说明和变换技术。程序理论与程序设计方法学的发展密切相关,它丰富了程序人员的思维方法,促进了程序设计技术的发展。程序设计方法学也与软件工程关系密切。方法学对软件的研制和维护起指导作用。软件工程要求程序设计规范化,建立新的原则和技术。而一种新的方法的出现,又要求制订出相应的规范。方法和工具是同一问题的两个侧面。工具的研究以方法学为基础,而工具的研制成功又会影响程序设计。程序设计方法学还涉及程序推导、程序综合、程序设计自动化研究、并发程序设计、分布式程序设计、函数式程序设计、语义学、程序逻辑、形式化规格说明和公理化系统等课题。

 

程序设计方法学是讨论程序的性质以及程序设计的理论和方法的一门学科, 是研究和构造程序的过程的学问,是研究关于问题的分析,环境的模拟,概念的获取,需求定义的描述,以及把这种描述变换细化和编码成机器可以接受的表示的一般的方法。

程序设计方法学发展历史

产生背景
1950年代—1960年代初,手工艺式的程序设计方法,高德纳把程序称为艺术品。
1960年代末—1970年代初,出现软件危机:一方面需要大量的软件系统,如操作系统、数据库管理系统;另一方面,软件研制周期长,可靠性差,维护困难。编程的重点:希望编写出的程序结构清晰、易阅读、易修改、易验证,即得到好结构的程序。
1968年,北大西洋公约组织(NATO)在西德召开了第一次软件工程会议,分析了危机的局面,研究了问题的根源,第一次提出了用工程学的办法解决软件研制和生产的问题,本次会议可以算做是软件发展史上的一个重要的里程碑。
1969年,国际信息处理协会(IFIP)成立了“程序设计方法学工作组”,专门研究程序设计方法学,程序设计从手工艺式向工程化的方法迈进。

结构化程序设计的研究
1968 年,结构化程序设计方法的研究。Dijkstra 提出了“GOTO是有害的”,希望通过程序的静态结构的良好性保证程序的动态运行的正确性。
1969 年,Wirth 提出采用“ 自顶向下逐步求精、分而治之” 的原则进行大型程序的设计。其基本思想是:从欲求解的原问题出发,运用科学抽象的方法,把它分解成若干相对独立的小问题,依次细化,直至各个小问题获得解决为止。

“ 程序正确性证明” 的研究
1967年,Floyd 提出用“ 断言法” 证明框图程序的正确性。
1969年,Hoare 在Floyd 的基础上,定义了一个小语言和一个逻辑系统。此逻辑系统含有程序公理和推导规则,目的在于证明程序的部分正确性,这就是著名的Hoare逻辑。他的工作为公理学语义的研究奠定了基础。
1973年,Hoare和Wirth把PASCAL语言的大部分公理化。
1975年,一个基于公理和推导规则的自动验证系统首次出现。
1979年,出现了用公理化思想定义的程序设计语言Euclid。
1976年,Dijkstra提出了最弱前置谓词和谓词转换器的概念,用于进行程序的正确性证明和程序的形式化推导。
1980年,D.Gries综合了以谓词演算为基础的证明系统,称之为“程序设计科学”。首次把程序设计从经验、技术升华为科学。
1974年,人们利用模态逻辑验证并行程序的正确性。
关于程序正确性证明的争论:
怀疑和反对派,理由:首先,形式证明太复杂,谁能够保证证明本身没有错误呢!其次,程序写好后再证明其正确性,相当于“ 马后炮” ,即错误已经铸成,证明何能补救?
折中的方案:编写程序,边考虑证明。即程序设计与正确性证明同时并行考虑。

构造正确的程序
利用Dijkstra 的谓词转换器及其演算规则集合,可以推导出正确的程序。

利用程序变化构造正确的程序。它对程序应用一连串的保护正确性的变换规则,最终得到可执行的程序。程序变换是1970年代以来,“程序设计方法学” 研究的重要方面,是程序设计自动化很有希望的途径之一。递归程序变换是这一时期的最有意义的成果。 如Burstall 和Darlington 的递归程序变换系统等。

逻辑程序设计和函数程序设计代表一种新的研究方向。Prolog是以谓词逻辑的子集(Hoare 子句)为基础的一种形式系统。Prolog 的执行过程就是执行逻辑上消解算法的过程。


抽象数据类型的研究
抽象数据类型是程序设计方法学中一种极为重要的方法。人们把它誉为程序设计方法学发展史上的一个重要的里程碑。


研究的内容
结构化程序设计
数据抽象与模块化程序设计
程序正确性证明
程序变换
程序的形式说明与推导
程序综合与分析技术
面向对象的程序设计方法
大型程序的开发

与软件工程的关系

研究方法的不同
软件工程主要应用工程的方法和技术研究软件开发与维护的方法、工具和管理的一门计算机科学与工程学交叉的学科程序设计方法学主要运用数学方法研究程序的性质以及程序设计的理论和方法的学科;


研究的对象不同
软件工程的研究对象是软件系统。目标是降低软件的开发成本,提高软件的质量,提高软件的可维护性,提高软件开发的效率。着重于软件的宏观可用性。程序设计方法学研究对象是程序。目标是保证程序的正确性。着重于程序的微观正确性。软件工程与程序设计方法学的界限变得越来越模糊程序设计方法学是软件工程的基础。

 

 

 

 

 

程序设计

程序设计(Programming)是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。专业的程序设计人员常被称为程序员。

   程序 设计=数据结构+算法
  程序设计(Programming)是指设计、编制、调试程序的方法和过程。它是目标明确的智力活动。由于程序是 软件 的本体,软件的质量主要通▎Д过程序的质量来体现,在软件研究中,程序设计的工作非常重要,内容涉及到有关的基本概念、工具、方法以及方法学等。程序设计通常分为问题建摸,算法设计,编写 代码 ,编译调试和整理并写出文档资料五个阶段。
  按照结构性质,有 结构化程序设计 与非结构化程序设计之分。前者是指具有结构性的程序设计方法与过程。它具有由基本结构构成复杂结构的层次性,后者反之。按照用户的要求,有过程式程序设计与非过程式程序设计之分。前者是指使用过程式 程序设计语言 的程序设计,后者指非过程式程序设计语言的程序设计。按照程序设计的成分性质,有顺序程序设计、并发程序设计、 并行程序设计 、分布式程序设计之分。按照 程序设计风格 ,有逻辑式程序设计、 函数式程序设计 、对象式程序设计之分。
  程序设计的基本概念有程序、数据、子程序、子例程、协同例程、模块以及顺序性、并发性、并行性、和分布性等。程序是程序设计中最为基本的概念,子程序和协同例程都是为了便于进行程序设计而建立的程序设计基本单位,顺序性、并发性、并行性和分布性反映程序的内在 特性
  程序设计规范是进行程序设计的具体规定。程序设计是软件开发工作的重要部分,而软件开发是工程性的工作,所以要有规范。语言影响程序设计的功效以及软件的可靠性、易读性和易维护性。专用程序为软件人员提供合适的环境,便于进行程序设计工作。

语言  (Programming Language)

  是用于编写 计算机程序 的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言包含三个方面,即语法、语义和语用。语法表示程序的结构或形式,亦即表示构成程序的各个记号之间的组合规则,但不涉及这些记号的特定含义,也不涉及使用者。语义表示程序的含义,亦即表示按照各种方法所表示的各个记号的特定含义,但也不涉及使用着,语用表示程序与使用的关系。

语言的分类

  程序设计语言的基本成分有:①数据成分,用于描述程序所涉及的数据;②运算成分,用以描述程序中所包含的运算;③控制成分,用以描述程序中所包含的控制;④传输成分,用以表达程序 中数据 的传输。
  程序设计语言程序设计 程序设计语言计算机 IT按照语言级别可以分为低级语言和 高级语言 。低级语言有 机器语言 和汇编语言。低级语言与特定的 机器 有关、功效高,但使用复杂、繁琐、费时、易出差错。机器语言是表示成数码形式的机器基本 指令集 ,或者是操作码经过 符号化 的基本指令集。汇编语言是机器语言中地址部分符号化的结果,或进一步包括宏构造。高级语言的表示方法要比低级语言更接近于待解问题的表示方法,其特点是在一定程度上与具体机器无关,易学、易用、易维护。
  程序设计语言按照用户的要求有过程式语言和非过程式语言之分。过程式语言的主要特征是,用户可以指明一列可顺序执行的运算,以表示相应的计算过程,如 FORTRAN COBOL PASCAL 等。
  按照应用范围,有 通用语言 与专用语言之分。如FORTRAN、COLBAL、PASCAL、 C语言 等都是通用语言。目标单一的语言称为专用语言,如APT等。
  按照使用方式,有交互式语言和非交互式语言之分。具有反映 人机交互 作用的语言成分的语言成为交互式语言,如 BASIC 等。不反映人机交互作用的语言称为非交互式语言,如FORTRAN、COBOL、ALGOL69、PASCAL、C语言等都是非交互式语言。
  按照成分性质,有顺序语言、并发语言和分布语言之分。只含顺序成分的语言称为顺序语言,如FORTRAN、C语言等。含有并发成分的语言称为并发语言,如PASCAL、Modula和 Ada 等。
  程序设计语言是软件的重要方面,其发展趋势是模块化、简明化、形式化、并行化和可视化。

常见的程序设计语言

  1、 ActionScript
   APL
   A+
   J语言
  Ada
   汇编语言
   AWK
  Basic
  Fortran
   VBScript
   Brainfuck
  C语言
   C++
   C#
   Clipper
  COBOL
   dBase
  PASCAL
   Delphi
   Forth
   FoxPro
   F#
   Fava
   IDL
   Java
   JavaScript
   J#
   LISP
   Lua
   LOGO
  Modula
   Nuva
   Perl
   PHP
   PL/I
   Prolog
   Python
   R语言
   Ruby
   Scheme
   Smalltalk
  IceMaker
   SQL
  Tcl/Tk
   Visual Basic
   Visual FoxPro
   XML

分类

  按照结构性质,有结构化程序设计与非结构化程序设计之分。前者是指具有结构性的程序设计方法与过程。它具有由基本结构构成复杂结构的层次性,后者反之。按照用户的要求,有过程式程序设计与非过程式程序设计之分。前者是指使用过程式程序设计语言的程序设计,后者指非过程式程序设计语言的程序设计。按照程序设计的成分性质,有顺序程序设计、 并发程序设计 、并行程序设计、 分布式程序设计 之分。按照程序设计风格,有 逻辑式 程序设计、函数式程序设计、 对象 式程序设计之分。

规范

  程序设计的基本概念有程序、数据、子程序、子例程、协同例程、模块以及顺序性、并发性、并行性、和分布性等。程序是程序设计中最为基本的概念,子程序和协同例程都是为了便于进行程序设计而建立的程序设计基本单位,顺序性、并发性、并行性和分布性反映程序的内在特性。程序设计规范是进行程序设计的具体规定。程序设计是 软件开发 工作的重要部分,而软件开发是工程性的工作,所以要有规范。语言影响程序设计的功效以及软件的可靠性、易读性和易维护性。专用程序为软件人员提供合适的环境,便于进行程序设计工作。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值