`
softstone
  • 浏览: 477825 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多

明盒开发

未经允许,严禁转载本栏目内容

本文经许可转载自软件工程专家网www.21cmm.com

未经CSDN许可,请勿随便转载,谢谢合作

(一) 明盒结构

  明盒定义了实现转换状态盒功能的过程。明盒和相应状态盒的输入、响应集、外部的行为和状态都是同样的。明盒过程通常围绕着外部服务来组织,其用户(人、硬件或其他的明盒)能调用这些服务。例如:一个数据管理明盒可以提供加入、删除和检索用户数据的服务。

  明盒设计的焦点是算法的开发。执行由case语句组成的明盒过程能实现只需要很少的算法细节而构造的状态盒规范。这些语句检测当前的输入和以前的状态以进行合适的响应并产生新的状态。这些过程本质上相当于检索状态盒表,以用于确定正确的变换。通常也可以通过对单独的状态盒变换与它们以明盒语句的局部实现的等价性比较来完成验证。

  然而,在一个算温柔密集的系统里,状态盒规范需要扩展的明盒分析、设计和正确性验证这些系统可能倒显示简单的状态盒规范,这些状态盒规范仍然需要以明盒形式执行。这些肯盒通常导致大型的过程设计,也需要定义新的黑盒或使用忆有的黑盒。

  明盒由顺序、选择和循环控制结构组成。在表4.1中以图形和设计语言形式显示了一个例子(Mills,Linger和Hevner,1986)。同样也可以引入并行控制结构。控制结构本身由功能结点和判定结点组成,在表中用g、h表示功能结点,用p表示判定结点。用圆圈表示的汇集结点汇合了控制流。一个功能结点可以代表从最简单的赋值到复杂的计算的任何操作。任何功能结点自身可以是一个新的或重用的黑盒。明盒中的每个功能结点可以将当前状态作为输入,也可以产生一个新的状态作为输出。每个判定结点可以访问但不能改变当前状态。顺序控制结构可以推广到多个功能结点的情况(表4.1给出了一个有两个功能村点的例子),或对索引类序列来说是一个功能结点在索引变量控制下的重复执行,就像fordo结构。Iftfenelse则可被认为是有多重分支的case结构。

  为了便于引用,每个部分可以用一个名字代替,例如对顺序,g和h 是第一部分和第二部分。在Ifthen中,p、g、h分别表示条件测试,肯定执行部分,否定执行部分。在Whiledo中,p和g分别表示循环条件测试和执行部分。

  每个明盒控制结构有一个单一的入口行和一个单一的出口行,在控制流中无副作用。从入口行到出口行,一个控制结构仅仅执行数据的变换。加为单入/单出的特性,这些控制结构。相当于数学函数。例如,以下是个三步顺序赋值,变量为t、x、y(:=相当于师范值操作)
  do
    t:=x
    x:=y
    y:=t
  enddo
如下图中所示。Point1中,一个初始化定义域定义了txy的值(加0代表初始值,如,t0是t的初始值)。第一步t:=x将t 的值改为x的初始值以形式point2、point3中实现x到y的师范值。最后到达point4。整个顺序从1到4的排列结果可以由自然语言表述为:

  将x的初值赋给t并交换x,y的值。或者等价地写成并行赋值:
    t,x,y:=x,y,x

  在并行赋值中,赋值号右方的所有变量或表达式的值同时赋给相应位置的左方变量。也就是说,x到t、y到xx到y同时典型值。用集合表示法,{(<t,x,y>,<x,y,x>)}函数定义是与次序无关的。该定义也与上下文无关。即使是在一个大的明盒中,函数定义也是相同的任何明盒控制结构都像图4.2中的例子一样实现了从定义域到值域的映射。

(二) 明盒抽象化和文档化

  人们应该依据控制结构从入口到出口对数据的影响来解读和理解它们,并以函数定义的形式文档化。程序函数,定义为将变量的终值表示为初值的函数,这些定义由函数抽象所决定。定义的表达方式多种多样,从自然语言到数学公式。程序函数与相应的控制结构是功能等价的。

  系统地解读和抽象程序逻辑有助于恢复丢失的或不完整的文档。尤其是以结构化形式表示的继承性系统和重用部件,可将其解读和抽象 得到设计文档,有助于恢复内嵌的事务规则最终增加可维护性和可扩展性。

  例如,下表中(wxy和z是正整数)列出了要解读和分析 的控制结构和对其函数功能的抽象结果。Sequence的程序函数是其中单个操作的组合。在这里,在第一步操作中得到的w的值可代替第二部分中出现的w。ifthenelse结构要将其真假操作合为一个表达式。这样,真假操作可被看作是执行了一个通用的数学操作。Whiledo和其他循环结构可能需要更多的分析,不过通常要将对一个表达式的多次循环执行的结果进行组合。在这个例子中,如果x是奇数,它的值在每个循环中减少2,直到为1,循环终止。如果为偶直到3终止。这个程序函数可以用如下两个条件规则很方便地表示:

    (condition1→rule1|
    condition2→rule2)

  这里,每个条件是定义环境的断言,以决定是否执行相应的规则(赋值)。垂直条(|)代表"或"。这样,如果初始x是奇数,它最终的值宵是1。否则,如果x的初始值是偶数,最终值就为0(一般情况下,条件规则可有多个部分)。

  如果条件规则中所有的条件都是互相独立的,此条件规则称为不相关规则,同时条件的排列顺序并不影响结果。不相关规则在表示程序函数时很有用。注意一个状态盒也定义了可能含有许多条件的不相关规则,这些规则对输入和已有状态做出评价以确定输出和新的状态。

  上表中的sepuence、ifthenelse 和whiledo结构的程序函数分别是次序无关、选择无关以及循环无关的。这就是说,这些结构的程序函数将控制流进行抽象,只定义从入口到出口对数据的实际影响。

  控制结构和功能节点的单入单出性质对于明盒抽象、设计和验证的可扩展性是很关键的。因此,明盒设计中应该避免使用影响这些性质的特定语句(如导致随意分支逻辑的goto语句)。单入单出结构使得在创建大型设计时仍然能对它们的结构和功能进行良好控制,因此拥有良好的可扩展性。特别是如果需要实现状态盒转换功能,可以在明盒设计中以顺序或嵌套方式不断地连接控制结构。

  为说明这个问题,考虑下图所示的明盒过程设计。位于设计的最底层的while q do ienddo,从入口到出口的实际效果(net effect)可被抽象为与循环无关的程序函数,命名为A。do g;h enddo则被抽象为与顺序无关的程序函数,命名为B。而ifthenelse则可以被表示为在玩高层次上的、功能等价的抽象层次,表述为if p then A else B,这里不需要sequence和whiledo的任何细节;而它又可被抽象为C。现在do C;k enddo又可以被当作更高层的、功能等价的抽象层次,也不需要ifthenelse的任何细节。这个sequence的作用可被抽象为程序函数D,它代表了整个明盒的总体函数功能。这样,明盒设计就定义了一个很自然的抽象的层次结构,这些抽象记录了每个层次中抽象操作的完整的函数效果,与要求的过程细节无关,但抽象过程 中的行为都应是可理解的。抽象层次中的抽象操作是一种代数操作,其中仅仅用程序函数替换中的行为都应是可理解的。抽象层次中的抽象操作是一种代数操作,其中仅仅用程序函数替换控制结构,用do、if等关键字作为函数运算符。函数抽象化是一个完美的、系统的方法,可以恢复程序文档,以理解和维护系统。

分享到:
评论

相关推荐

    gtk事件盒子

    GTK+是一个广泛使用的跨平台GUI工具包,主要用于开发Linux、Unix和其他支持GTK+运行时环境的应用程序。在C语言中,通过使用GTK+,开发者可以创建功能丰富的交互式用户界面。 事件盒子(Event Box)在GTK+中扮演着...

    明明白白看高清 2015网络机顶盒芯片大阅兵.pdf

    明明白白看高清 2015网络机顶盒芯片大阅兵.pdf

    使用HTML开发商业网站-CSS盒子模型新增关属性课件.pptx

    在HTML开发商业网站的过程中,CSS(层叠样式表)起到了至关重要的作用,特别是在美化和增强用户体验方面。CSS3引入了许多新的特性,其中盒子模型的新增属性极大地丰富了网页的样式设计。下面我们将深入探讨这些新增...

    TranspantActivity仿淘宝半透明Activity

    在Android应用开发中,我们经常会遇到需要创建特殊效果的Activity,比如淘宝应用中的半透明Activity。这个名为"TranspantActivity仿淘宝半透明Activity"的示例,就是为实现这一效果而设计的。通过深入理解并实践这个...

    javascript经典特效---jquery仿LightBox图片盒子单击逐渐放大的图片展示的插件下载.rar

    JavaScript是一种广泛应用于网页和互联网应用开发的脚本语言,它主要负责处理客户端的交互和动态效果。在本案例中,我们关注的是一个基于jQuery库实现的仿LightBox效果的图片展示插件。jQuery是一个轻量级、高性能的...

    flex抓屏 移动盒子 遮罩 抓取选取内容

    在IT行业中,尤其是在软件开发和用户体验设计领域,"flex抓屏 移动盒子 遮罩 抓取选取内容"这一技术主题涉及到多个关键概念。首先,我们需要理解这些术语的含义: 1. **Flex**:这里指的是Adobe Flex,一个开源框架...

    新版Android开发教程.rar

    包装盒内附 数据工具包。 更多信息 https://sites.google.com/a/android.com/opensource/release-features Android Android Android Android 盈利模式 Android 的 App Market 模式,软件开发者获得 7 成收入, 3 成...

    行业分类-外包设计-基于具有展示功能的包装盒的说明分析.rar

    外包设计服务通常包括概念开发、草图绘制、3D建模、样机制作以及最终的批量生产指导。 总结来说,一种具有展示功能的包装盒设计是将产品包装转化为市场营销工具的关键步骤。通过巧妙结合保护、展示和营销功能,包装...

    My 97 DatePicker用法說明

    【My 97 DatePicker】是一款经典的日期选择控件,在Windows应用程序开发中被广泛使用,尤其在.NET Framework的WinForms环境中。这款控件以其简洁的界面、丰富的功能和良好的用户交互体验而受到开发者们的青睐。本篇...

    css 模块 网页开发

    在网页开发中,CSS(Cascading Style Sheets)扮演着至关重要的角色,它负责定义HTML或XML(包括SVG、MathML等各种XML方言)文档的呈现样式。本模块将重点讲解CSS的基本概念、选择器、布局模式以及一些高级特性,...

    jQuery半透明抽屉式手风琴代码.zip

    开发这样的特效,开发者需要了解基本的HTML布局,掌握CSS的盒模型、选择器、过渡和变换,以及jQuery的事件处理、选择器和动画方法。此外,良好的编程习惯和性能优化意识也是必不可少的,比如合理使用$(document)....

    OpenGL ES 3.x游戏开发 上卷 吴亚峰

    第八章介绍了常用的3D开发技巧,包括标志板、天空盒、镜像绘制等。 - **标志板**:在3D场景中显示2D图像的技术。 - **天空盒**:用于模拟背景天空,增强场景的真实感。 - **镜像绘制**:通过反射来实现水面等效果。...

    Visual C++程序开发范例宝典(PDF扫描版).part3

    含本书教程PDF 共399个实例: 第1章 窗体与界面设计   1.1 菜单应用实例   cc实例001 在系统菜单中添加菜单项   cc实例002 带图标的程序菜单   cc实例003 根据表中数据动态生成菜单  ...

    C#程序开发范例宝典(第2版).part08

    一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后...

    C#程序开发范例宝典(第2版).part12

    一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    此文件分为2部分 ... 含本书全部源码(1-16章) 共399个实例:第1章 窗体与界面设计 1.1 菜单应用实例 cc实例001 在系统菜单中添加菜单项 cc实例002 带图标的程序菜单 cc实例003 根据表中数据动态生成菜单 cc...

    Visual C++程序开发范例宝典(PDF扫描版).part2

    含本书PDF教程 共399个实例: 第1章 窗体与界面设计   1.1 菜单应用实例   cc实例001 在系统菜单中添加菜单项   cc实例002 带图标的程序菜单   cc实例003 根据表中数据动态生成菜单  ...

    javascript经典特效---jquery实现LightBox图片点击放大效果的图片盒子插件.rar

    在实际开发中,你也可以选择现成的LightBox插件,如Fancybox、Magnific Popup或Simple Lightbox,它们提供了更丰富的功能和自定义选项。 总的来说,利用jQuery实现LightBox效果需要理解DOM操作、事件处理和CSS样式...

Global site tag (gtag.js) - Google Analytics