VFP中类和对象的应用

张 世 超

---- 由 于Visual FoxPro(VFP) 具 有 性 能 好、 速 度 快、 工 具 丰 富、 界 面 友 好 等 特 点, 使 得VFP 倍 受 国 内 用 户 青 睐。 本 文 通 过 介 绍VFP 中 类、 对 象 的 概 念 以 及 应 用 方 法, 使 读 者 体 会 到VFP 中 对 象 的 概 念 在 开 发 工 作 中 的 重 要 性。

一、VFP 中 类、 对 象 的 概 念

---- 面 向 过 程 编 程 是 把 数 据 和 算 法 作 为 两 个 分 开 的 实 体, 与 其 不 同 的 是, 面 向 对 象 编 程 在 执 行 数 据 上 的 操 纵 时 强 调 的 是 数 据 的 完 整 性。 面 向 过 程 编 程 使 问 题 适 合 于 编 程 语 言, 而 面 向 对 象 编 程 则 通 过 类, 试 图 使 程 序 环 境 同 问 题 的 结 构 相 配 合。

---- VFP 面 向 对 象 编 程 不 是 着 重 于 从 程 序 开 始 到 程 序 结 束 的 代 码 流 程, 而 是 侧 重 于 对 象 和 事 件。 在VFP 中 对 象 是 基 本 构 造 块, 对 象 模 块 是 自 包 容 的 程 序 元 素, 既 有 只 能 由 对 象 访 问 的 内 部 专 用 功 能, 又 具 有 由 程 序 访 问 的 外 部 共 用 功 能。

---- VFP 通 过 提 供 一 种 简 便 的 方 式 来 建 立 可 重 复 使 用 的 类, 类 是 用 来 作 为 建 立 和 扩 展 对 象 的 模 块。 通 过 类, 面 向 对 象 使 程 序 变 得 清 晰、 可 靠 和 易 于 维 护。 类 定 义 了 对 象 所 有 的 属 性、 事 件 和 方 法, 从 而 决 定 了 对 象 的 外 观 及 其 动 作。 在VFP 中 类 是 抽 象 设 计 图, 它 包 括 了 实 际 对 象 的 属 性 和 方 法, 这 些 现 成 的 设 计 图 简 化 了 对 象 的 创 建, 因 为 每 个 新 的 对 象 都 自 动 继 承 在 基 类 中 所 具 有 的 整 个 定 义。

---- 在VFP 中 类 与 对 象 之 间 的 重 要 区 别 在 于: 类 是 抽 象 的 设 计 图 和 定 义, 而 对 象 是 由 类 产 生 的, 是 类 定 义 的 实 例。 因 此, 对 象 也 被 称 为 类 的 实 例, 通 过 类 的 实 例 来 建 立 对 象。 在VFP 中 有 两 种 类: 容 器 类 和 控 件 类。

---- 容 器 类 对 象 容 器 类 对 象 是 从 容 器 类 分 离 出 来 的 一 种 特 殊 类 型 的 对 象, 这 些 对 象 可 以 包 含 其 他 容 器 对 象( 例 如 表 单 容 器 对 象 可 包 含 网 络、 页 框 等 容 器 对 象), 同 时 也 可 包 含 控 件 对 象, 正 因 为 如 此, 容 器 对 象 能 够 构 成 灵 活、 实 用 的 对 象。

---- 控 件 类 对 象 控 件 对 象 是 从 控 件 类 分 离 出 来 的 对 象, 但 与 容 器 对 象 不 同 的 是 构 成 控 件 的 元 素 不 能 被 单 个 访 问 或 修 改。 也 就 是 说 控 件 对 象 比 容 器 对 象 更 密 封。 因 此, 控 件 对 象 不 如 容 器 对 象 灵 活, 控 件 对 象 是 用 户 与 应 用 系 统 交 互 作 用 的 主 要 方 式。 通 过 在VFP 表 单 上 移 动, 拖 放 或 单 击 适 当 控 件, 用 户 便 可 完 成 数 据 录 入、 修 改、 添 加 和 删 除 等 数 据 操 作, 并 执 行 嵌 入 在 控 件 对 象 中 的 事 件 程 序。

二、VFP 中 对 象 的 使 用

