⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pl005.asp

📁 ASPWeb数据库范例总览
💻 ASP
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
   <TITLE>程式设计基础讲座(五) - 走过传统,迈向 OO</TITLE>
   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (Win95; I) [Netscape]">
</HEAD>
<BODY BACKGROUND="back01.jpg">

<H3><FONT COLOR="#008000">程 式 设 计 基 础 讲 座 (五 )</FONT></H3>

<H2 ALIGN=CENTER><FONT COLOR="#0000FF"><FONT SIZE=+3>走 过 传 统 , 迈
向 O O </FONT></FONT></H2>

<P>
<HR WIDTH="100%"><A NAME="S0"></A><B><FONT COLOR="#0000FF"><FONT SIZE=+2>本
文 大 纲 </FONT></FONT></B></P>

<UL>
<TABLE WIDTH="80%" >
<TR VALIGN=TOP>
<TD VALIGN=TOP><FONT COLOR="#0000FF"><A HREF="#S1">从传统程式语言到 OOP</A></FONT></TD>

<TD><FONT COLOR="#0000FF"><A HREF="#S3">再探软体工程</A></FONT></TD>
</TR>

<TR>
<TD><B><FONT COLOR="#0000FF"><A HREF="#S2">软体开发生态的改变</A></FONT></B></TD>

<TD><B><FONT COLOR="#0000FF"><A HREF="#S4">通往 OO 之路</A></FONT></B></TD>
</TR>
</TABLE>

<P>近 年 来 , 经 过 报 章 杂 志 的 渲 染 、 广 告 、 及 报 导 ,「物 件
导 向」(Object Oriented, 以 下 简 称 OO) 已 不 再 是 个 陌 生 的 名
词 了 , 有 人 说 这 种 技 术 将 造 成 本 世 纪 末 的 软 体 革 命 , 市
面 上 诸 多 软 体 开 发 工 具 亦 无 不 宣 称 自 己 是 多 麼 的 OO, 让
人 感 觉 一 股 新 的 OO 文 化 已 经 侵 入 了 软 体 开 发 世 界 , 然 而
当 我 们 回 顾 软 体 发 展 的 历 史 , 却 可 发 现 这 门 技 术 并 不 是
遽 然「革 命」( Revolution) 而 产 出 的 , 而 是 逐 渐「进 化」(Evolution)
过 来 的 , 因 此 我 们 希 望 从 传 统 程 式 语 言 如 何 过 渡 到 OO 程
式 语 言 (以 下 简 称 OOP) 的 缘 由 谈 起 , 再 说 明 引 进 OO 技 术
之 後 软 体 开 发 生 态 的 改 变 , 期 能 对 踏 入 OO 技 术 的 朋 友 有
所 助 益 。 </P>
</UL>

<H2><A NAME="S1"></A><FONT COLOR="#0000FF">从 传 统 程 式 语 言 到 O O
P </FONT></H2>

<UL>
<P>传 统 是 什 麼 ? 我 想 回 答 这 个 问 题 , 程 式 语 言 要 比 文 化
简 单 多 了 , 传 统 程 式 语 言 简 要 地 说 是 由「变 数」及「副 程 式」所
组 成 的 , 其 中 变 数 就 像 是 制 作 软 体 的 基 本 元 件 , 而 副 程
式 则 是 将 变 数 元 件 贯 穿 起 来 的 程 序 , 所 以 传 统 程 式 的 撰
写 总 是 把 重 心 放 在 副 程 式 的 逻 辑 及 演 算 法 上 面 , PASCAL 之
父 Niklaus Wirth 有 一 本 1976 的 钜 著「Algorithm + Data Structures =
Programs」(演 算 法 + 资 料 结 构 = 程 式 ) , 书 名 即 能 表 达 当 时
的 这 种 现 象 。 </P>

<P>除 了 副 程 式 的 演 算 法 之 外 , Wirth 还 强 调 另 一 件 重 要 的
事 情 : 单 纯 的 资 料 (也 就 是 基 本 的 变 数 , 例 如 整 数 、 字
串 等 ) 已 无 法 满 足 程 式 撰 写 上 的 需 求 , 真 正 的 程 式 还 要
再 善 用「Data Structures」(资 料 结 构 , 也 就 是 自 订 的 复 合 式
资 料 型 态 ) 的 功 能 。 如 果 说 基 本 变 数 是 程 式 语 言 最 基 础
的 元 件 , 那 麼 资 料 结 构 就 是 使 用 者 可 以 自 订 的 高 阶 元 件
, 当 我 们 拥 有 越 多 高 阶 的 元 件 时 , 程 式 的 撰 写 就 越 容 易
。 </P>

<P>资 料 结 构 与 副 程 式 的 演 算 法 是「结 构 化 程 式 设 计」最 强
调 的 地 方 , 它 亦 曾 独 领 程 式 设 计 风 骚 一 段 时 日 , 但 在 软
体 趋 向 复 杂 的 情 况 下 , 却 已 渐 渐 不 能 满 足 开 发 上 的 需 求
。 </P>
</UL>

<P><B><FONT COLOR="#000080"><FONT SIZE=+1>从「资 料 结 构」到「软 体 I
C」</FONT></FONT></B></P>

<UL>
<P>其 实 我 在 前 面 不 应 该 说 资 料 结 构 是 一 种 元 件 , 为 什 麼
呢 ? 所 谓 元 件 大 抵 上 是 封 闭 型 的 东 西 , 更 明 白 地 说 我 们
看 不 到 元 件 内 的 组 成 元 素 , 而 当 我 们 想 用 它 时 , 必 须 先
知 道 这 个 元 件 提 供 了 哪 些 使 用「方 法」, 举 例 来 说 , 假 如
说 STACK(堆 叠) 是 一 个 元 件 , 它 应 该 长 得 像 : </P>
</UL>

<CENTER><P><A HREF="pl05-1.gif">图 -1 STACK 元 件 </A></P></CENTER>

<UL>
<P>上 图 的 STACK 提 供 两 个 操 作 它 的 方 法 ─ Push 及 Pop, 而 资
料 结 构 是 被「 封 装」起 来 的 , 使 用 者 只 能 透 过 Push 及 Pop 两
种 方 法 来 操 作 STACK, 至 於 想 知 道 STACK 的 资 料 结 构 , 甚 至
直 接 对 它 进 行 读 写 的 动 作 , 对 不 起 , 不 行 ! 这 就 好 像 硬
体 的 IC 一 样 , 其 内 部 线 路 被 实 实 在 在 地 封 起 来 , 想 使 用
它 得 先 查 一 查 cookbook(硬 体 的 使 用 说 明 书 ) , 瞭 解 使 用 的
方 法 才 行 。 </P>

<P>由 於 观 念 与 IC 颇 为 类 似 , 所 以 有 人 把 上 述 的 软 体 元 件
称 为「软 体 IC」 , 而 比 较 正 式 的 名 称 则 是「可 再 用 软 体 元 件」(Reusable
Software Components) , 不 过 最 通 俗 的 讲 法 还 是「物 件」(Object)
。 </P>

<P>言 归 正 传 , 让 我 们 来 看 为 什 麼 资 料 结 构 不 是 软 体 元 件
: 由 於 结 构 化 程 式 语 言 并 未 提 供 如 图 -1 的 封 装 能 力 , 所
以 整 个 STACK 的 资 料 结 构 对 使 用 者 来 说 是 开 放 的 , 也 就 是
说 , 即 使 STACK 已 经 具 备 Push 及 Pop 两 种 操 作 方 法 , 使 用 者
仍 可 能 直 接 操 作 这 个 资 料 结 构 。 示 意 图 如 下 : </P>
</UL>

<CENTER><P><A HREF="pl05-2.gif">图 -2 传 统 程 式 之 下 的 STACK</A></P></CENTER>

<UL>
<P>类 似 上 图 允 许 使 用 者 直 接 操 作 STACK 资 料 结 构 可 能 衍 生
以 下 的 不 良 後 果 , 例 如 : </P>

<UL>
<P>· 由 於 这 个 资 料 结 构 是 开 放 的 , 难 保 程 式 设 计 人 员 在
不 小 心 的 状 况 下 , 破 坏 了 这 个 资 料 结 构 的 内 容 , 徒 增 侦
错 的 困 难 。 </P>

<P>· 您 把 这 份 资 料 结 构 (连 同 Push 及 Pop 两 个 副 程 式 ) 提
供 给 同 事 做 为 软 体 元 件 , 而 这 位 仁 兄 因 有 特 殊 需 求 , 自
己 加 了 一 段 操 作 这 个 资 料 结 构 的 程 式 码 , 後 来 你 为 了 加
强 功 能 , 改 了 这 个 资 料 结 构 , 但 Push 及 Pop 副 程 式 的 原 型
(prototype)并 没 有 改 变 , 也 就 是 说 呼 叫 的 方 式 还 是 一 样 的
, 所 以 Push 及 Pop 的 呼 叫 者 并 不 需 要 修 改 , 但 是 这 位 仁 兄
却 享 受 不 到 这 个 好 处 , 因 为 他 直 接 操 作 了 这 个 资 料 结 构
。 (如 果 角 色 易 位 , 换 成 别 人 提 供 资 料 结 构 , 这 位 仁 兄
可 能 就 是 你 了 ) </P>
</UL>

<P>以 上 所 讨 论 的 是 直 接 操 作 资 料 结 构 的 缺 点 , 您 也 许 會
说 我 不 那 麼 作 就 好 了 , 没 错 ! 并 不 是 只 有 OOP 才 能 写 得 出
有 OO 概 念 的 程 式 , 只 要 观 念 正 确 , 程 式 管 理 得 宜 , 传 统
程 式 也 可 以 很 OO, 反 过 来 说 , 不 能 瞭 解 OO 的 精 义 , 也 可
能 只 是 用 了 新 的 语 言 写 出 原 本 的 烂 程 式 。 </P>
</UL>

<P><B><FONT COLOR="#000080"><FONT SIZE=+1>用「软 体 IC」看「副 程 式」</FONT></FONT></B></P>

<UL>
<P>传 统 程 式 语 言 的 另 一 个 重 心 是 副 程 式 , 相 信 大 家 都 已
耳 熟 能 详 , 在 还 没 引 进 软 体 IC 的 功 能 以 前 , 它 有 什 麼 缺
点 呢 ? 也 是 值 得 探 讨 的 问 题 。 </P>

<P>有 位 朋 友 告 诉 我 说 :「副 程 式 也 是 软 体 IC」, 以 下 是 他
的 推 论 : </P>

<UL>
<P>副 程 式 的 呼 叫 过 程 中 通 常 含 有 参 数 的 传 递 , 例 如 我 们
呼 叫 DrawLine() 副 程 式 画 一 直 线 : </P>

<UL>
<P>call DrawLine( x1, y1, x2, y2, color )</P>
</UL>
</UL>

<P>如 果 采 用 结 构 化 设 计 的 表 达 方 式 , 其 示 意 图 如 下 : </P>
</UL>

<CENTER><P><A HREF="pl05-3.gif">图 -3 呼 叫 DrawLine() 副 程 式 的 结 构
图 </A></P></CENTER>

<UL>
<P>就 上 图 来 看 , DrawLine() 副 程 式 含 有 五 个 参 数 , 其 功 用
就 像 是 IC 的 接 脚 一 样 是 用 来 互 通 讯 号 的 , 而 这 样 的 副 程
式 也 经 常 被 再 用 於 程 式 设 计 中 , 所 以 说 副 程 式 也 是 软 体
IC。 </P>

<P>这 是 一 个 有 趣 的 问 题 , 我 的 看 法 是 : 虽 然 说 DrawLine()
副 程 式 具 有 软 体 IC 的「可 再 用」特 性 , 但 并 不 表 示 所 有 的
副 程 式 都 具 有 此 一 特 性 , 一 段 程 式 能 否 再 用 最 重 要 的 条
件 是 : 当 我 们 再 用 这 段 程 式 码 时 , 是「直 接 再 用 」, 还 是
要 经 过 作 一 些「检 查」、「修 改」、「测 试」等 动 作 才 能 够 再 用
, 如 果 说 必 须 经 过 修 改 才 能 再 用 , 就 不 能 算 是「再 用」(reuse)
, 顶 多 只 能 算 是「回 收」(recycle) 。 </P>

<P>怎 麼 判 断 副 程 式 是 否 可 直 接 再 用 呢 ? 判 断 的 准 则 是 它
不 可 以 与 其 他 副 程 式 有 过 大 的 关 连 性 (coupling) , 而 本 身
的 凝 聚 力 (cohesion) 则 越 强 越 好 (注 ) , 一 般 来 说 , 市 售
开 发 工 具 所 提 供 的 程 式 库 其 副 程 式 都 具 有 此 特 性 , 所 以
算 是 可 再 用「程 式 码」, 但 是 这 些 程 式 库 之 所 以 能 够 做 到「低
关 连 性」、「高 凝 聚 力」, 并 不 是 这 些 程 式 库 特 别 厉 害 , 而
是 因 为 这 些 程 式 库 所 提 供 的 副 程 式 通 常 只 是 一 些「低 阶 、
明 确」的 功 能 , 但 自 己 开 发 的 程 式 通 常 没 那 麼 幸 运 , 为 了
解 决 特 殊 的 需 ― , 往 往 必 须 藉 助 好 几 个 副 程 式 才 能 够 解
决 某 一 个 单 一 的 问 题 , 所 以 副 程 式 之 间 的 关 连 性 自 然 會
变 大 , 也 就 形 成 了 再 用 上 的 困 难 。 </P>

