高级结构设计

来源:互联网 发布:网络怎么可以赚钱 编辑:程序博客网 时间:2024/05/18 12:38

高级结构设计

1.软件设计引论

  • 大型和小型项目设计

    1. 大型、正规的项目:设计与需求分析、编码等活动分开的,由不同人员完成

    2. 小型、非正式的项目:大量的设计工作由程序员自己完成的。

  • 设计的层次

    *软件系统中,设计是在几个不同层次的细节上进行的。

    1. 层次1:划分成子系统(数据库接口、用户接口、命令结束程序、报告格式程序),并定义这些子系统间的接口;

      系统-》子系统-》模块-》程序-》子程序-》亚程序(小于任何程序)

    2. 层次2:划分成模块,识别系统中的的所有模块

    3. 层次3:划分成子程序,将每个模块划分成各种功能

    4. 层次4:子程序内部的设计,设计单个子程序中的详细功能

  • 创建中的设计工作

2.结构化设计

  • 结构化设计的组成部分:

    1. 系统组织

    2. 开发设计的策略

    3. 评估设计准则

    4. 关于问题的明确说明

    5. 表达设计的图形和语言工具

  • 选择需要进行模块化的要素

    1. 自顶向下分解(原则)

      1. 设计高层次

      2. 避免特定语言细节

      3. 暂时不指出下一层次的设计细节

      4. 正规化每个层次

      5. 检验每个层次

      6. 转移到下一个层次

    2. 自底向上合成(原则)

      1. 问自己,关于系统要做什么你都知道哪些?

      2. 利用这一问题识别出某些低层次功能

      3. 识别出这些低层次功能共同的方面,将其组合到一起

      4. 向上一个层次,进行同样的工作,或回到顶端开始自上而下

3.面向对象设计

面向对象设计方法的特点:通过对实际问题的分析,从中抽象出对象,再使用程序语言来表现它;

面向对象设计方法的过程:识别对象中的子对象,并识别出对于子对象的操作,然后再根据子对象的操作开发出一个系统;

  • 关键思想:

    1.一个程序模型越是真实地反映了实际问题,那么,由此产生出的程序质量越好

    2.项目的数据定义比功能稳定的多,因此,根据数据来进行设计,可以使设计更加稳定;

  • 抽象:

    1.好处:忽略无关紧要的细枝末节问题,专注于重要的特性

  • 封装:

    1.对抽象不存在地方的补充

  • 模块化:

    相联系的数据和功能放入模块中;

  • 层次结构和继承性

  • 对象与类

  • 面向对象设计的步骤:

    1.识别对象及其属性,往往是数据

    2.确定每个对象可以做些什么

    3.确定每一个对象可以对其他对象做些什么

    4.确定每个对象对其它对象来说可见的部分

    5.确定每个对象的公共接口

  • 典型面向对象设计的评论:一个面向对象系统至少四类对象

    1.问题域要素

    2.用户接口要素

    3.任务管理要素

    4.数据管理要素

4.对目前流行设计方法的评论

结构化设计和面向对象设计共有特性:

1.将一个系统分解成子系统的准则

2.解释分解的图形式语言符号

3.有些方法还包括第三要素

4.防止你使用其他方法的规定

  • 何时使用结构化设计

    1.特性:将程序分解成子程序的方法。它强调功能但不强调数据

    2.应用:适用于具有许多互不作用的独立功能的系统(几百行代码的小型程序);功能变动的可能性较大(比数据大得多)

  • 何时采用新型隐蔽设计

  • 何时采用面向对象设计

    1.特性:面向对象设计在较高出抽象层次上要比结构化设计有效

    2.面向对象设计是设计模块数据和数据操作的集合

    3.应用:适用于从最顶层分解系统;适合于任何客观世界中的对象(代码在100行以上的系统)

5.往返设计

  • 什么是往返

    高层次的总体上和低层次的细节上对问题进行观察,在从事高层次问题时获得的印象对在低层次细节中的工作有很大帮助;

    在从事低层次问题时获得的细节对高层次的总体理解和作出总体设计决定奠定良好的基础。这种高层次和低层次之间往返思维非常有益。

  • 设计是一个复杂的过程

  • 设计是一个险恶的过程

  • 设计是一个启发的过程

  • 受欢迎的设计特点

    1.智力上的可管理性

    2.低复杂性

    3.维护的方便性

    4.最小的联系性

    5.可扩充性

    6.可重复使用性

    7.高扇入

    8.低或中等程度扇出

    9.可移植性

    10.简练性

    11.成层性

    12.标准化技求

  • 检查表

    · 是否使用了往返设计方法,应从几个方案中选择最好的,而不是首次尝试就确定方案。· 每个子程序的设计是否都和与其相关的子程序设计一致?· 设计中是否对在结构设计层次上发现但并未解决的问题作了充分说明?· 是否对把程序分解成对象或模块的方法感到满意?· 是否对把模块分解成子程序的方法感到满意?· 是否明确定义了子程序的边界?· 是否是按照相互作用最小的原则定义子程序的?· 设计是否充分利用了自顶向下和自底向上法?· 设计是否对问题域要素、用户接口要素、任务管理要素和数据管理要素进行了区分?· 设计是智力上可管理的吗?· 设计是低复杂性吗?· 程序是很容易维护的吗?· 设计是否将子程序之间的联系保持在最低限度?· 设计是否为将来程序可能扩展作了准备?· 子程序是否是设计成可以在其它系统中再使用的?· 低层次子程序是高扇入的吗?· 是否绝大多数子程序都是低或中等程度扇出的?· 设计易于移植到其它环境吗?· 设计是简练的吗?是不是所有部分都是必要的?· 设计是成层的吗?· 设计中是否尽量采用了标准化技术以避免奇特的、难以理解的要素

7.小结

·设计是一个启发的过程。 固执地坚持某一种方法只会抑制创造力,从而产生低质量的程序。 坚持设计方法上有一些不屈不挠的精神是有益的, 因为这可以迫使你对这种方法进行充分理解。但是,一定要确信你是在不屈不挠而不是顽固不化。· 好的设计是通过迭代逼近得到的: 你尝试过的设计方案越多, 你最终所确定的设计方案也越好。· 结构化设计比较适合于小规模的子程序组合, 同时, 它对于功能变化可能性比数据大的问题也是较适用的。· 面向对象设计更适于子程序与数据的组合,通常在比结构化设计抽象程度更高些的层次上适用。它尤其适合于数据变动可能性大于功能变动可能性的问题。· 设计方法仅是一种工具, 你对工具运用得好坏决定了你所设计的程序的质量。 利用不好的设计方法, 也可能设计出高质量的程序。 而即使是好的方法, 如果运用不当的话, 也只能设计出拙劣的程序。但不管怎样,选择正确的工具更容易设计出高质量的软件。· 许多关于设计的丰富而有用的信息都是在本书之外的。 在这里所论述的, 不过是冰山的一角而 已。

原创粉丝点击