Database 版 (精华区)
发信人: wodeji (西西), 信区: Database
标 题: [转载] PowerBuilder 开 发 系 列 谈 (3)
发信站: 紫 丁 香 (Tue Sep 29 17:49:38 1998), 站内信件
【 以下文字转载自 Programming 讨论区 】
【 原文由 two 所发表 】
---- 在PowerBuilder 的 应 用 开 发 中, 运 用 面 向 对 象 技 术 不 是 必 须 的, 但 是 对 于
一 个 大 型 复 杂 应 用 系 统 的 开 发, 如 果 采 用 了 面 向 对 象 技 术, 则 开 发 效 率
会 大 大 提 高。
---- 用PowerBuilder 开 发 的 好 处 是, 即 使 您 不 懂 得 什 么 是 面 向 对 象 技 术, 您 也
可 能 会 下 意 识 地 用 到 面 向 对 象 技 术 的 一 些 特 性, 但 是 如 果 您 对 这 一 技 术
有 了 充 分 的 了 解, 那 对 您 所 设 计 程 序 的 可 重 用 性, 可 维 护 性 和 其 他 各 方
面 的 质 量 都 会 有 大 幅 度 提 高。
----
PowerBuilder 的 对 象
----PowerBuilder 对 象 有 三 个 部 分 元 素: 属 性、 函 数 和 事 件。
----(1) 属 性: 也 就 是 数 据。 包 括 系 统 属 性 和 用 户 定 义 属 性 两 类, 描 述 该 对
象 的 各 种 特 性。 如 在 窗 口 对 象 中 的 系 统 属 性 包 括 标 题、 高 度、 宽 度 等,
用 户 定 义 的 属 性 可 以 是 实 例 变 量 或 共 享 变 量, 对 这 种 属 性 的 访 问 同 系 统
属 性 相 同, 只 是 在 封 装 性 上 有 所 不 同。
----(2) 事 件:PowerBuilder 中 的 事 件 与Windows 的 事 件 存 在 着 映 射 关 系。 当 用
户 的 操 作 或 系 统 本 身 产 生 了Windows 的 标 准 事 件, 就 转 化 成PowerBuilder 中
的 事 件。 例 如 命 令 按 钮 有 一 个 叫 Clicked 事 件, 当 用 户 按 按 钮 时 触 发, 操 作
系 统 首 先 检 测 到 鼠 标 被 点 击, 并 把Clicked 这 一 消 息 转 给 该 按 钮,PowerBuilder
运 行 时 的 工 作 引 擎 翻 译 了 这 一 事 件, 并 执 行 适 当 的PowerScript 语
句。PowerBuilder 中 大 部 分 的 事 件 都 是 可 以 映 射 成 由 用 户 激 发 的Windows 事
件。 另 一 类 事 件 是 用 户 定 义 事 件, 这 种 事 件 是 用 户 声 明 并 可 以 在 任 何 时
刻 由 用 户 触 发 的,Power-Builder 中 保 留 了75 个 用 户 事 件 可 由 程 序 员 使 用。
----(3) 函 数: 用 户 通 过 函 数 来 使 对 象 完 成 某 些 操 作。Pow-erSoft 公 司 建 议 用
户 通 过 调 用 对 象 事 件 和 函 数 来 修 改 对 象 而 不 要 直 接 修 改 对 象 属 性, 以 满
足 对 象 封 装 的 要 求, 例 如 采 用Window. hide() 而 不 要 用Window.visi-ble=false 来 使
窗 口 不 可 见。
----
PowerBuilder 面 向 对 象 的 特 性
---- 提 到 一 门 语 言 的 面 向 对 象 特 性, 它 应 当 具 有 继 承 性、 多 态 性 和 封 装
性, 如 缺 少 其 中 的 一 个 则 只 能 称 其 为 基 于 对 象 的 系 统, 而 不 是 面 向 对 象
的 系 统, 而PowerBuilder 则 很 好 地 具 备 了 全 部 三 个 特 性。
---- · 继 承:
----PowerBuilder 中, 窗 口、 菜 单 和 用 户 对 象 是 可 以 继 承 的, 而 其 他 对 象 则 都
不 能。 当 您 继 承 了 一 个 对 象, 那 您 得 到 的 子 类 将 具 有 父 类 的 属 性、 实 例
变 量、 共 享 变 量、 控 件、 用 户 自 定 义 事 件、 对 象 级 函 数、 事 件 和 代
码(script)。 也 就 是 说 当 您 继 承 了 一 个 类, 您 几 乎 得 到 了 这 个 类 的 全 部, 不
过 有 一 点 值 得 注 意, 您 不 能 在 子 类 中 删 除 任 何 一 个 继 承 到 的 特 性。
---- 在 继 承 了 祖 先 类 后, 您 可 以 在 子 类 中 扩 展 或 覆 盖 祖 先 的 元 素。 例 如
代 码, 在PowerBuilde r 中 缺 省 的 是 采 用 扩 展 方 式, 先 执 行 继 承 到 的 祖 先 代 码,
后 执 行 子 类 的 扩 展 代 码。 您 也 可 以 选 择 菜 单Compiler|Override Ancestor Script
选 项, 只 执 行 子 类 的 代 码, 并 可 在 代 码 中 的 任 意 位 置 调 动 祖 先 代 码
如CALL w_l ∷open。
---- 重 载 函 数 是 面 向 对 象 程 序 设 计 的 重 要 特 性, 即 同 一 函 数 名 却 有 着 不
同 的 参 数 和 返 回 值。 在 运 行 时, 系 统 自 动 寻 找 执 行 参 数 相 匹 配 的 那 个 函
数, 例 如 我 们 常 用 的MessageBox() 这 个 函 数 就 有12 个 不 同 参 数 的 重 载 函
数。 遗 憾 的 是, 对Power-Builder 我 们 不 能 在 同 一 个 继 承 对 象 中 定 义2 个 不 同
参 数 的 重 载 函 数, 只 能 在 后 继 的 类 中 定 义 重 载 函 数, 这 使 我 们 对 重 载 函
数 的 定 义 带 来 了 很 大 的 不 便, 这 不 能 不 说 是PowerBuilder 的 缺 陷。( 不 过 在
即 将 发 布 的PowerBuilder5.0 中, 正 是 支 持 了 函 数 重 载 这 一 特 性。)
---- 对 于 对 象 的 继 承,PowerBuilder 中 所 有 对 象 都 有 其 共 同 的 基 类PowerObject,
从 这 一 个 基 类 下 面 分 成 继 承 类Graph-icObject 和NonVisualObject 等。 它 们 的 继
承 关 系 和 扩 展 函 数 及 属 性 如 下 表:
---- · 多 态 性:
---- 在PowerBuilder 中 有 大 量 的 多 态 函 数 如print()、TriggerEvent() 等, 在 运 行 过 程
中, 您 只 需 要 指 出 对 象 和 函 数 名 即 可。 在 有 些 函 数 中, 即 使 不 知 道 对 象
类, 也 可 以 用Class Name() 函 数 得 到 对 象 类, 或 得 到 实 例 名, 将 对 象 名 作 为 函
数 参 数 调 用 该 函 数。
---- · 封 装 性:
---- 封 装 的 目 的 是 为 了 实 现 数 据 隐 藏 和 数 据 保 护, 封 装 的 目 标 是 为 对 象
提 供 一 个 对 外 操 作 的 接 口, 使 其 他 对 象 通 过 函 数 来 访 问, 而 不 允 许 直 接
操 纵 对 象 的 属 性。 在PowerBuilder 中 有 三 种 访 问 类 型Public、Protect、Private, 这
三 种 访 问 控 制 类 型 可 以 用 在 对 象 的 变 量 和 函 数 上, 缺 省 的 实 例 变 量 和 对
象 函 数 都 是public 类 型 的。 为 了 保 护 数 据, 应 尽 可 能 多 地 使 用private 和p rotect
类 型, 前 者 只 允 许 对 象 内 部 的 元 素 来 访 问, 后 者 可 以 接 受 对 象 内 部 和 继
承 类 的 元 素 访 问 。
----
PowerBuilder 面 向 对 象 程 序 设 计 的 过 程
---- 事 实 上 用 户 在 运 用Power-Builder 进 行 程 序 设 计 的 一 开 始, 就 已 经 开 始 进
行 对 象 类 的 设 计 : 例 如 在 建 立 窗 口 时 可 以 用 窗 口 画 笔(painter) 建 立 一 个 新
窗 口, 命 名 为w_emp。 建 立 的 窗 口 就 是 从PowerBuilder 的 窗 口 对 象 继 承 下 来
的, 所 以 窗 口 会 自 动 具 备 一 些 属 性, 例 如X 和Y 的 坐 标、 高 度、 宽 度、 窗 口
类 型、 标 题 等。 当 用 窗 口 画 笔 建 立 窗 口 时, 您 给 这 些 属 性 赋 了 值, 你 还 可
以 增 加 窗 口 的 函 数 和 事 件。 当 窗 口 被 保 存 时, 你 就 建 立 了 一 个 新 的 窗 口
继 承 类, 称 为:w_emp。 输 出 对 象 的 句 法 显 示 的 部 分 程 序 如 下:
----global type w_emp from Window
----int X=200
----int Y=233
----int Width=2405
----int Height=1285
----boolean TitleBar=true
----string Title="Employee Mainte-nance"
----string MenuName="m_emp"
----long BackColor=12632256
----boolean ControlMenu=true
----boolean MinBox=true
----boolean MaxBox=true
----boolean Resizable=true
----.
----.
----.
----end type
----global w_emp w_emp
---- 请 注 意 系 统 在 这 里 做 了 什 么: 首 先 定 义 了w_emp 窗 口 类 是 从window 类 继
承 而 来, 接 着 定 义 这 一 对 象 类 的 各 属 性 值, 在 句 法 的 最 后 一 行 声 明 了 一
个 全 局 变 量, 变 量 的 类 型( 对 象 类) 是w_e mp, 变 量 名( 对 象 实 例) 也 是w_emp。
也 就 是 说 在 您 建 立 了w_emp 这 一 窗 口 对 象 后, 系 统 就 具 有 了 w_emp 这 一 对
象 类 和w_emp 这 一 全 局 变 量。 这 个 变 量 是 引 用 变 量, 也 就 是 在 有 些 语 言
称 之 为 指 针 的 变 量 类 型。 引 用 变 量 并 不 真 正 含 有 窗 口 实 例 的 属 性, 而 是
包 含 了 一 个 位 置 或 是 内 存 中 的 一 个 地 址, 在 那 儿 你 可 以 找 到 实 例 的 实 际
属 性 和 程 序。 但 在 应 用 的 开 始 时 这 一 指 针 为 空, 因 为 在 内 存 中 并 没 有 一
个 这 样 的 窗 口 实 例。 当 系 统 执 行 了Open(w_emp) 后, 系 统 在 内 存 中 复 制 了
一 份w_emp 对 象 类 的 拷 贝 或 实 例,w_emp 这 一 参 照 变 量 指 向 了 这 一 地 址。
由 于 窗 口 对 象 的visibl e 等 属 性 都 是Public 类 型, 所 以 继 承 类 也 都 具 有 了 这 些
属 性。
--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.97.236.132]
--
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: whs.hit.edu.cn]
--
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: cadcam.hit.edu.c]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.371毫秒