<P>有 关「关 连 性」及「凝 聚 力」的 说 明 请 参 考 <A HREF="pl003.htm">「为
您 的 程 式 作 体 检」</A>, 其 中 还 讨 论 副 程 式 撰 写 不 良 时 所
出 现 的 缺 点 。 </P>
</UL>

<H2><A NAME="S2"></A><B><FONT COLOR="#0000FF">软 体 开 发 生 态 的 改 变
</FONT></B></H2>

<UL>
<P>综 观 前 面 的 讨 论 , 我 们 发 现 传 统 程 式 语 言 的 封 装 能 力
仅 局 限 於「副 程 式」 的 部 份 , 而 副 程 式 又 只 能 封 装 功 能 低
阶 且 明 确 的 程 式 码 , 无 法 满 足 较 复 杂 的 需 求 , 因 此 大 部
份 的 时 候 程 式 设 计 师 (如 图 -4 之 虚 线 上 方 ) 只 能 利 用 少
得 可 怜 的 基 本 变 数 , 以 及 有 限 的 程 式 库 一 行 一 行 地「编 写」程
式 , 在 这 传 统 的 软 体 发 展 生 态 中 , 与 程 式 设 计 师 有 密 切
关 系 的 依 序 是「程 式 语 言」 、「编 译 器 供 应 商」(提 供 编 译 程
式 及 基 本 的 副 程 式 库 ) 、 少 数 的「副 程 式 供 应 商」(提 供 一
些 特 殊 的 副 程 式 , 但 不 多 ) 。 </P>
</UL>

<CENTER><P><A HREF="pl05-4.gif">图 -4 从 传 统 程 式 语 言 到 O O P
的「软 体 开 发 生 态」的 改 变 </A></P></CENTER>

<UL>
<P>到 了 OOP 以 後 呢 ? 编 译 器 除 了 具 备「物 件 封 装」的 能 力 可
供 程 式 设 计 师 自 行 制 作 物 件 之 外 , 还 會 提 供 基 本 的 物 件
库 , 例 如 Microsoft C++ 的 MFC(Microsoft Foundation Class) , 而 由
於 物 件 封 装 能 力 的 提 升 , 许 多 程 式 开 发 的 成 果 都 能 够 制
作 成 物 件 (软 体 IC) , 因 此 物 件 的 供 应 商 也 會 越 来 越 多 ,
程 式 设 计 师 的 选 择 自 然 增 加 , 可 以 不 必 再 自 行 研 发 所 有
的 物 件 , 或 从 基 本 变 数 及 流 程 控 制 指 令 开 始 编 写 程 式 码
, 所 以 主 要 的 开 发 工 作 就 变 成 了 把 这 些 物 件「建 构」起 来
, 以 完 成 软 体 。 </P>

<P>从 传 统 程 式 进 化 到 OOP, 最 大 的 改 变 是 物 件 供 应 商 的 增
加 , 而 且 这 个 已 经 是 事 实 , 例 如 我 们 经 常 可 以 在 杂 志 看
到 贩 卖 ActiveX 的 广 告 , 而 这 些 物 件 包 含 文 书 处 理 、 图 形
影 像 、 多 媒 体 展 示 、 资 料 库 维 护 、 报 表 产 生 器 、 档 案 压
缩 、 数 據 通 讯 、 网 路 通 讯 … , 几 乎 应 有 尽 有 , 这 足 以 告
诉 我 们 以 物 件 来 建 构 程 式 的 时 代 已 经 来 临 了 。 </P>
</UL>

<H2><A NAME="S3"></A><FONT COLOR="#0000FF">再 探 软 体 工 程 </FONT></H2>

<UL>
<P>如 何 在 有 限 的 人 力 、 时 间 、 及 资 源 下 开 发 出 更 好 的 软
体 , 以 及 如 何 维 护 既 有 的 软 体 , 一 直 是 软 体 开 发 中 十 分
重 要 的 课 题 , 然 而 这 并 不 是 一 个 容 易 应 付 的 课 题 , 从 过
去 的 案 例 中 我 们 可 以 发 现 软 体 普 遍 存 在 著 : </P>

<UL>
<P>·<B><FONT COLOR="#800000"> 系 统 不 稳 定 </FONT></B>: 例 如 系 统

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -