📄 pl003.asp
字号:
<UL>
<ADDRESS>资 料 性 参 数 及 传 回 值</ADDRESS>
<ADDRESS>控 制 性 参 数 及 传 回 值</ADDRESS>
</UL>
</TD>
<TD>
<ADDRESS>传 递 性 关 连</ADDRESS>
<UL>
<ADDRESS>- 资 料 关 连</ADDRESS>
<ADDRESS>- 控 制 关 连</ADDRESS>
</UL>
</TD>
</TR>
<TR>
<TD>
<ADDRESS>(2) 共 用 (全 域 )变 数</ADDRESS>
</TD>
<TD>
<ADDRESS>共 用 关 连</ADDRESS>
</TD>
</TR>
<TR>
<TD>
<ADDRESS>(3) 程 式 码</ADDRESS>
</TD>
<TD>
<ADDRESS>内 容 关 连</ADDRESS>
</TD>
</TR>
</TABLE>
</UL>
<UL>
<P>以 下 是 针 对 上 述 的 几 种 关 连 性 所 提 出 的 进 一 步 解 说 :
</P>
</UL>
<H3><B>资 料 关 连 (Data Coupling)</B></H3>
<UL>
<P>两 个 副 程 式 之 间 的 关 系 是 建 立 在 传 递 物 (参 数 及 传 回 值
)上 面 , 而 每 一 个 传 递 物 均 为 「 资 料 性 质 」 者 , 称 为 「 资
料 关 连 」 。 </P>
<P>我 们 先 前 提 过 传 递 物 依 性 质 可 分 成 「 资 料 性 质 」 及 「
控 制 性 质 」 两 种 , 如 何 区 分 呢 ? 如 果 说 传 递 物 會 用 在 副
程 式 的 「 逻 辑 判 断 式 」 者 , 它 就 属 於 控 制 性 质 , 例 如 :
「 If IsRunning Then ...」 中 的 IsRunning, 其 目 的 是 用 来 「 控 制
」 程 式 的 执 行 路 径 , 除 此 之 外 , 其 它 的 资 料 大 致 上 都 属
於 资 料 性 质 , 例 如 拿 来 作 为 数 值 运 算 的 资 料 、 字 串 操 作
的 资 料 等 。 </P>
<P>就 资 料 关 连 来 说 , 让 我 们 举 个 例 子 来 看 看 , 以 下 是 呼
叫 Len() 函 数 的 式 子 : </P>
<UL>
<P><FONT COLOR="#000080">length = Len( "Run!程 式 设 计 " )</FONT></P>
</UL>
<P>呼 叫 端 呼 叫 函 数 Len() 时 會 传 入 一 个 「 字 串 」 参 数 , 而
Len() 返 回 时 會 传 回 「 字 串 长 度 」 , 字 串 与 字 串 长 度 在 这
里 都 是 「 资 料 性 质 」 的 , 因 此 它 们 的 关 连 性 属 於 「 资 料
关 连 」 。 </P>
<P>资 料 关 连 是 副 程 式 之 间 的 关 连 中 最 弱 、 最 容 易 维 护 的
一 种 , 因 为 既 然 要 整 合 程 式 , 副 程 式 之 间 的 资 料 传 递 就
在 所 难 免 , 写 出 这 样 的 副 程 式 距 离 好 的 副 程 式 已 经 八 九
不 离 十 了 。 </P>
<P>为 了 方 便 後 面 的 解 说 , 我 们 要 把 副 程 式 之 间 的 关 系 用
图 形 来 表 达 , 就 拿 呼 叫 Len() 的 例 子 开 始 吧 ! </P>
<UL>
<P><IMG SRC="pl03-1.gif" HEIGHT=172 WIDTH=230></P>
<P><FONT COLOR="#008000">(图-1) 呼 叫 Len() 的 资 料 关 连 </FONT></P>
</UL>
<P>请 注 意 两 件 事 情 , 图 中 我 们 所 谓 的 副 程 式 指 是 广 义 的
副 程 式 , 它 除 了 表 示 一 般 的 副 程 式 之 外 , 也 用 来 表 示 函
数 及 主 程 式 , 另 外 我 们 还 特 别 把 「 呼 叫 」 与 「 资 料 流 」
分 开 , 呼 叫 以 ─ → 表 示 , 它 永 远 是 从 呼 叫 端 指 到 被 呼 叫
端 , 至 於 资 料 流 , 则 可 能 包 含 呼 叫 时 的 「 参 数 传 递 」 及
返 回 时 的 「 传 回 值 」 , 其 方 向 未 必 与 「 呼 叫 」 的 方 向 相
同 , 所 以 采 用 有 别 於 呼 叫 的 <IMG SRC="pl03-b.gif" HEIGHT=9 WIDTH=44>来
表 示 「 资 料 流 」 。 </P>
<P>资 料 关 连 是 最 弱 的 关 连 , 属 关 连 性 中 最 佳 的 一 种 , 不
过 就 程 式 好 坏 的 评 估 上 , 仍 要 再 检 视 整 体 程 式 的 架 构 ,
举 个 例 子 来 看 : </P>
<UL>
<P><IMG SRC="pl03-2.gif" HEIGHT=229 WIDTH=257></P>
<P><FONT COLOR="#008000">(图-2) P_Tramp 是 「 游 走 型 资 料 」 </FONT></P>
</UL>
<P>乍 看 之 下 , 上 面 这 个 架 构 中 , 所 有 副 程 式 之 间 的 关 连
性 都 只 有 资 料 关 连 , 但 请 注 意 参 数 P_Tramp, 它 一 共 游 走 了
两 层 的 副 程 式 , 我 们 称 它 为 「 游 走 型 资 料 」 , 游 走 型 资
料 有 什 麼 缺 点 呢 ? 假 如 说 P_Tramp 只 會 在 副 程 式 Sub12 中 被
使 用 , 那 麼 当 它 经 过 Sub1 时 , 极 可 能 因 为 程 式 设 计 人 员
的 不 小 心 而 被 改 变 掉 , 增 加 了 危 险 性 。 一 般 来 说 , 参 数
经 过 的 副 程 式 越 多 , 被 不 当 地 改 变 掉 的 危 险 性 就 越 高 ,
因 此 我 们 应 该 尽 可 能 把 这 类 到 处 游 走 的 资 料 去 掉 才 是 ,
以 前 面 的 例 子 来 看 , 应 该 改 成 : </P>
<UL>
<P><IMG SRC="pl03-3.gif" HEIGHT=229 WIDTH=226></P>
<P><FONT COLOR="#008000">(图-3) 图 -2经 修 正 後 的 架 构 </FONT></P>
</UL>
</UL>
</TD>
</TR>
</TABLE>
<TABLE CELLSPACING=0 CELLPADDING=0 WIDTH="95%" >
<TR>
<TD>
<H3><B>控 制 关 连 (Control Coupling)</B></H3>
<UL>
<P>两 个 副 程 式 之 间 的 关 系 是 建 立 在 传 递 物 (参 数 或 传 回 值
)上 面 , 而 这 些 传 递 物 之 中 含 有 一 个 以 上 的 「 控 制 性 质 」
传 递 物 , 称 为 「 控 制 关 连 」 。 举 个 例 子 来 说 , 呼 叫 端 传
入 一 个 「 如 何 显 示 视 窗 」 的 参 数 (如 以 下 例 子 的 how_to_show),
指 示 副 程 式 ShowWindow() 显 示 视 窗 的 方 法 , 程 式 上 可 能 是 :
</P>
<UL>
<ADDRESS><FONT COLOR="#000080">Call ShowWindow( windowID, how_to_show )</FONT></ADDRESS>
<ADDRESS><FONT COLOR="#000080">呼 叫 端</FONT></ADDRESS>
<ADDRESS><FONT COLOR="#000080">- - - - - - - - - - - - - - - - - - - -
- - - - - - - - </FONT></ADDRESS>
<ADDRESS><FONT COLOR="#000080">副 程 式 </FONT></ADDRESS>
<ADDRESS><FONT COLOR="#000080">Sub ShowWindow( windowID, how_to_show )</FONT></ADDRESS>
<UL>
<ADDRESS><FONT COLOR="#000080">Select Case how_to_show</FONT></ADDRESS>
<UL>
<ADDRESS><FONT COLOR="#000080">Case 1</FONT></ADDRESS>
<UL>
<ADDRESS><FONT COLOR="#000080">... ' 以 一 般 大 小 的 视 窗 显 示 </FONT></ADDRESS>
</UL>
<ADDRESS><FONT COLOR="#000080">Case 2</FONT></ADDRESS>
<UL>
<ADDRESS><FONT COLOR="#000080">... ' 以 最 大 化 的 视 窗 显 示 </FONT></ADDRESS>
</UL>
<ADDRESS><FONT COLOR="#000080">Case 3</FONT></ADDRESS>
<UL>
<ADDRESS><FONT COLOR="#000080">... ' 以 最 小 化 的 视 窗 显 示 </FONT></ADDRESS>
</UL>
</UL>
<ADDRESS><FONT COLOR="#000080">End Select</FONT></ADDRESS>
</UL>
<ADDRESS><FONT COLOR="#000080">End Sub</FONT></ADDRESS>
</UL>
<P>在 这 个 例 子 中 , 您 将 发 现 how_to_show 这 个 参 数 与 显 示 视
窗 的 逻 辑 运 算 并 没 有 什 麼 关 系 , 它 的 目 的 是 用 来 控 制 ShowWindow()
该 执 行 内 部 的 哪 一 段 程 式 码 。 由 於 how_to_show 这 个 参 数 并
非 逻 辑 运 算 用 的 「 资 料 」 , 而 是 「 控 制 」 副 程 式 内 部 逻
辑 的 旗 标 , 所 以 它 是 「 控 制 性 质 」 的 资 料 , 为 了 与 纯 资
料 性 质 的 资 料 有 所 区 分 , 我 们 在 结 构 图 上 以 <IMG SRC="pl03-c.gif" HEIGHT=10 WIDTH=41>来
表 示 它 , 而 前 面 ShowWindow() 的 例 子 可 以 表 示 成 : </P>
<UL>
<P><IMG SRC="pl03-4.gif" HEIGHT=196 WIDTH=255></P>
<P><FONT COLOR="#008000">(图-4) 控 制 关 连 </FONT></P>
</UL>
<P>一 般 来 说 , 控 制 关 连 虽 然 不 比 资 料 关 连 来 的 容 易 维 护
, 但 只 要 对 控 制 用 的 旗 标 性 参 数 做 好 应 有 的 文 件 , 控 制
连 结 的 副 程 式 仍 然 具 有 高 度 的 可 维 护 性 。 但 撰 写 这 类 的
副 程 式 时 要 特 别 注 意 , 控 制 性 的 旗 标 参 数 只 适 合 用 在 上
层 传 给 下 层 的 副 程 式 (例 如 上 面 的 例 子 )。 以 下 举 一 个 例
子 来 说 明 以 「 下 层 控 制 上 层 」 副 程 式 的 缺 点 : </P>
<UL>
<P><IMG SRC="pl03-5.gif" HEIGHT=197 WIDTH=201></P>
<P><FONT COLOR="#008000">(图-5) 下层副程式以「列印无此帐号」旗标控制上层的行为
</FONT></P>
</UL>
<P>这 个 例 子 中 , 下 层 的 副 程 式 传 回 一 个 「 列 印 无 此 帐 号
」 的 旗 标 , 要 求 上 层 的 副 程 式 处 理 列 印 的 动 作 , 这 好 像
是 当 员 工 的 告 诉 老 板 说 : 「 老 板 , 你 把 这 件 事 做 好 」 ,
这 显 然 与 副 程 式 该 扮 演 的 角 色 相 违 背 。 </P>
<P>改 良 下 层 控 制 上 层 的 方 法 还 算 简 单 , 假 如 列
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -