1、中 级 25 LVClas 0 引 言 什 么 是 LVClas 即 是 LabVIEW中 面 向 对 象 的 编 程 面 向 对 象 编 程 Object Oriented Programing OP 面 向 对 象 程 序 设 计 是 一 种 计算 机 编 程 架 构 OP 的 一 条 基 本 原 则 是 计 算 机 程 序 是 由 单 个 能 够 起 到 子 程 序 作 用 的 单 元 或 对 象 组 合 而 成 OP 达 到 了 软 件 工 程 的 三 个 主 要 目 标 重 用 性 灵 活 性 和 扩 展 性 为 了 实 现 整 体 运算 每 个 对 象 都 能 够 接 收 信 息
2、处 理 数 据 和 向 其 它 对 象 发 送 信 息 OP 主 要 有 以 下 的 概 念 和 组 件 组 件 数 据 和 功 能 一 起 在 运 行 着 的 计 算 机 程 序 中 形 成 的 单 元 组 件 在 OP计 算 机 程 序 中是 模 块 和 结 构 化 的 基 础 抽 象 性 程 序 有 能 力 忽 略 正 在 处 理 中 信 息 的 某 些 方 面 即 对 信 息 主 要 方 面 关 注 的 能 力 封 装 也 叫 做 信 息 封 装 确 保 组 件 不 会 以 不 可 预 期 的 方 式 改 变 其 它 组 件 的 内 部 状 态 只 有 在 那 些 提 供 了 内 部
3、状 态 改 变 方 法 的 组 件 中 才 可 以 访 问 其 内 部 状 态 每 类 组 件 都 提 供 了 一 个 与 其它 组 件 联 系 的 接 口 并 规 定 了 其 它 组 件 进 行 调 用 的 方 法 多 态 性 组 件 的 引 用 和 类 集 会 涉 及 到 其 它 许 多 不 同 类 型 的 组 件 而 且 引 用 组 件 所 产 生 的 结果 得 依 据 实 际 调 用 的 类 型 继 承 性 允 许 在 现 存 的 组 件 基 础 上 创 建 子 类 组 件 这 统 一 并 增 强 了 多 态 性 和 封 装 性 典 型地 来 说 就 是 用 类 来 对 组 件 进 行
4、 分 组 而 且 还 可 以 定 义 新 类 为 现 存 的 类 的 扩 展 这 样 就 可 以 将 类 组 织 成 树 形 或 网 状 结 构 这 体 现 了 动 作 的 通 用 性 收 看 视 频 LabVIEW网 络 讲 坛 之 名 家 偶 得 面 向 对 象 的 编 程 上 下 集 htp htp 1 示 例 在 LabVIEW Project中 新 建 一 个 lvclas 命 名 为 Shape lvcals 作 为 父 类 定 义 其 数 据 结 构 如 图 1所 示 可 以 看 出 这 是 一 个 自 定 义 类 型 的 簇 里 边 存 放 了 这 个 类 中 可 以 操 作
5、的 数 据 结构 图 1 Shape ctl 数 据 类 型 注 意 与 C 语 言 不 同 之 处 是 LabVIEW 类 中 数 据 只 能 是 私 有 的 定 义 好 数 据 结 构 之 后 我 们 就 新 可 以 建 如 下 多 种 类 型 的 VI进 行 编 程 了 l VI 就 是 指 创 建 一 个 普 通 的 VI l Virtual Folder 是 文 件 夹 如 果 类 中 的 方 法 很 多 可 以 把 它 们 归 类 到 不 同 的 文 件 夹 中 便 于 管 理 l VI from Dynamic Dispatch Template 所 创 建 出 来 的 VI类
6、似 于 C 语 言 中 的 虚 函 数 应 用 程 序 再 调 用 这 个 VI 的 时 候 可 能 实 际 执 行 的 是 某 个 子 类 中 的 同 名 方 法 l VI from Static Dispatch Template 所 创 建 的 VI 比 普 通 VI 多 了 类 方 法 最 常 用 的 代 码 框 架 程 序 员 可 以 省 去 一 些 自 己 画 错 误 处 理 选 择 框 的 时 间 它 与 VI from Dynamic Dispatch Template 唯 一 的 区 别 在 于 类 输 入 输 出 接 线 端 子 不 是 动 态 调 度 的 l VI for
7、 Data Member Aces 因 为 类 的 数 据 全 部 是 私 有 的 所 以 需 要 借 助 公 有 VI来 访 问 他 们 这 个 选 项 可 以 帮 你 快 速 建 立 读 写 类 中 数 据 的 VI l VI for Overide 这 个 选 项 是 专 门 给 子 类 用 的 用 来 创 建 覆 盖 父 类 方 法 的 VI l Control 创 建 用 户 自 定 义 控 件 这 一 条 与 类 的 概 念 不 相 关 仅 为 了 方 便 用 户 例 如 选 择 New VI for Data Member Aces 弹 出 对 话 框 从 中 选 择 数 据 控
8、 件 进 行 读 写 操 作 在 类 的 类 的 属 性 面 板 中 可 以 设 置 类 中 每 个 VI 是 公 有 的 还 是 私 有 的 这 与 工 程 库 中 VI 的 设 置 是 类 似 的 示 例 中 定 义 好 的 Shape lvclas如 图 2所 示 图 2 Shape lvclas VI结 构 随 后 就 是 类 的 继 承 了 我 们 再 新 建 2个 类 Circle lvclas和 Rectange lvclas 它 们 都 继承 了 Shape lvclas的 属 性 和 方 法 并 同 时 拥 有 自 己 新 的 属 性 和 方 法 对 于 Circle lvc
9、las 它 的 属 性 是 设 置 半 径 改 写 后 的 Draw Shape vi画 出 的 是 圆 对 于 Rectange lvclas 它 的 属 性 是设 置 高 和 宽 改 写 后 的 Draw Shape vi画 出 的 是 矩 形 如 图 3所 示 可 以 看 出 类 的 继 承 简 化 了 子 类 的 编 程 并 且 实 现 相 似 子 类 的 功 能 模 块 的 重 用 这 正 是 面 向 对 象 编 程 的 精 华 所 在 图 3 类 的 继 承 最 后 再 介 绍 一 下 类 的 多 态 性 打 开 Dynamic Shape vi 在 这 个 VI中 实 现 的 功
10、 能 是 输 入 设 置 好参 数 的 2个 子 类 LabVIEW自 定 调 用 同 一 个 多 态 的 方 法 进 行 操 作 程 序 框 图 如 图 4所 示 图 4 Dynamic Shape vi 可 以 看 出 在 画 圆 和 矩 形 时 设 置 属 性 的 VI都 是 使 用 父 类 的 即 2个 子 类 的 相 同 属 性 可 以 使用 一 套 VI进 行 设 置 不 同 的 属 性 如 圆 的 半 径 和 矩 形 的 宽 高 是 使 用 子 类 的 VI进 行 设 置 的 而 在 绘 制 图 形 时 即 使 用 2个 子 类 都 有 但 各 不 相 同 的 Draw Shap
11、e方 法 这 里 使 用 的 是 父 类 的 方法 双 击 该 VI 弹 出 的 窗 口 如 图 5所 示 图 5 类 的 多 态 性 可 以 看 出 从 中 可 以 选 取 不 同 子 类 的 相 同 方 法 在 图 4的 For循 环 中 LabVIEW会 自 动 根据 输 入 的 类 选 择 适 应 的 方 法 进 行 操 作 这 个 就 是 类 的 多 态 性 2 作 业 采 用 面 向 对 象 的 方 法 任 意 编 程 可 以 参 考 本 课 程 中 的 例 程 要 求 父 类 的 数 据 结 构 和 功 能 都 尽 量 具 有 通 用 性 至 少 有 2个 子 类 继 承 了 父 类 的 属 性 和 方 法 并 拥 有 自 己 的 属 性 以 及 改 写 父 类 的 方 法 VI 提 供 类 的 项 目 文 件 并 编 写 一 个 演 示 VI调 用 类 函 数 实 现 类 的 多 态 功 能