Database 版 (精华区)
发信人: starstar (今天打老虎), 信区: Database
标 题: PowerBuilder面向对象的程序设计
发信站: 哈工大紫丁香 (2001年07月23日01:54:01 星期一), 站内信件
在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 和NonVisua
lObject 等。 它 们 的 继 承 关 系 和 扩 展 函 数 及 属 性 如 下 表:
---- · 多 态 性:
---- 在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: ftcl.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.905毫秒