---- 使 用 过VFP 的 人 都 知 道, 通 过VFP 表 单 设 计 向 导 产 生 的 表 单 中 自 动 生 成 一 个 容 器 类 对 象buttonset1.vcr。 该 对 象 是 集 数 据 库 记 录 指 针 移 动、 数 据 库 数 据 操 作( 编 辑、 添 加、 删 除 等) 为 一 体 的 容 器 类 对 象, 使 用 起 来 极 为 方 便。 但 在 开 发 实 际 应 用 系 统 时, 用 户 往 往 会 提 出: 在 使 用 此 表 单 时, 某 些 人 对 表 单 中 网 格 内 的 数 据 只 能 浏 览, 不 能 做 任 何 数 据 修 改、 添 加、 删 除; 另 外 一 类 人 可 以 做 数 据 浏 览、 添 加 操 作 等 其 他 要 求。 针 对 这 样 一 系 列 的 用 户 要 求, 我 们 可 对VFP 提 供 的 容 器 类 对 象(buttonset1.vcr) 仅 仅 修 改 它 所 包 含 的 控 制 对 象( 编 辑、 添 加、 删 除) 的 属 性 即 可 实 现。

---- 方 法 一 静 态 修 改 控 制 类 对 象 属 性

---- 例 如: 只 允 许 使 用 者 浏 览 数 据 库 的 数 据, 而 不 允 许 进 行 任 何 数 据 操 纵。 具 体 操 作 如 下:

---- 1. 打 开 要 修 改 的 表 单;

---- 2. 选 择buttonset1.vcr 对 象;

---- 3. 分 别 修 改buttonset1 容 器 对 象 所 包 含 的 控 制 对 象( 编 辑、 添 加、 删 除) 的Enable 属 性 为.F.。

---- 通 过 以 上 简 单 操 作 便 可 实 现 上 述 要 求。 但 静 态 修 改 控 制 对 象 属 性 的 方 法 存 在 的 不 足 之 处 为, 当 用 户 对 此 表 单 有 多 种 要 求 时, 应 用 系 统 必 须 生 成 多 个 相 同 表 单, 而 每 个 表 单 对 应 一 种 要 求。 因 此, 提 出 以 下 动 态 修 改 控 制 类 对 象 属 性 方 法, 此 方 法 既 能 满 足 用 户 提 出 的 多 种 要 求, 又 仅 生 成 一 个 表 单。

---- 方 法 二 动 态 修 改 控 制 类 对 象 属 性

---- 例 如:USER1 只 能 浏 览 数 据 库 的 数 据,USER2 只 能 浏 览 和 编 辑 数 据 库 的 数 据,USER3 只 能 浏 览 和 删 除 数 据 库 的 数 据。 具 体 实 现 方 法 如 下:

---- 1. 打 开 要 修 改 的 表 单;

---- 2. 编 写 此 表 单 的Init 事 件 程 序 如 下:



    DO CASE

      CASE USERNAME =“USER1”

        THIS.BUTTONSET1.cmdAdd.ENABLED=.F.

        THIS.BUTTONSET1.cmdEdit.ENABLED=.F.          

        THIS.BUTTONSET1.cmdDelete.ENABLED=.F.

      CASE USERNAME=“USER2”

        THIS.BUTTONSET1.cmdAdd.ENABLED=.F.

        THIS.BUTTONSET1.cmdDelete.ENABLED=.F.

      CASE USERNAME=“USER3”

        THIS.BUTTONSET1.cmdAdd.ENABLED=.F.

      THIS.BUTTONSET1.cmdEdit.ENABLED=.F.

     ENDCASE

---- 通 过 以 上 对VFP 的 对 象 概 念 及 应 用 技 巧 的 介 绍, 不 难 看 出 只 要 充 分 理 解VFP 对 象 的 内 涵, 就 能 方 便 地 实 现 自 己 所 要 完 成 的 设 计 任 务, 且 做 到 事 半 功 倍。 以 上 方 法 对 不 太 熟 悉VFP 编 程 的 开 发 者 来 说 是 十 分 实 用 的。

---- ( 作 者 地 址: 武 汉 市 华 中 理 工 大 学 西 二 区109 号401 室, 430074;) 

back.gif (1185 字节)