非结构化编程

  • 所有程序代码都是在一个连续的主程序中编写的。
  • 一行包含一个语句,用数字标签表示行号,以允许程序执行从一行跳到另一行(使用GOTO)
  • 非结构化编程介绍:迭代、分支和GOTO
  • 非结构化语言:早期BASIC、COBOL

非结构化编程**缺点**

  • 很难遵循程序逻辑
  • 很难合并其他代码
  • 修改代码并不容易 (都是goto惹的祸)
  • 很难测试代码的特定部分

    结构化编程

  • 结构化编程抛弃了GOTO语句

  • 结构化程序定理:只要一种编程语言可以依三个方式组合其子程序及调整控制流程,则每个可计算函数都可以用此种编程语言来表示(实现任何算法)。三个调整控制流程的方式为:

    • 序列结构:按照顺序执行一个子程序,然后再执行另一个子程序
    • 选择结构:根据布尔表达式的值,执行两个子程序中的一个子程序(if, else if, else);
    • 迭代结构(for, while):执行子程序,直到一个布尔表达式为true

      调用-返回架构

  • 调用-返回架构使用分割-征服策略

  • 将整个系统分为更小的子系统,以减少复杂度。
  • 调用-返回的执行顺序被一个单线程控制

    主程序和子程序

    是一种Call and return 架构代表结构化编程
    体系结构:系统由一个主程序和一些分层组织的子程序组成

  • 主程序调用高级子程序

  • 高级子程序调用低级子程序
  • 子程序的正确性通常取决于它调用的子程序

    自顶向下的功能化设计

    结构化设计步骤:

  1. 绘制数据流图:将问题表示为通过系统的数据流。
  2. 绘制结构图:将程序表示为功能组件的层次结构。这是从数据流图中派生出来的。
  3. 评估设计
  4. 准备实施设计将逻辑设计划分为物理实现单元。

    优点

  • 自顶向下的方法是非常成功的设计方法
  • 对于10万行以下的代码的程序设计没有问题

    缺点

  • 当程序大小超过这一点(100000行)时,该方法的性能很差。

    • 原因:
      • 代码开发变得太慢
      • 测试软件并保证其可靠性变得越来越困难

        自顶向下功能化设计产生的的问题

  1. 功能化设计不容易进化(可扩展性差)
  2. 功能观点很难演变
  3. 实际的系统很难按照功能化的观点刻画.
  4. 功能化丢失了数据.
  5. 功能化设计的程序复用性比较差

    面向对象设计(Object-oriented Design

    是一种Call and return 架构代表结构化编程

    系统设计:

  • 系统被视为对象的集合,而不是消息在对象之间传递的函数。
  • 每个对象都有自己的一组关联操作。

    面向对象设计的原理:基于信息隐藏

    面向对象设计特征

  • 封装

  • 继承
  • 动态绑定
  • 复用与维护

    OOD的其他特征

  • 对象是现实世界实体的抽象.

  • 对象之间互相独立.
  • 系统功能由对象服务表达.
  • 取消了共享数据区.
  • 对象可以是分布式的.
  • 对象可以按顺序执行或者并行执行

    优点

  • 程序容易维护 (Easier maintenance)

  • 对象可复用(Reusable)
  • 现实世界映射 (Real world mapping)
  • 容易分解系统(Easy decomposition of a system)

    结构化设计与面向对象设计的区别

    结构化设计得到一颗树,其每个节点都是函数
    面向对象设计得到类图,由一群类组成