1、9.1 概述9.2 JSP方法9.3 JSD方法,第 9 章 Jackson方法,返回主目录,第9章 Jackson方法,9.1概述1. 产生2. 基本思想3. 设计和数据结构的关系4. SD方法和JSP方法的异同面向数据流的设计(SD方法)和面向数据结构的设计(JSP方法)的共同点都是数据信息驱动的,都试图将数据表示转换成软件表示,不同之处在于面向数据结构的设计不利用数据流图,而根据数据结构的表示来设计。,5. JSP方法的优缺点JSP方法的优点:简单,适合于规模不大的系统,建立了问题的数据结构之后,可直接推导出相应的程序结构。 JSP方法的局限性:不适合于大系统,当输入数据结构与输出数据结
2、构不相同且无对应关系时,难于应用。当数据结构发生变化时,程序结构也发生变化,一般是总体上用SD方法, 局部范围用JSP方法。 ,9.2 JSP方法,9.2.1Jackson图Jackson图是JSP方法的描述工具,在分析、确定问题的数据结构后, 用Jackson图来描绘问题的数据结构。 1. Jackson图的表示虽然程序中实际使用的数据结构种类繁多,但是它们的数据元素彼此间的逻辑关系却只有顺序、选择和重复三种,因此, 逻辑数据结构也只有这三种。 1) 顺序结构,顺序结构的数据由一个或多个数据元素组成,每个元素按确定次序出现一次。如图9.1(a)中的A是一个顺序结构,指出基本成份B, C, D
3、顺序组成。 注意, 这里的A并非模块, 它既可以是数据(表示数据结构时),又可以是程序(表示程序结构时), 而B, C, D仅是A的成份,上、 下层是“组成”的关系,A中除了B, C, D外不包含其他代码,不同于Yourdon方法的软件结构。 2) 选择结构选择结构的数据包含两个或多个数据元素,每次使用这个数据时按一定条件从这些数据元素中选择一个。如图9.1(b)中的A是一个选择结构, 由数据元素B, C或D组成。 ,图 9.1 Jackson图 (a) 顺序结构; (b) 选择结构; (c) 重复结构,3) 重复结构重复结构的数据, 根据使用时的条件由一个数据元素出现零次或多次构成。 如图9
4、.1(c)所示,表示A由多个数据元素B组成。 Jackson图具有如下优点:(1) 便于表示层次结构, 是对结构进行自顶向下分解的有力工具。(2) 形象直观可读性好。(3) 既能表示数据结构也能表示程序结构(因为程序结构也只有上述三种基本类型)。 ,3. Jackson图应用的示例某仓库管理系统每天要处理大批由单据所组成的事务文件。 单据分为订货单和发货单两种,每张单据由多行组成,订货单每行包括零件号、零件名、单价及数量等 4 个数据项,发货单每行包括零件号、零件名及数量等 3 个数据项,用Jackson结构图表示该事务文件的数据结构。图9.2为该事务文件的数据结构。,图 9.2 事务文件的J
5、ackson结构图,9.2.2纲要逻辑纲要逻辑是类似于伪码的一种语言表示工具, 与Jackson结构图对应, 用于将Jackson结构图表示的程序结构转换为语言表示。 图9.1中对应的纲要逻辑为: (1) 顺序结构:A seq B C D A end,(2) 选择结构:A sel 条件1 B alt 条件2 C alt 条件3 DA end ,(3) 重复结构:A iter until(或while)条件 BA end ,9.2.3开发步骤JSP方法基本由下列5个步骤组成:(1) 分析并确定输入数据和输出数据的逻辑结构, 并用Jackson图描绘这些数据结构。 (2) 找出输入数据结构和输出数
6、据结构中有对应关系的数据单元。所谓有对应关系是指有直接的因果关系,在程序中可以同时处理的数据单元(对于重复出现的数据单元必须是重复的次序和次数都相同才可能有对应关系)。 (3) 用下列3条规则从描绘数据结构的Jackson图导出描绘程序结构的Jackson图:, 为每对有对应关系的数据单元,按照它们在数据结构图中的层次和在程序结构图的相应层次画一个处理框(如果这对数据单元在输入数据结构和输出数据结构中所处的层次不同, 则和它们对应的处理框在程序结构图中所处的层次与它们之中在数据结构图中层次低的那个对应)。 根据输入数据结构中剩余的每个数据单元所处的层次, 在程序结构图的相应层次分别为它们画上对
7、应的处理框。 根据输出数据结构中剩余的每个数据单元所处的层次, 在程序结构图的相应层次分别为它们画上对应的处理框。(4) 列出所有操作和条件(包括选择条件和重复结束条件),并把它们分配到程序结构图的适当位置。 (5) 用纲要逻辑表示程序。 ,9.2.4 JSP方法应用示例现举例说明JSP方法设计过程。 1) 问题陈述某仓库存放多种零件(如P1, P2, ),每个零件的每次进货、发货都有一张卡片作出记录,每月根据这样一叠卡片打印一张月报表。 报表每行列出某种零件本月库存量的净变化。用JSP方法对该问题进行设计。 2) 建立输入、 输出数据结构建立输入、 输出数据结构的步骤如下:(1) 输入数据:
8、 根据问题陈述, 同一种零件的进货、 发货状态不同,每月登记有若干张卡片。,把同一种零件的卡片放在一起组成一组,所有的卡片组按零件名排序。 所以输入数据是由许多零件组组成的文件,每个零件组有许多张卡片, 张卡片上记录着本零件进货或发货的信息。因此输入数据结构的Jackson图为图9.3(a)。 (2) 输出数据:根据问题陈述,输出数据是一张如图9.3(c)的月报表, 它由表头和表体两部分组成,表体中有许多行, 一个零件的净变化占一行,其输出数据结构的Jackson图为图9.3(b)。 3) 找出输入、 输出数据结构中有对应关系的单元月报表由输入文件产生,有直接的因果关系, 因此顶层的数据单元是
9、对应的。表体的每一行数据由输入文件的每一个“零件组”计算而来,行数与组数相同,且行的排列次序与组的排列次序一致,都按零件号排序。因此“零件组”与“行”两个单元对应,以下再无对应的单元。 ,图 9.3某仓库系统输入、 输出数据结构 (a) 输入数据结构; (b) 输出数据结构; (c) 输出表,4) 导出程序结构找出对应关系后,根据以下规则导出程序结构:对于输入数据结构与输出数据结构中的数据单元,每对有对应关系的数据单元按照它们所在的层次,在程序结构图适当位置合画一个处理框,无对应关系的数据单元,各画一个处理框。 根据以上规则, 画出的程序结构图如图9.4所示。 在图9.4的程序结构的第4层增加
10、了一个“处理零件组”的框,因为改进的Jackson图规定顺序执行的处理中不允许混有重复执行和选择执行的处理。 增加了这样一个框, 使符合该规定,同时也提高了结构图的易读性。 ,图 9.4 某仓库系统程序结构,5) 列出并分配操作与条件为了对程序结构作补充,要列出求解问题的所有操作和条件,然后分配到程序结构图的适当位置, 就可得到完整的程序结构图。 (1) 本问题的基本操作列出如下: A、 终止B、 打开文件C、 关闭文件D、 打印字符行E、 读一张卡 F、产生行结束符G、累计进货量H、累计发货量I、计算净变化 J、 置零件组开始标志(2) 列出条件如下: I(1):输入条件未结束I(2):零件
11、组未结束S(3): 进发货标志将操作与条件分配到适当位置的程序结构图如图9.5所示。 ,图 9.5 分配操作后的程序结构图,在分配操作时注意:为了能获得重复和选择的条件, Jackson建议至少超前读一个记录,以便使得程序不论在什么时候判定, 总有数据已经读入,并做好使用准备。 因此在图9.5中, 将操作E(读一张卡)放在打开文件之后,同时在处理完一张卡片后再读一次。 6) 用纲要逻辑写出程序Jackson方法中的纲要逻辑与Jackson所示的程序结构图完全对应,用纲要逻辑写出程序的过程,实际上就是自顶向下用这些纲要逻辑替换Jackson图中每个处理框的过程,每个处理框都看作是下层处理框及分配
12、在上面的操作组成。 图9.5所示的程序结构的纲要逻辑为: ,产生月报表 seq打开文件读一张卡产生表头 seq打印字符行产生表头 end置零件组开始标志产生表体 iter while 输入文件未结束由零件组产生输出行 seq处理零件组 iter while 零件组未结束处理卡片 sel 进货标志,处理进货 seq累计进货量 处理进货 end alt 发货标志 处理发货 seq累计发货量 处理发货 end,处理卡片 end读一张卡 处理零件组 end,产生零件名 seq打印字符行 产生零件名 end 产生净变化 seq计算净变化 打印字符行产生净变化 end换行置零件组开始标志,由零件组产生输出
13、行end 产生表体 end关闭文件终止产生月报表 end 用纲要逻辑书写程序可以很方便地转换成源代码, 还可以检查前面步骤的错误。如果分配操作不正确或者结构图不正确, 都难以写出它的纲要逻辑。 ,9.2.5结构冲突问题JSP方法适用于输入数据和输出数据结构之间有对应关系的问题求解。但有些情况下,输入数据和输出数据结构之间找不到对应关系, 若仓库系统中的卡片不按零件名分组,而是按进货、发货的日期顺序排列,这样“零件组”与“行”就不对应了。 输入数据与输出数据结构找不到对应关系的情况,称为结构冲突。 对这种结构冲突的问题,Jackson提出了引入中间数据结构或中间文件的办法, 将冲突部分分隔开来,
14、建立多个程序结构, 再利用中间文件把它们联系起来,构成一个系统的整体。,9.3 JSD方法,9.3.1 JSD概述1. JSD的产生JSD方法是JSP的扩充, 它是因JSP的缺陷而产生的。 9.2节已经讲到JSP方法是基于输入数据结构和输出数据结构的对应复合而成程序结构的,但当要开发的系统十分庞大时,输入数据结构和输出数据结构之间就会出现大量复杂的、JSP难以对付的结构冲突问题,致使软件系统结构无法形成,因而它只是一种程序设计方法,只适用于小型程序的开发。 ,2. JSD的基本思想1) 分而治之的原则JSD则是采用“分而治之”的复杂性控制原则,将系统大量复杂的输入数据流和输出数据流分离为一些独
15、立的、彼此无关联的、结构简单的输入数据流和一些独立的、彼此无关联的输出数据流,其中每一简单的输出数据流仅关联于少数几个简单的输入数据流。这样, 一个错综复杂的庞大问题就转化为多个互不关联的独立的小型程序开发问题,这些小型程序在开发时不会出现复杂的结构冲突,即可直接使用JSP方法了。 ,2) 确定实体对于系统输入数据流的分离,JSD方法追溯系统输入数据流的真正内含,即系统输入数据流是系统所关注的客观世界动态行为的一种信息表述。因此,JSD方法根据用户的专业知识对客观世界行为进行自然划分,将系统输入数据流分离为多个彼此独立的输入数据流,其中每种独立的输入数据流对应于客观世界中的一个实体,该实体是动
16、态行为的一种信息表述。 对于系统输出数据流的分离, JSD方法未加以说明。 3) 建立顺序进程JSD方法将软件系统输入数据流的内含客观世界及其动态行为称为软件系统的主题,而软件系统的功能则是根据系统的输入数据产生系统的输出数据。,JSD方法在计算机中用信息处理的顺序进程,模拟系统主题中客观实体的行为,建立系统主题的计算机仿真模型,为产生系统输出数据的软件系统中的功能进程提供所需的输入数据。 顺序进程、功能进程和它们之间数据通信的说明构成了完整、 详尽的软件系统说明,JSD方法以此为依据,形成最终形式的、 可在目标计算机环境中有效、方便运行的软件系统。 JSD涉及的活动几乎覆盖整个软件生命期,
17、强调需求分析和规格说明,也包括设计和编程,直至最终实现一个可运行的目标系统, 是比较完整的系统开发方法。此外,JSD方法对需求的描述特别强调操作之间的时序性,所以它应用于时序特点较强的系统,包括数据处理系统和一些实时控制系统。 ,3. JSD方法的特点JSD方法有如下特点:(1) 建立现实世界的模型, 确定用户的功能需求。 现实世界的模型和用户功能需求之间是密切联系的,模型隐含了用户的各种功能。功能可从模型中自然地导出, 是多变的, 但模型却是较稳定的。所以,JSD的这一特色既有利于理解需求, 又有助于以后的维护。 (2) 用顺序进程的网络描述需求。 JSD用顺序进程描述现实中的实体和动作,用
18、顺序进程网络描述现实世界的模型,这里“进程”概念与操作系统中的“进程”术语类似。 ,(3) JSD描述的需求原则上是可以直接执行的。 JSD用顺序进程网络和纲要逻辑描述需求, 其操作语义是确定的, 所以原则上可以执行, 即采用人工或自动的手段,可以从需求直接建立可运行的系统原型。因此,用JSD可实现快速原型。 (4) 开发过程不再沿用分析、设计及编程的模式, 而是突出需求分析, 把编程分散在各个步骤中陆续进行。 ,2. 顺序进程现实中的实体及其按时序执行的动作的表述就是顺序进程现实中有实体存在,如银行系统中,有帐户实体。每个实体按某种时序执行动作,每个实体有各自的属性,属性因动作的发生而随时变
19、化。 3. 进程间的联系现实中的实体间有相互联系, 所以其模型中的进程间亦需相互联系。 4. 模型和功能由于模型反映了现实, 所以系统功能可以在模型的基础上描述。,9.3.3 JSD开发步骤JSD把软件开发过程组织成 6 步,前 5 步组成了系统的需求说明阶段,第 6 步为系统的实现阶段。 1. 实体动作步实体动作步是通过列出系统所关心的客观实体和其执行或承受的动作来定义系统主题的范围,即定义系统所感兴趣的客观世界2. 实体结构步实体结构步是用Jackson图来描述每个实体执行的动作及其时序, 产生一组描述实体进程的Jackson结构图。 餐厅业务中有顾客进程、 会计进程等, 会计进程如图9.
20、6所示。 ,图 9.6 会计进程,3. 初步模型步初步模型步是用顺序进程网络构成现实的模型,并把模型同现实联系起来以实现两者间的同步。用纲要逻辑描述每个实体内部结构,产生描述模型的系统说明图和描述实体进程的纲要逻辑。 在顺序进程网络中,用矩形框表示现实的实体、 系统的顺序进程或功能进程,用圆圈表示数据流,用菱形表示状态向量, 它们之间的连线表示实体与进程的联系。在餐厅业务的问题中, 我们感兴趣的是会计进程,通过该进程的动作,可知餐厅每天的收入,餐厅业务的初始模型如图9.7所示。 ,图 9.7 初始模型,会计进程的纲要逻辑是: 会计进程seqread C; 记帐: iter while(有费用发
21、生)费用处理sel进餐费进餐费收入处理; alt原料费原料费支出处理; alt人工费人工费支出处理;费用处理end,read C; 记帐: end结帐会计进程end4. 功能步功能步是在初始模型的基础上描述系统的功能,产生完善的系统说明图和完善的纲要逻辑。 5. 性能步性能步考虑并描述系统的性能需求,确定系统对实现世界的滞后允许达到何种程度,即确定系统的响应时间。 ,6. 实现步实现步考虑目标计算机环境的各种物理限制和系统的性能需求,运用各种实现转换技术,将软件系统说明转换为可在目标计算机环境中有效、 便利运行的软件系统。 ,9.3.4 JSD应用示例1) 问题陈述 公园租船管理处负责租船给游
22、客在湖面上游玩。 每次游客游玩后还船。该管理处职员要求计算机在每天工作结束时产生一天中游客总的租船次数和总的租船时间的报告。 2) 实体动作步实体: 游客实体标识符: 游客姓名动作: 租船。 动作属性: 船编号、 租用时间(开始时间)还船。动作属性: 船编号、退还时间(结束时间)输出: 租船总次数总的租船时间 T=T+还船时间租船时间,3) 实体结构步实体结构如图 9.8 所示。4) 初始模型步用系统说明图来描述初始模型如图 9.9 所示。 系统说明图即为顺序进程网络。 5) 功能步游客进程和职员进程的纲要逻辑描述如下: ,图 9.8 实体结构,图 9.9 系统说明图,游客进程和职员进程的纲要
23、逻辑描述如下: 游客1进程 seqsession-time: =0; read C; 租船seqsession-time: =session-time租船时间; 租船endread C; 还船seqsession-time: =session-time还船时间;,还船end游客1进程 end职员进程 iter报告 seqread REQ; totaltime: =0; number: =0; get CV; 处理租船 iter while(not endofCVs)totaltime: =totaltimesession-time; number: =number1; ,get CV; 处理租
24、船 endwrite Reportline(总租船次数, number, 总租船时间, totaltime); 报告 end 职员进程 end,6) 实现步前面形成的软件系统说明中,游客进程有成千上万个, 可能是并发的, 这不能在有限的处理机上运行, 因此设置一调度程序, 处理多进程的运行调度。 ,若在计算机中保存所有进程的正文拷贝和运行状态向量, 则将占用大量存储空间,因此将正文同其状态向量分离保存。 因同一类进程的动作相同,则只保存一个正文拷贝, 当某一进程激活时,将该类进程正文同该进程的状态向量重新结合, 占用处理机资源,形成一个活动进程。 将上述软件系统说明用系统实现图来实现,如图9.10所示。,图 9.10 系统实现图,