作 者:程 虎 (中国科学院软件所)
--------------------------------------------------------------------------------
一、 序 言
Java 自1995 年5 月 问 世, 立 即 成 为 计 算 界 最 受 关 注 的 焦 点 之 一, 它 实 现 了 计 算 机 界 多 年 的 梦 想, 即" 写 一 次 程 序, 到 处 能 运 行"。 虽 然 这 一 梦 想 还 未100% 实 现, 但 在 国 际 互 联 网 上,Java 小 程 序(Java Applet) 的 无 处 不 在 及 其 诱 人 的" 魅 力", 无 疑 使 计 算 机 界 看 到 了 希 望 的 曙 光。
国 外 的 计 算 机 厂 商 瞄 准 这 一 契 机, 纷 纷 转 向Java, 争 相 推 出 自 己 的 相 应 产 品。 国 内 的 厂 商 及 科 研 机 构 也 不 甘 落 后, 积 极 开 展Java 的 应 用 开 发 与 研 究 工 作。
目 前 市 场 上 的Java 开 发 工 具 功 能 虽 然 齐 全, 但 都 不 具 备 中 文 化 工 具, 国 内 用 户 使 用 不 便。 为 此, 我 们 立 足 于 国 内, 本 着 简 单、 实 用 的 原 则 开 发 出 一 些 适 合 国 内 用 户 急 需 的Java 实 用 程 序, 总 称 为Java 伴 侣(Java-Mate, 简 称J-M)。"Java 伴 侣" 是 国 家" 九 五" 科 技 攻 关 项 目" 国 产 开 放 式 系 统 软 件 平 台"(COSA) 的 专 题 之 一。
Java 伴 侣 全 部 用Java 语 言 编 写, 其 部 分 软 件 已 经 过 了 用 户 的 跨 平 台 试 用。 该 软 件 的 界 面 全 部 为 中 文 界 面, 有 的 提 供 中、 英 文 两 个 版 本,Java 伴 侣 可 指 导 用 户 编 程, 提 供 中 文 编 译、 解 释 信 息, 自 动 实 现 与C/C++ 函 数 库 的 接 口 及 图 形 用 户 界 面, 扩 充 了Java 类 库。 目 前, 市 场 上 还 未 有 同 类 产 品。
现 阶 段Java 伴 侣 包 括 下 列 四 个 软 件:
(1) 中 文 化Java 编 译 器 和 解 释 器
(2)Java 语 言 结 构 化 编 辑 器
(3)Java 语 言 与C/C++ 语 言 接 口
(4)Java 图 形 界 面 可 视 化 自 动 编 程 器
二、 中 文 化Java 编 译 器 和 解 释 器
该 工 具 的 目 标 是 使Java 能 够 正 确 处 理 汉 字。 主 要 有 以 下 功 能:
(1) 该 软 件 提 供 了 一 个 较 简 单 的 文 本 编 辑 器, 能 够 实 现 含 有 汉 字 的Java 源 程 序 的 编 辑, 并 具 有 新 建、 打 开、 存 储Java 源 文 件 的 功 能。
(2) 能 够 编 译、 运 行Java 源 程 序。
(3) 能 够 正 确 处 理 含 有 汉 字 字 符 串、 汉 字 注 释 的Java 源 程 序, 以 及 汉 字 字 符 串 的 输 入、 输 出。
(4) 编 译 源 程 序 时 给 出 的 编 译 信 息 可 采 用 英 文 或 中 文 的 显 示 形 式, 两 种 显 示 形 式 可 通 过 按 钮 切 换。 给 出 编 译 出 错 信 息 时, 同 时 给 出 了 出 错 的 行 号 和 出 错 位 置。
(5) 解 释 字 节 码 文 件 时 给 出 的 解 释 信 息 可 采 用 英 文 或 中 文 的 显 示 形 式, 两 种 显 示 形 式 可 通 过 按 钮 切 换。
(6) 提 供 了 使 用 说 明, 帮 助 用 户 掌 握 软 件 的 使 用。 还 给 出 了 关 于 软 件 版 本 的 信 息。
编 译 器 编 译 信 息 的 汉 化, 采 用 替 换 的 方 法 完 成, 即 将 原 来 编 译 器 中 的 西 文 信 息, 通 过 正 确 的 翻 译, 用 汉 语 代 替。 为 进 一 步 增 强 功 能, 将 此 软 件 设 计 成 中、 英 文 编 译 信 息 可 切 换 的 方 式, 用 户 可 以 根 据 自 己 的 需 要 在 编 译 信 息 的 中 文 形 式 和 英 文 形 式 之 间 进 行 切 换。
解 释 器 解 释 信 息 的 汉 化, 采 用 转 换 的 方 法 完 成, 即 将 解 释 过 程 产 生 的 解 释 信 息 截 取 过 来, 通 过 转 换 程 序 转 换 为 相 应 的 中 文 解 释 信 息 后 再 输 出 到 显 示 器。 该 软 件 也 设 计 成 中、 英 文 解 释 信 息 可 切 换 的 方 式。
由 于 编 译 信 息 的 汉 化 是 采 用" 替 换" 方 法 完 成 的, 没 有 对 原 编 译 器 进 行 改 动; 而 解 释 信 息 的 汉 化 是 采 用 转 换 的 方 法 完 成 的, 也 没 有 对 原 解 释 器 进 行 改 动, 因 此 不 影 响Java 编 译 后 的 字 节 码 通 过 国 际 互 联 网 与Web 传 输 至 各 种 异 质 平 台 或 不 同 的 操 作 系 统 中 执 行, 即 不 影 响Java 原 有 的 可 移 植 性 及 全 部 语 言 功 能。 中 文 化Java 与 西 文Java 在 功 能 上 完 全 兼 容, 性 能 一 致, 并 且 增 加 了 汉 字 处 理 能 力, 因 此 用 户 使 用 更 方 便。
由 于 本 软 件 全 部 采 用Java 语 言 编 写, 因 此 软 件 的 可 移 植 性 好。 而 且 在 研 制 开 发 软 件 的 过 程 中, 为 软 件 建 立 了 齐 全 的 文 档, 并 对 源 程 序 进 行 了 适 当 的 注 释, 因 此 便 于 维 护。
本 软 件 的 菜 单 条 由 文 件、 编 译、 运 行、 帮 助 四 部 分 组 成。
(1) 文 件 菜 单 文 件 菜 单 负 责 文 件 的 读、 写、 装 入 等 文 件 操 作。
(2) 编 译 菜 单 编 译: 编 译 当 前 窗 口 文 件, 此 时 文 件 应 已 存 盘。 选 择 编 译 菜 单 时, 会 弹 出 编 译 器 窗 口, 输 入 当 前 窗 口 文 件 的 目 录, 编 译 后 将 编 译 信 息 显 示 在 编 译 信 息 窗 口 中, 选 择 编 译 信 息 窗 口 中 的 中 文 或 英 文 按 钮 以 选 择 相 应 的 编 译 信 息 显 示 形 式。
(3) 运 行 菜 单 运 行: 解 释 当 前 窗 口 文 件 的 字 节 码 文 件, 选 择 运 行 菜 单 时, 会 弹 出 解 释 器 窗 口, 输 入 当 前 窗 口 文 件 的 目 录, 解 释 后 将 解 释 信 息 显 示 在 解 释 信 息 窗 口 中, 选 择 解 释 信 息 窗 口 中 的 中 文 或 英 文 按 钮 以 选 择 相 应 的 解 释 信 息 显 示 形 式。
(4) 帮 助 菜 单 提 供 软 件 的 名 称、 版 本 信 息、 版 权 所 属, 及 使 用 手 册。
三、Java 结 构 编 辑 器
Java 结 构 编 译 器 是"Java 伴 侣" 的 工 具 之 一, 目 的 是 向 国 内 用 户 提 供Java 程 序 的 编 辑 工 具。Java 结 构 编 辑 器(JavaSed) 是 面 向Java 程 序 设 计 语 言 的 语 法 引 导 编 辑 系 统。JavaSed 使 用 户 在 编 程 时 得 到 提 示 和 引 导, 因 而 避 免 错 误 操 作 和 产 生 语 法 错 误。
Java 结 构 编 辑 器 全 部 为 中 文 图 形 用 户 界 面, 支 持 多 窗 口 管 理, 更 适 合 国 内 用 户 使 用。 该 软 件 全 部 用Java 语 言 编 写, 可 跨 平 台 运 行, 目 前, 已 通 过 跨 平 台 测 试, 运 行 正 常。JavaSed 有 中 英 文 两 个 版 本, 用 户 可 根 据 需 要 进 行 选 择。
JavaSed 中, 程 序 的 语 法 树 是Java 程 序 的 唯 一 内 部 表 示, 用 户 的 所 有 编 辑 操 作 都 在 该 语 法 树 上 进 行。 在 程 序 的 语 法 树 中 包 含 了 构 成Java 程 序 的 各 种 语 法 成 分, 如<类 定 义>、<接 口 定 义>、<语 句> 等, 以 及 语 法 成 分 之 间 的 信 息。 有 的 语 法 成 分 由 其 它 语 法 成 分 复 合 构 成, 表 达 式、 标 识 符 等 则 被 看 作 为 终 结 语 法 成 分, 称 之 为 树 叶。JavaSed 由 模 板 驱 动, 模 板 库 是 构 成Java 程 序 的 零 件 库, 每 一 模 板 代 表 一 类 语 法 结 构, 用 以 说 明 该 语 法 的 组 成 成 分 及 组 成 方 式。 如:<语 句 体>==><空>(<语 句><语 句 体>。 程 序 初 建 时,Java 程 序 被 表 示 为 一 名 为<程 序> 的 语 法 树 构 造, 展 开 之 得 到 如 下 语 法 树, 进 一 步 展 开 语 法 树 中 的 各 模 板 来 完 成Java 程 序 的 建 立, 对 树 叶 则 采 用 直 接 输 入 正 文 的 方 式 来 展 开, 以 减 少 展 开 层 次。
该 软 件 的 主 界 面 主 要 包 括 四 部 分:
(1) 菜 单 条: 包 括 文 件 菜 单、 编 辑 菜 单、 工 作 菜 单、 帮 助 菜 单。 文 件 菜 单 提 供 各 种 文 件 管 理 功 能; 编 辑 菜 单 提 供 常 用 的 结 构 及 文 本 编 辑 操 作; 工 作 菜 单 负 责 程 序 的 编 译 及 解 释; 帮 助 菜 单 提 供 用 户 手 册。
(2) 模 板 选 择 按 钮: 包 括 各 种 语 句 模 板, 用 户 可 根 据 需 要 进 行 选 择。
(3) 状 态 条: 显 示 当 前 光 标 所 在 位 置 及 编 辑 状 态。
(4) 当 前 模 板 操 作 菜 单: 包 括 前 插、 后 插 模 板 及 注 释, 切 换 编 辑 状 态 等 菜 单 选 项。
JavaSed 提 供 文 本 块 操 作 功 能, 在 结 构 编 辑 状 态 下, 以 语 法 成 分 为 单 位 进 行 结 构 化 的 块 复 制、 粘 贴、 删 除。 在 文 本 编 辑 状 态 下, 以 字 符 为 单 位 进 行 文 本 块 的 复 制、 粘 贴、 删 除。 进 行 文 本 块 的 选 择 及 粘 贴 时, 软 件 自 动 进 行 结 构 化 检 查, 禁 止 非 法 选 择 及 粘 贴。
JavaSed 提 供 字 符 的 匹 配 与 替 换 等 功 能。
JavaSed 为 方 便 用 户 编 辑 操 作 提 供 编 辑 功 能 键。 模 板 显 示 时 自 动 缩 进, 关 键 字、 模 板 及 用 户 输 入 以 不 同 颜 色 标 识。JavaSed 为 全 屏 幕 编 辑, 支 持 鼠 标 及 光 标 的 任 意 游 动。
文 件 管 理 功 能 提 供 文 件 的 建 立、 保 存、 另 存、 读 入。
工 作 菜 单 负 责 编 译, 解 释 源 程 序。 目 前, 还 未 自 行 开 发 和 设 计Java 编 译 器 和 解 释 器, 该 功 能 直 接 调 用 其 它 厂 家 的 编 译 器 和 解 释 器, 之 后 将 编 译 和 解 释 的 错 误 信 息 显 示 在 输 出 窗 口 内, 使 用 前 需 设 置 好 编 译 及 解 释 的 运 行 参 数。
帮 助 菜 单 提 供Java 结 构 编 辑 器 的 使 用 说 明 书 及 版 本 信 息。
四、Java 语 言 与C/C++ 语 言 的 接 口
目 前,Java 的 类 库 功 能 比 较 简 单, 与MFC 的 相 比 较, 文 档 功 能、 文 件 管 理 等 方 面 的 类 较 少。Doc/View 软 件 体 系 结 构 是MFC 类 库 的 主 要 特 色。 文 档 功 能、 文 件 管 理 及 相 应 的 控 件 很 完 备, 是MFC 的 精 华 之 所 在。 我 们 依 据 对MFC 功 能 和 结 构 的 分 析, 以 及 对C++ 和Java 的 语 法 比 较, 将MFC 的 一 部 分 类 库, 包 括Cview、Cdocument、Cframe、CDocTemplate 的 功 能 移 植 到Java 类 库 中。 并 依 据Visual C++ 中AppWizard 的 思 想 给 用 户 提 供 一 个 快 速 的 应 用 程 序 生 成 器。
原 生 方 法 就 是Java 中 给 出 的 同 非Java 代 码 的 接 口, 是Java 同 操 作 系 统 和 运 行 环 境 相 联 系 的 机 制。SUN 公 司 是 使 用 底 层 操 作 系 统 的 动 态 连 接 能 力 来 实 现Java 与 原 生 方 的 接 口, 我 们 依 据Java 语 言 的 原 生 方 法 接 口 以 及 函 数 的 动 态 连 接 机 制, 给 用 户 提 供 一 个 将C++ 编 写 的 类 库 及C 的 函 数 库 自 动 复 用 于Java 语 言 的 接 口。 这 样 避 免 了 源 代 码 级 的 转 化 而 可 以 将 以 前 基 于C/C++ 所 开 发 的 一 些 工 作 重 用 于Java 中。 在MFC 中, 文 档 类CDocument 给 用 户 文 档 类 提 供 基 本 功 能, 支 持 对 文 档 的 标 准 操 作 如: 建 立、 调 用 和 保 存。 视 窗 类CView 给 用 户 定 义 的 视 窗 类 提 供 基 本 功 能; 视 窗 附 着 于 一 个 文 档 并 充 当 文 档 和 用 户 的 中 介。 框 架 类 给 视 窗 界 定 一 块 区 域,CDocTemplate 是 一 个 用 来 定 义 文 档 模 板 功 能 的 抽 象 基 类。 它 用 来 定 义 三 种 类 之 间 的 关 系:
文 档 类:CDocument
视 窗 类:CView, EditView
框 架 类: 单 文 档CframeWnd
模 板 类 将 以 上 三 个 类 的 指 针 存 放 在CRuntimeClass, 它 在 文 档 模 板 建 立 时 指 定 包 括 各 种 资 源 的 标 识 号: 如 菜 单、 图 标 和 加 速 表。
CDocTemplate 不 能 被 直 接 使 用, 通 常 使 用 的 是:SingleDocTemplate, 也 可 以 是 自 定 义 的DocTemplate 的 子 类。 我 们 基 本 上 完 全 移 植 这 一 结 构。
依 据Java 语 言 的 原 生 方 法 接 口 以 及 函 数 的 动 态 连 接 机 制, 该 软 件 给 用 户 提 供 了 一 个 将C++ 编 写 的 类 库 及C 的 函 数 库 自 动 复 用 于Java 语 言 的 接 口。 该 软 件 可 自 动 生 成Java 源 文 件、C 源 文 件 及 头 文 件, 使 用 户 方 便 地 调 用 原 有 的C/C++ 函 数 库。
五、Java 可 视 化 图 形 界 面 自 动 编 程 器
Java 图 形 界 面 是 基 于Java 语 言 中 的 抽 象 窗 口(AWT) 而 开 发 的 用 户 图 形 界 面。Java 图 形 界 面 可 视 化 自 动 编 程 器, 是 针 对AWT 现 存 的 不 足 而 对 其 组 件API 的 不 灵 活 等 方 面 进 行 扩 充 的, 为 用 户 进 行Java 图 形 界 面 编 程 提 供 方 便, 达 到 所 见 即 所 得 的 目 的。
可 视 化 自 动 编 程 器 中, 图 形 界 面 的 编 程 不 再 用 文 本 编 辑 器 逐 个 输 入 字 符 来 实 现, 而 是 通 过 直 观 的 图 形 编 辑 器, 对 图 形 组 件 进 行 选 择、 编 辑 等 操 作, 设 计 出 所 需 的 图 形 界 面, 然 后, 系 统 根 据 这 些 设 计 调 用 摸 板, 直 接 在 指 定 文 件 中 写 出 图 形 界 面 的 源 程 序。 这 就 代 替 了 手 工 直 接 输 入 的 图 形 界 面 编 程 方 式 大 大 地 提 高 了 编 程 效 率。
Java 图 形 界 面 可 视 化 自 动 编 程 器 支 持 用 户 在 本 编 程 器 的 编 辑 环 境 中 进 行 可 视 化 的 位 置 改 变、 编 辑、 删 除、 按 钮 大 小、 按 钮、 选 择 框、 写 入 和 下 拉 菜 单 等 编 辑 操 作, 并 根 据 这 些 操 作 在 本 编 程 器 的 模 板 的 引 导 下 生 成 相 应 的Java 源 程 序。 系 统 提 供 的 模 板 可 支 持Java 语 言 比 较 常 用 的 图 形 界 面 的 生 成, 包 括 下 拉 菜 单 和 各 种 对 话 框 等。 系 统 操 作 环 境 全 部 是 中 文, 可 更 好 地 支 持 中 文 化Java。
系 统 除 部 分 字 符 串 输 入 外, 所 有 操 作 均 为 鼠 标 操 作, 为 用 户 使 用 带 来 方 便。
系 统 在 多 处 提 供 了 提 示 信 息 为 用 户 的 顺 利 操 作 提 供 便 利。
该 软 件 有 以 下 主 要 功 能
(1) 文 件 和 帮 助
文 件: 该 部 分 完 成 文 件 的 打 开(OpenFileClass), 保 存 和 退 出。
帮 助: 该 部 分 提 供 系 统 操 作、 名 称、 开 发 时 间 及 版 本 等 帮 助 信 息。
(2) 编 辑, 包 括 组 件 的 选 择 与 操 作
组 件: 选 择 组 件, 包 括" 写 入 件"、" 输 入 件"、" 按 钮" 和" 下 拉 菜 单 件"( 字 体、 图、 声 和 颜 色 本 期 不 做)。
操 作: 完 成 组 件 的" 大 小"、" 删 除"、" 拖 动"、" 颜 色" 等 的 操 作。
(3) 转 换, 可 分 为 正 转 换、 逆 转 换 和 模 板
正 转 换: 将 编 辑 结 果 转 换 成Java 源 代 码。
逆 转 换: 将Java 源 代 码 转 换 成 图 形 界 面 编 辑 环 境。
模 板: 为" 转 换" 提 供 相 应 的 模 板, 源 程 序 文 件 名pattern.java。