精华内容
下载资源
问答
  • 程序设计方法和程序分析

    千次阅读 2017-08-16 13:26:50
    程序设计方法和程序分析是两个不同范围应用的技术。 程序设计方法是提高程序效率和确保程序正确性而产生的软件理论。经过战胜软件危机,丰富深刻的设计方法的出现,越来越多的应用编程,程序员和编程爱好者建立了...

    1.概述

     

    程序设计方法和程序分析是两个不同范围应用的技术。

    程序设计方法是提高程序效率和确保程序正确性而产生的软件理论。经过战胜软件危机,丰富深刻的设计方法的出现,越来越多的应用编程,程序员和编程爱好者建立了程序设计方法学。

    而程序分析是发现程序设计方法不能阻止的程序错误和程序缺陷而发展的。程序分析对已有程序的执行次数、程序路径、变量值进行分析。

     

    程序效率表示程序的性能,人们用算法复杂度表示--理论上的运行时间和运行所需存储空间,包括程序地址空间和系统栈空间。程序正确性引导程序开发过程,则形成程序的形式推导方法。正确性的程序经过正确的程序变换规则生成的程序也是正确的。程序正确性能引导程序开发过程。Floyd-Hoare规范公理用短小精悍的不等式、数学表达式和逻辑运算符表示前断言P和计算语句结果的后断言Q,控制条件B划分为{B,-B}成为条件语句P或循环语句Q的一部分。验证的形式是规则前提和结论的分式形式。

        程序效率在结构程序设计上,表现的特征是单入口和单出口的相对独立的控制语句,因此循环语句可视为单路径而if-else条件语句则是双路径;程序正确性则表现为程序具体结构和内部逻辑的良型控制结构。过程则对时间一定有要求。Unix/Linux系统的并发程序或多核多线程必须处理程序实体在执行时间上的严格性要求,所以应建立进程(线程)调度的合乎运行机制的时间序列,以防止死锁、进程实际饥饿和资源消耗。程序效率则表现在进程控制语句fork()、waitpid()、signal()、exit()、ftok()和msgget()等对进程创建和执行时间与进程间关系的精确控制和进程存储空间的管理,程序正确性则是并发程序能遵循进程(线程)调度和执行的全部正确性原则。

    程序效率在面向对象技术上,表现的特征是类、模板封装的内聚性和实现的独立性,而且实例化和类对象的存储管理也是特征。而效率的另一个特征是软件复用,类库与过程式函数库调用复用相似,STL的容器和模板的实参具有数据类型的通用方式的实例复用,类层次的继承是软件复用的进化。此外,多态是函数参数数据类型的多种形式的要求,可认为是currying技术的应用[4]。程序正确性在面向对象技术中的应用表现在四个方面:(1)设置访问控制,类、继承和友元的访问权限,(2)独立设计方法:类的接口与实现分离、虚拟函数与继承实现、模板定义与实例化、容器与元素实参数据类型(并不熟练)(3)管理存储单元:静态成员、对象、容器、多继承,防止资源重复删除和悬挂指针。(4)最后是系统自动调用的机制。系统自动调用创建、复制构造、赋值、移动、析构操作和实现默认类操作,防止对类和对象的活动期管理出现漏洞。

    Backus在1977年的图灵奖颁奖典礼上发表的演讲提出函数式FR程序设计。用无变量的原始函数的递推公式定义、函数组合和泛函型的方法编程,主要使用递推公式映射的递归方式,程序代数可实现FR推导。现代函数式程序的效率表现在用运行时系统的图规约表示高阶函数和惰性计算。程序正确性表现在可计算函数和数学泛函型的正确性上。FR函数程序设计反应了输入数据和输出数据间的关系(Relation),也可用传递函数实现,因此前后断言和谓词转换器能证明程序正确性。但是Relation不是流程,而是组成程序执行过程的操作有序组。

    Lisp和prolog是人工智能推出的逻辑式程序设计,是在解空间事实和规则的子句列表推理执行(寻找与合一)“新”事实的方法。实际上,逻辑式程序设计中的关系,并不是高阶函数或者传递函数,而是多个项间的关系或约束。

     

        编译原理使用程序分析方法,包括控制流、数据流、符号分析,目的是发现控制流走向,优化程序,产生目标代码,以及分析并行成分。

    程序设计方法和程序分析的关键技术有:(1)实例化,原因是程序分析中数据与变量的相对独立性,程序设计方法中类型与类型名的独立性,操作对象与具体数据结构实现的相对独立性。(2)映射,包括数据类型的数据实例化,C++的map类,类模板实参,多态函数在运行时绑定,甚至包括递归程序的取样规则和展开规则,而程序变换的等价模式有序对也可看作映射,尽管需要程序变换规则。(3)软件复用,库函数、封装、模板和容器、数据结构的通用算法。

    程序设计方法和程序分析关键技术见表1,分类表目包括1和2类,分别是程序设计方法和程序分析两种类型。

    表1  程序设计方法和程序分析的关键技术

     

    功能需求

    程序执行过程

    构造基础

    理论基础

    分类

    程序形式推导

    不变式,界函数,一阶谓词

     

    语句,面向目标。

    最弱前置条件

    1

    函数式程序

    无变量函数定义与组合型

    图规约

    语句,函数与泛函型

    程序变换和程序代数

    1

    程序变换

    程序形式规范

     

    一阶谓词与函数定义

    程序变换规则

    1

    ADT

    代数规范(操作)

    公理用作程序

    类(class)

    抽象代数

    1

    符号执行

     

    符号执行树

    路径约束

    程序形式推导

    2

    部分值求解

    静态精确公式,动态转换系统*

    程序例化器

    程序、输入数据,例化程序

    程序转换与程序例化。s-m-n理论

    2

    控制流图

    CFG*

     

    基本块

    编译原理

    2

    数据流图

    DFG*

     

    变量依赖

    编译原理

    2

    程序切片

    FG,PDG,SDG*

     

    语句,可达

    信息流和路径例化

    2

    Floy-Hoare

    {P}S{R}

    前后断言

    语句,上下文

    规则与证明

    1

    最弱前置条件

    wp(“S”,R)

     

    语句,谓词转换器

    谓词语义

    1

    程序测试

    路径,循环*

    测试用例

     

     

    1,2

        在表1可知,程序的功能需求表示在程序设计中,用程序形式规范,实质是一阶谓词(若不包括程序分析中的程序结构方式*),Floyd-Hore规则逻辑和wp(“S”,R)谓词转换器的实质也是一阶谓词或者功能相似的数学表达式。另一种表示形式是代数规范或者泛函数型。因此对程序功能的表示是不足的,谓词和不等式并不能刻画程序功能的实质。程序功能是表示程序对数据的操作,例如复制移动、计算、排序、路径节点的集合扩展,以及数据间的逻辑关系,例如follow集、first集、R[com]算法的计算关系、数量大小关系和路径关系,实现程序的外在功能。

    

    展开全文
  • 程序设计方法

    千次阅读 2011-11-13 00:13:12
    程序设计方法学 (2009-05-16 11:24:21) 标签: it 分类: 工作篇 用以指导程序设计各阶段工作的原理和原则,以及依此提出的设计技术。有时也指研究这些原理、原则和技术的学科。程序...
     
    

    程序设计方法学

    (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按照语言级别可以分为低级语言和高级语言。低级语言有机器语言和汇编语言。低级语言与特定的机器有关、功效高,但使用复杂、繁琐、费时、易出差错。机器语言是表示成数码形式的机器基本指令集,或者是操作码经过符号化的基本指令集。汇编语言是机器语言中地址部分符号化的结果,或进一步包括宏构造。高级语言的表示方法要比低级语言更接近于待解问题的表示方法,其特点是在一定程度上与具体机器无关,易学、易用、易维护。
      程序设计语言按照用户的要求有过程式语言和非过程式语言之分。过程式语言的主要特征是,用户可以指明一列可顺序执行的运算,以表示相应的计算过程,如FORTRANCOBOLPASCAL等。
      按照应用范围,有通用语言与专用语言之分。如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

    分类

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

    规范

      程序设计的基本概念有程序、数据、子程序、子例程、协同例程、模块以及顺序性、并发性、并行性、和分布性等。程序是程序设计中最为基本的概念,子程序和协同例程都是为了便于进行程序设计而建立的程序设计基本单位,顺序性、并发性、并行性和分布性反映程序的内在特性。程序设计规范是进行程序设计的具体规定。程序设计是软件开发工作的重要部分,而软件开发是工程性的工作,所以要有规范。语言影响程序设计的功效以及软件的可靠性、易读性和易维护性。专用程序为软件人员提供合适的环境,便于进行程序设计工作。
    展开全文
  • 程序设计方法学的角度比较 SP 方法与OOP 方法 整理自 https://wenku.baidu.com/view/e2737ac684254b35eefd3491.html 文章目录从程序设计方法学的角度比较 SP 方法与OOP 方法1. 引言2. SP方法3. OOP方法4. SP方法与...

    从程序设计方法学的角度比较 SP 方法与OOP 方法

    整理自 https://wenku.baidu.com/view/e2737ac684254b35eefd3491.html

    1. 引言

    二十世纪六十年代以来,随着硬件技术的迅猛发展和计算机应用领域的急剧扩大,不仅绝大多数计算机程序都采用高级语言编写,而且计算机的一些规模较大的应用软件也采用某些高级语言来编写,这时,由于一般要编写的程序的规模都比较大,因而对这些程序来说,运行时间和占存储空间的大小已经不是编写者要考虑的主要问题,而主要问题已逐渐转化为希望编写出的程序结构清晰、容易阅读、容易修改、容易验证,即希望得到好结构的程序。另一方面,20世纪60年代末到70年代初产生的“软件危机”也需要对程序设计方法、程序的可靠性等问题进行系统的研究。这也就是程序设计方法学产生的历史背景。

    简单地说,程序设计方法学是讲述程序的性质以及程序设计理论和方法的一门学科。在程序设计方法学中,结构程序设计占着十分重要的位置,可以说,程序设计方法学是在结构程序设计的基础上逐步发展和完善起来的。

    2. SP方法

    荷兰学者 E.W.Dijkstra 等人在研究的人的智力局限性随着程序规模的增大而表现出来的不适应之后,于 1969 年提出 结构化程序设计(Structured Programming)方法,简称 SP。这是一种复杂任务时避免混乱的技术。提出了把程序结构规范化的主张,要求对复杂问题的求解过程应按我们大脑容易理解的方式进行组织,而不是强迫我们的大脑去接受难以忍受的冲击。

    从程序设计方法学的角度对结构化程序设计方法进行定义如下:

    由基本程序的一个固定的基集合构造出的复合程序,称为结构化程序。复合程序的复合度依赖于所使用的集合,如基集合 {顺序、条件、循环} 是构成结构化程序的最小集。

    具体来说,SP 设计的思想包括以下几方面的内容:
    (1)SP 是避免用 GOTO 语句的一种程序设计。
    (2)SP 是自顶向下的程序设计。
    (3)SP 是一种组织和编程的方法,按 SP 方法编程易于理解和修改。
    (4)SP 的主要作用是使程序正确性的证明易于实现。
    (5)SP 允许在设计过程中的每一步去验证其正确性。
    (6)SP 讨论了如何将任何大规模和复杂的流程图转换为一种标准形式,能用几种标准的控制结构顺序、分支、重复|通过嵌套来表示。

    E.W.Dijkstra 提出的这套方法,使程序具有合理的结构,以保证和验证程序的正确性。按结构化程序设计方法设计出的程序优点是:结构良好、各模块间的关系清晰简单、每一模块内都由基本单元组成。同时,由于采用了“自顶向下、逐步细化”的实施方法,能有效地组织人们的智力,有利于软件的工程化开发。

    3. OOP方法

    在 SP 方法的几十年实践中,给计算机软件业带来极大的进步,部分地缓解了软件危机,使用结构化的许多中小规模软件项目都获得了极大的成功。但是从九十年代初期开始,人们发现当把结构化设计方法应用于大型软件产品的开发时,似乎很少取得成功。面向对象的软件开发方法(Object-Oriented Programming,简称 OOP)六十年代后期首次被提出,经过近 20 年这种技术才逐渐得到广泛的应用。到了九十年代前期,OOP 方法已经成为人们开发软件的首选。

    从程序设计方法学的角度来说,计算机求解的任何问题领域不外乎是由一些基本原始事物组成的,事物相互间存在着一定的联系。为了有效地反映客观世界,在计算机求解问题过程中,最好是建立相应的概念去直接表现组成问题领域的事物及这些事物间的相互联系。

    而 OOP 的基本原理是:按问题领域的基本事物实现自然分割,按人们通常的思维方式建立问题领域的模型,设计尽可能直接自然表现问题求解的软件系统。其实质是将数据结构与其相关的操作看成一个整体,用对象描述子问题,对象族(类)形成问题空间,对象间的消息传递实现对象间的联结,从而实现用户要求。

    4. SP方法与OOP方法的比较

    SP 方法由瑞士的沃斯教授最早提出,其结构为:数据结构+算法=程序。然而随着软件规模的不断增长,它的不足和缺陷也愈来愈明显。在传统的 SP 设计中,数据存储与程序代码的分离还存在着一些弊端。代码的书写是结构化的,而不是模块的。因而,数据元素可以从任何代码中被访问,这就意味着,代码可以在编程者不知道的情况下被修改。这可能会导致程序的调试成为一件非常困难的事情,而程序的维护也会成为一项重要的任务,即结构化编程中修改一行代码将会造成对整个程序理解上的极大困难。其不足还体现在,依靠开发人员控制代码和数据,将会导致 可重用性的降低。造成以上现象的原因在于,采用 SP 方法设计出的程序,结构是建立在数据结构上的,而数据结构是现实世界中对象本质关系的抽象反映。由于程序所要处理的现实世界中的对象是最容易变化的部分,而变化很难被吸收于局部或某一层,因此会涉及整个程序结构

    OOP 方法的出现为解决这些越来越明显的困难带来了曙光。在 OOP 的程序设计方法中,数据结构已不再是程序的基石。替代的是抽象数据类型、类和对象这些概念。数据和其结构不再分离,它们被封装在一起,与现实世界本来面貌更接近。对象的封装性将大量的实现细节封装于内部。其好处是使程序结构的复杂性降低了,使程序更易于修改,也更容易实现代码的重用。类有继承性和多态性两个最主要的特征。继承性是使类反映现实世界的层次结构,而多态性则反映了现实世界的复杂多样。OOP 允许开发人员通过继承来重用代码和数据。通过从以前的对象中继承,编程者可以更迅速地构造复杂的应用程序。其原因在于,编写新的代码总是会有可能带入错误,而重用已经过测试的代码可以使产生潜在错误的可能性达到最小。类的出现使程序的描述能力得到提高,使代码的真正重用成为可能。例如,软件开发过程中,用于界面设计的工作量常常达到 70% 以上。所以就有了很多用于开发界面的函数库。但问题在于用户很难对其进行修改扩充。其原因在于,修改函数库首先必须读懂其源代码。对用户而言,这通常是困难的,并且会引进错误。但如果提供的仅仅是类库,那么,只需要简单地继承一个类,然后,重新定义或增加新的函数就行了。

    OOP 的程序,最根本的目的是使程序员能够更好地理解和管理巨大而繁杂的程序,它在 SP 的基础上完成了进一步的抽象。使用 OOP 方法绝不是要摒弃现有的 SP 方法,相反,它是在充分吸取 SP 设计优点的基础上,引入了一些新的、功能更强的概念,去开创程序设计工作的新空间。OOP 设计方法把可重复性视为软件开发的核心,通过装配可重用的部件来产生软件,而不是像 SP 编程所用的那样,是通过调用函数库中的函数去实现。要注意的是,我们这些问题的阐述是基于应用程序这一个层次进行的,事实上,在 OOP 设计中,对象内部的实现,我们往往会使用过程式的 SP 设计方法,即也会调用 C/C++ 函数库中的许多有用的函数。只是从程序的总体结构上而言,它是由一系列对象构成的,并且对象之间能够依靠某种方式进行通信和协作,来实现程序的具体功能。

    SP 编程的基本思想是,把大的程序划分为许多个相对独立、功能简单的程序模块。它是以过程为中心,主要强调的是过程以及功能和模块化。任务的完成是通过一系列过程的调用和处理实现的。

    OOP 编程是以对象为中心,对一系列相关对象进行操纵,发送消息给对象,再由对象执行相应的操作并返回结果,其强调的是对象。编程者在进行 OOP 编程时,不会简单地从头到尾一行一行地写代码,而是考虑应该如何创建对象,利用对象来简化程序,使开发软件相对容易。因为 OOP 设计具有这些特点,所以大大地提高了软件的开发效率。对于那些已经习惯于 SP 的设计人员来说,会有一个转变观念的过程。程序设计方法学会关注软件生命周期的各个环节,包括需求分析、总体设计以及编码、测试和维护。在选择程序设计方法时要注意到各种设计方法中各个阶段的工具,根据编程团队的知识情况来确定采用何种设计方法。

    5. 结束语

    在程序设计方法学的发展中,SP 和 OOP 是程序设计方法中最本质的思想方法,SP 体现了抽象思维以及复杂问题求解的基本原则,OOP 则深刻反映了客观世界是由对象组成这一本质特点。种种程序设计方法的一个主要区别在于问题分解的因子不同,思维模式不同。在计算机中数据结构和过程是密切相关的,SP 方法将数据结构和过程分开考虑,OOP 的方法组合数据和过程于对象之中。从理论上而言,OO 式方法将产生更好的模块内聚性,使软件更注重于重用与维护,但其在实践中的程序设计方法需要工具和环境的支撑,还需要考虑软件生命周期的各个环节。因而在选择程序设计方法时,需要综合考虑以上这些因素。

    展开全文
  • 测验8: 程序设计方法学 (第8周)

    千次阅读 2019-11-07 11:35:20
    测验8: 程序设计方法学 (第8周) 文章目录测验8: 程序设计方法学 (第8周)单选题程序题 这是python123官网上联合MOOC的Python程序设计(第10期)答案 单选题 程序题 1.英文字符的鲁棒输入 基础题,直接判断...

    测验8: 程序设计方法学 (第8周)


    这是python123官网上联合MOOC的Python程序设计(第10期)答案

    单选题

    1
    2
    3
    4
    5
    6

    • os.path.relpath(path[, start]) 从start开始计算相对路径
    • os.path.normpath(path) 规范path字符串形式
    • os.path.abspath(path) 返回绝对路径
    • os.path.basename(path) 返回文件名
      7
      8
      9
      10

    程序题

    1.英文字符的鲁棒输入
    11
    基础题,直接判断是否为字母,然后输出就行了
    注意 python 里面没有&&、|| 符号,替代的是 and or

    s=input()
    for i in s:
        if((i>='A' and i<='Z') or (i>='a' and i<='z')):
            print(i,end='')
    

    2.数字的鲁棒输入
    12
    不能用 eval 直接读取,对于“100+20”这样的数据 eval 会直接计算而不是输入有误

    参考答案非常简洁,直接转换成复数来进行比较

    s=input()
    try:
        if(complex(s)==complex(eval(s))):
            print(eval(s)**2)
    except:
        print("输入有误")
    
    展开全文
  • 计算思维-程序设计方法论-Python笔记

    千次阅读 2017-07-03 15:28:40
    看《Python语言程序设计基础》1.5.2-理解问题的计算部分时提到了第八章-程序设计方法,于是翻过去看了看…相见恨晚呐,抽象、自顶向下(分治),这不都是程序设计的核心思想么,于是赶紧把要点记下来不得不说这是一...
  • 结构化程序设计方法

    千次阅读 2016-11-26 22:14:58
    结构化程序设计程序结构化设计强调程序设计的风格和程序结构的规范化,以及清晰的结构。这样设计便于编写、阅读、修改和维护,提高了程序编写的效率以及可维护性,保证了程序的质量。方法可以采取以下方法使得程序...
  • 一、计算思维与程序设计 1、计算思维 ①第3种人类思维特征 - 逻辑思维:推理和演绎,以数学为代表,A->B B->C A->C - 实证思维:实验和验证,以物理为代表,引力波<-实验 - 计算思维:设计和构造,...
  • 面向对象的程序设计方法

    千次阅读 2018-09-30 20:33:42
    面向对象方法学方程式=对象+类+继承+传递消息实现通讯 (一) 类、对象、封装、消息、继承、多态等基本概念 1、类:对具有相同状态和形同操作的一组相似对象的定义; 2、对象:对具有相同状态的一组操作的集合,...
  • 面向功能的程序设计方法、结构化程序设计方法、面向数据流的处理方式与结构化分析(Structrued Analysis,即SA)、结构化编程(Structrued Program,即SP)、结构化设计 (Structrued Design,即SD) VS 面向对象...
  • 它的主要观点是采用自顶向下、逐步求精的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块...
  • 第四讲:面向对象程序设计方法及类、对象的概念  掌握:面向对象程序设计的方法及特点;类的声明的对象的定义理解:对象的封装、抽象、继承与多态性四个特快性的概念;类和对象的作用;面向对象和面向过程的程序...
  • 汇编语言中常见的形式有:顺序程序设计,分支程序设计,循环程序设计以及子程序设计 1.今天通过实例来详细说明分支程序设计,和循环程序设计 分支程序设计实例 给定一下符号函数: 给定X值,假设为-25,且存放...
  • 测验8: 程序设计方法学 (第8周)(编程题)

    万次阅读 多人点赞 2019-06-06 16:10:20
    获得用户的任何可能输入,将其中的英文字符进行打印输出,程序不出现错误。 alpha = [] for i in range(26): alpha.append(chr(ord('a') + i)) alpha.append(chr(ord('A') + i)) s = input() for c in s: if c in...
  • 结构化程序设计支持“自顶向下, 逐步求精”的程序设计方法。 “自顶向下” 是将复杂、大的问题划分为小问题,找出问题的关键、重点所在,然后用精确的思维定性、定量地去描述问题。 “逐步求精” 是将...
  • 1 自顶向下设计主要由下列哪个语法元素实现?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬...函数是自顶向下设计的关键元素,通过定义函数及其参数逐层开展程序设计。 2 关于计算思维,以下选项描述正...
  • 五种程序设计方法

    千次阅读 2011-09-04 00:59:28
    1. 结构化程序设计 为了提高程序的可读性、可重用性等,逐渐出现了将程序开发中经常用到的相同的功能,比如数学函数运算、字符串操作等,独立出来编写成函数,然后按照相互关系或应用领域汇集在相同的文件...
  • 模块化程序设计方法与函数

    千次阅读 2014-09-23 22:03:02
    在C语言的程序设计时,通常将一个大的程序功能分成若干个较小的模块,每个模块编写成结构
  • 程序设计方法(结构化程序设计,面向过程程序设计,面向对象程序设计,模块化程序设计,分布式程序设计,多层程序设计,XP极限程序设计)是编程的指导思想,决定了我们用什么样的方式组织编写程序,一个程序的成功...
  • # 英文字符的鲁棒输入 chars = set() # 生成26个字母的大小写,并存为集合 for i in range(26): chars.add(chr(ord('a') + i)) chars.add(chr(ord('A') + i)) s = input() for i in s: if i in chars: ...
  • 程序设计初学者常常受困于不会想问题:“不知道让计算机解决这个问题该如何做”。其实,程序员的一个基本功是,能够将复杂的问题分解开来。学会分解任务,因超级大分为大的、中的、小的、超小的,直到能用很直接的...
  • C语言程序设计第五版 谭浩强 第五版课后答案

    万次阅读 多人点赞 2019-06-16 00:27:29
    谭浩强 C语言程序设计第五版 第4章课后答案 3.求两个正整数m和n,求其最大公约数和最小公倍数。 #include<stdio.h> void main() { int m, n, t, i, a = 1; scanf("%d%d", &m, &n); if (m < n) ...
  • 程序设计的基本方法

    万次阅读 2018-09-21 10:15:23
    我们写的程序都是有逻辑顺序的,即是有流程的,流程图的作用则是对这种逻辑顺序的一种描述,是对解决问题的方法、思路或者算法的图形化的展示。   流程图采用的符号     Axure里的流程图形状组件面板  ....
  • 中断服务程序设计实验

    千次阅读 2014-04-27 19:54:28
    中断服务程序设计实验 2.7.1 实验目的 1、 熟悉中断的概念、中断响应过程、中断向量表以及系统是如何根据中断类型号在中断...2、 复习中断服务程序设计方法。 3、 读懂“2.7.4 实验内容”中给出的源程序,以便
  • 注明:本系列课程专为全国计算机等级考试二级 Python 语言程序设计考试服务 目录 考纲考点 1、Python语言的特点 2、程序设计语言 2.1、程序设计语言概述 2.2、编译和解释 2.3、计算机编程 3、Python语言概述...
  • 中断程序设计

    千次阅读 2014-11-30 16:15:35
    1.掌握中断概念,掌握中断程序设计方法 2.掌握中断程序调试方法 实验步骤: 1.编辑 利用编辑器(记事本,也可采用其它编辑器)建立一个名为ASM3.ASM的文本文件,内容如下: ASSUME DS:seg1,CS:seg2   seg1 ...
  • 程序设计之单例模式 VS 静态方法

    万次阅读 多人点赞 2013-09-24 11:57:48
    我们在设计程序经常会有这种需求 , 某个类里的方法能够全局访问. 在这种情况下有两种实现方案 : 1>单例模式(Singleton); 2>静态方法. 但是, 对于这两种实现方式 , 那种更好呢? 在国内论坛上看了一下其他的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,877,737
精华内容 751,094
关键字:

程序设计方法